我有一个半长的AppleScript,我每天早上都会运行以启动我的所有应用程序等。它所做的一件事就是启动一些应用程序,然后立即将它们最小化。当我将.applescript源粘贴到脚本编辑器并运行它时,一切正常:
-- 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
......编译器将minimize
称为:
on minimize(w)
set |miniaturized| of w to true
end minimize
我收到了这个错误:
错误“邮件出错:无法将窗口ID 30936的|微型化|变为类型引用。”数字-1700来自| smallaturized |窗口ID 30936的引用
任何人都知道我在这里做错了什么?出于版本控制的目的,我需要通过osacompile
运行脚本。
更新:为了澄清,似乎正在发生的事情是脚本编辑器在命令行上编译方法的方式与osacompile
不同。是否知道它们是否编译不同(例如,使用范围推断或某些此类事物)?
答案 0 :(得分:1)
您的代码没有任何问题 - 我怀疑这是osacompile
中的错误,我建议您提交bug report with Apple - 我已经完成了。
您可以使用AppleScript Editor
将其直接保存为*.scpt
文件,然后使用osascript
运行,以验证您的代码是否正常运行。
[更新]相比之下,将*.applescript
源代码文件直接传递给osascript
确实会出现问题。
我没有充分理由认为基于AppleScript Editor
的编译工作方式与osacompile
(以及osascript
中的按需编译)不同,前者'在这种情况下,行为是预期的和期望的行为。
有2个变通办法:
在miniaturized
块中附加对using terms from application "System Events"
的引用:
这是一个通用的解决方法,可以与任何AppleScriptable应用程序中的窗口一起使用。
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
答案 1 :(得分:0)
on minimize(w)
set the miniaturized of w to true
end minimize
这不正确。你在任何应用程序告诉代码块之外“小型化”,这意味着它是一个applescript命令。这不是一个AppleScript命令。它是Mail和其他应用程序的命令。令人惊讶的是它在AppleScript编辑器中正常工作。它真的不应该。当你有一个没有意义的命令时,applescript足以让它理解它,有时它可以克服你的编码错误。显然,osacompile无法克服你的编码错误。
因此修复osacompile问题的方法是消除编码错误。您需要在应用程序内部使用小型化命令告诉代码块。
要查看我的意思打开“标准添加”applescript字典并尝试查找小型化命令。你找不到它。现在打开Mail的applescript字典,你会发现它。因此该命令属于Mail,而不属于AppleScript。