wal*_*rir 14 applescript line applescript-objc
我有一系列AppleScript命令需要在AppleScript的单行中实现.代码如下.
delay 2
tell application "System Events" to keystroke "foo"
tell application "System Events" to keystroke return
Run Code Online (Sandbox Code Playgroud)
Chr*_*sen 23
您可以通过将字符串连接在一起将两个击键命令组合成一个:
tell app "System Events" to keystroke "foo" & return
Run Code Online (Sandbox Code Playgroud)
但是这仍然留给你一个命令和一个声明(延迟并告诉......).
实际上,AppleScript的语句分隔符是一个换行符.在现代AppleScript中,换行符可以是CR,LF或CRLF(分别为:旧式Mac,Unix或DOS型).编写多语句行没有方便的方法(比如foo; bar; baz;
在C,Perl,Ruby等等).
对于您的特定请求,您可以使用延迟作为表达式的一部分,以非常丑陋的方式将两者结合起来.
tell application "System Events" to keystroke "" & (delay 2) & "foo" & return
Run Code Online (Sandbox Code Playgroud)
这很难看,因为延迟在技术上没有返回任何值,但是我们能够将它与空字符串连接而不会导致错误.
问题是这种结构不是很"通用".您可能无法始终以相同的方式将任何命令转换为表达式(并且您不能使用诸如tell之类的语句作为表达式1的一部分).为了更简洁(和混淆),您可以将最后一位写为"foo" & return & (delay 2)
.它仍然以相同的顺序运行(首先是延迟),因为必须先评估连接表达式的每个部分,然后才能将它构建到keystroke命令的单个值中.
1将它们放入一个字符串中,以便运行脚本.即使这样,一些语句(循环,try/catch等)总是多行的; 虽然你可以通过使用转义换行符或连接和其中一个换行符常量来解决这个问题(如下所示).
您可以将run脚本与字符串参数一起使用,并使用反斜杠2转义来表示换行符.
run script "delay 0.1\ntell app \"System Events\" to keystroke \"foo\" & return"
Run Code Online (Sandbox Code Playgroud)
AppleScript编辑器可能会将转义符号转换为文字,除非您在其编辑首选项(10.5和更高版本中可用)中启用了"在字符串中转义选项卡和换行符".您始终可以使用返回常量和连接而不是in-string-literal/escape-notation.
run script "delay 0.1" & return & "tell app \"System Events\" to keystroke \"foo\" & return"
Run Code Online (Sandbox Code Playgroud)
2如果你要在Objective C字符串文字中表示这样的字符串(正如你的一条评论所暗示的那样),那么你将不得不逃避Objective C的反斜杠和双引号,也是(& \"tell app \\\"System
......).
或者,如果您最终尝试使用osascript运行代码,那么您可以使用这样一个事实:每个实例-e
将成为一个单独的行,将它全部放在一个shell命令行上.
osascript -e 'delay 2' -e 'tell app "System Events" to keystroke "foo" & return'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5945 次 |
最近记录: |