更改AppleScript输出以使其赢得';跑不动
我有一个半长的AppleScript,我每天早上运行它来启动我所有的应用程序等等。它所做的一件事就是启动一些应用程序,然后立即将它们最小化。当我将.applescript源代码粘贴到脚本编辑器并运行它时,一切正常:更改AppleScript输出以使其赢得';跑不动,applescript,Applescript,我有一个半长的AppleScript,我每天早上运行它来启动我所有的应用程序等等。它所做的一件事就是启动一些应用程序,然后立即将它们最小化。当我将.applescript源代码粘贴到脚本编辑器并运行它时,一切正常: -- snip: tell application "Mail" launch minimize(window 1) of me check for new mail end tell -- 'minimize' defined as: on minimize
-- snip:
tell application "Mail"
launch
minimize(window 1) of me
check for new mail
end tell
-- 'minimize' defined as:
on minimize(w)
set the miniaturized of w to true
end minimize
但当我编译AppleScript源代码时,如下所示:
osacompile -o ~/Library/Scripts/myscript.scpt myscript.applescript
。。。编译器将最小化设置为:
on minimize(w)
set |miniaturized| of w to true
end minimize
我得到了这个错误:
错误“邮件出错:无法将窗口id 30936的|小型化|转换为类型参考。”编号-1700,从窗口id 30936的|小型化|转换为参考
有人知道我做错了什么吗?为了进行版本控制,我需要通过osacomile
运行脚本
更新:为了澄清,脚本编辑器编译方法的方式似乎与命令行上的osacomile
不同。是否知道它们编译的是不同的(例如,使用范围推断或类似的东西)
这是不对的。您已经在任何应用程序代码块之外“小型化”,这意味着它是一个applescript命令。但它不是applescript命令。它是对邮件和其他应用程序的命令。令人惊讶的是,它在AppleScript编辑器中正常工作。真的不应该。当您有一个没有意义的命令时,applescript足够好,可以尝试理解它,有时它可以克服您的编码错误。显然,OSAComile无法克服您的编码错误
因此,解决OSA编译问题的方法是消除编码错误。您需要在应用程序代码块中使用微型化命令
要了解我的意思,请打开“标准添加”applescript字典,并尝试查找微型化命令。你不会找到的。现在打开Mail的applescript字典,您将找到它。因此,该命令属于Mail,而不是applescript
这是不对的。您已经在任何应用程序代码块之外“小型化”,这意味着它是一个applescript命令。但它不是applescript命令。它是对邮件和其他应用程序的命令。令人惊讶的是,它在AppleScript编辑器中正常工作。真的不应该。当您有一个没有意义的命令时,applescript足够好,可以尝试理解它,有时它可以克服您的编码错误。显然,OSAComile无法克服您的编码错误
因此,解决OSA编译问题的方法是消除编码错误。您需要在应用程序代码块中使用微型化命令
要了解我的意思,请打开“标准添加”applescript字典,并尝试查找微型化命令。你不会找到的。现在打开Mail的applescript字典,您将找到它。因此,该命令属于Mail,而不是applescript。您的代码没有问题-我怀疑这是OSAComile中的错误,我建议您提交一个文件-
您可以使用AppleScript Editor
将代码直接保存为*.scpt
文件,然后使用osascript
运行,以验证代码是否正常工作。
[更新]相比之下,将*.applescript
源代码文件直接传递到osascript
会出现问题
我认为基于AppleScript编辑器
的编译与osacomile
(以及osascript
中的按需编译)没有什么好的理由,在这种情况下,前者的行为是预期的和期望的
有两种解决办法:
set miniaturized of window 1 to true
- 使用应用程序“系统事件”中的术语将对
小型化的引用附在块中
:
这是一个通用的解决方法,可以从任何AppleScriptable应用程序使用windows
on minimize(w)
using terms from application "System Events" # WORKAROUND
set miniaturized of w to true
end using terms from
end minimize
- 内联微型化命令,而不是调用子程序:
set miniaturized of window 1 to true
您的代码没有问题-我怀疑这是OSAComile中的一个bug,我建议您提交一个文件-
您可以使用AppleScript Editor
将代码直接保存为*.scpt
文件,然后使用osascript
运行,以验证代码是否正常工作。
[更新]相比之下,将*.applescript
源代码文件直接传递到osascript
会出现问题
我认为基于AppleScript编辑器
的编译与osacomile
(以及osascript
中的按需编译)没有什么好的理由,在这种情况下,前者的行为是预期的和期望的
有两种解决办法:
set miniaturized of window 1 to true
- 使用应用程序“系统事件”中的术语将对
小型化的引用附在块中
:
这是一个通用的解决方法,可以从任何AppleScriptable应用程序使用windows
on minimize(w)
using terms from application "System Events" # WORKAROUND
set miniaturized of w to true
end using terms from
end minimize
- 内联微型化命令,而不是调用子程序:
set miniaturized of window 1 to true
将小型化
包含在管道中会导致编译器将其视为变量。是在编译代码时插入管道吗?另外,使用告诉应用程序“Mail”将w的小型化设置为true
右。。。源代码已经设置了小型化
这是唯一一个编译后的输出,它实现了|小型化|
,尽管我尽了最大努力阻止了它。我不想做设置小型化的原因。。。在每个应用程序的每个告诉块中,我更愿意在每个(w/代码重用等)中说最小化(窗口1)我的。您使用什么来编译脚本?使用OS X的OS