gpt4 book ai didi

applescript - 转换为一行 AppleScript

转载 作者:行者123 更新时间:2023-12-03 21:26:33 26 4
gpt4 key购买 nike

我有一系列 AppleScript 命令需要在一行 AppleScript 中实现。代码如下。

delay 2
tell application "System Events" to keystroke "foo"
tell application "System Events" to keystroke return

最佳答案

通过将字符串连接在一起,您可以将两个击键命令合并为一个:

tell app "System Events" to keystroke "foo" & return

但这仍然给你留下了一个命令和一个声明(延迟并告诉……对……)。

实际上,AppleScript 的语句分隔符是一个换行符。在现代 AppleScript 中,换行符可以是 CR、LF 或 CRLF(分别是:old-Mac-、Unix- 或 DOS-style)。没有方便的方法来编写多语句行(如 C、Perl、Ruby 等中的 foo; bar; baz;)。

对于您的特定请求,您可以通过将延迟用作表达式的一部分,以一种非常丑陋的方式将两者结合起来。
tell application "System Events" to keystroke "" & (delay 2) & "foo" & return

这很难看,因为从技术上讲,延迟不返回任何值,但我们可以将它与空字符串连接起来而不会导致错误。

问题是这样的结构不是很“通用”。您可能并不总是能够以相同的方式将任何命令转换为表达式(并且您不能使用像 tell 这样的语句作为表达式的一部分1)。为了更简洁(和混淆),您可以将最后一位写为 "foo" & return & (delay 2) .它仍然以相同的顺序运行(延迟优先),因为必须先评估串联表达式的每个部分,然后才能将其构建为击键命令的单个值。

1 将它们放在一个字符串中以运行脚本。即便如此,某些语句(循环、try/catch 等)始终是多行的;虽然您可以通过使用转义的换行符或连接以及换行符常量之一(如下所示)来解决这个问题。

您可以使用带有字符串参数的运行脚本,并使用反斜杠2 转义符来表示换行符。
run script "delay 0.1\ntell app \"System Events\" to keystroke \"foo\" & return"

AppleScript 编辑器可能会将转义符号转换为文字,除非您在其“编辑”首选项(在 10.5 及更高版本中可用)中启用了“字符串中的转义选项卡和换行符”。您始终可以使用返回常量和连接而不是字符串内文字/转义符号。
run script "delay 0.1" & return & "tell app \"System Events\" to keystroke \"foo\" & return"

2 如果您打算在 Objective C 字符串文字中表示此类字符串(正如您的评论之一可能暗示的那样),那么您还必须转义 Objective C 的反斜杠和双引号 (... & \"tell app \\\"System ...)。

或者,如果您最终尝试使用 osascript 运行代码,那么您可以使用 -e 的每个实例这一事实。将成为一个单独的行,将其全部放在一个 shell 命令行上。
osascript -e 'delay 2' -e 'tell app "System Events" to keystroke "foo" & return'

关于applescript - 转换为一行 AppleScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5288161/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com