更改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

我有一个半长的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
。。。编译器将
最小化
设置为:

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