基于AppleScript的Automator服务相当不稳定(有时非常慢,有时会遇到错误)


3

我有一些基于AppleScript的Automator服务,例如Launch Emacs With Selected File:

tell application "Finder"
    set selectedDirectory to (quoted form of POSIX path of (target of window 1 as alias))
    set selectedItem to (quoted form of POSIX path of (the selection as alias))
    tell application "Terminal"
        tell window 1
            do script "cd " & selectedDirectory & " && emacs " & selectedItem
        end tell
        activate
    end tell
end tell

我将它分配给键盘快捷键Ctrl-E,并且已经使用了几个月了。

但服务很不稳定。当我的机器,运行OS X 10.8的MacBook Pro处于正常负载状态,响应其他任务,并且终端已经运行时,可能会发生以下所有情况:

  1. 大约有一半的时间很快,只需不到一秒的时间就能做出回应。
  2. 大约25%的时间需要3秒左右才能启动新的终端窗口。
  3. 大约5%的时间需要永远。我倾向于认为它根本不会响应,但是在二十秒后终于出现一个窗口,这很奇怪。
  4. 大约有10%的时间我收到错误消息Workflow encountered an error或类似的东西。
  5. 大约10%的时间快捷方式根本没有响应(它只会突出显示另一个文件;但绝对没有快捷方式冲突)。我必须去Finder->Services->Launch ...使用该服务。

知道服务为何如此不稳定吗?(嗯,这不是我唯一不稳定的服务;实际上我创建的每项服务都很不稳定......)提前感谢。

Answers:


1

4.大约有10%的时间我收到错误消息Workflow encountered an error或类似的东西。

10.7和10.8中存在一个错误,其中Finder在获取选择属性时忽略新窗口。如果您打开一个新的Finder窗口,选择一些项目,并tell app "Finder" to selection在AppleScript编辑器中运行,结果是在最前面的窗口(或空列表)后面的某个窗口中选择的项目。

一种解决方法是将焦点转移到另一个应用程序并返回:

activate application "SystemUIServer"
tell application "Finder"
    activate
    set d to POSIX path of (target of Finder window 1 as alias)
    set f to POSIX path of (item 1 of (get selection) as alias)
end tell
set cmd to "cd " & quoted form of d & " && emacs " & quoted form of f
tell application "Terminal"
    try
        set w to window 1 where visible is true and busy is false
        do script cmd in w
        set frontmost of w to true  
    on error
        do script cmd
    end try
    activate
end tell

或者在这种情况下,您也可以将选择作为服务的输入。

5.大约10%的时间快捷方式根本没有响应(它只会突出显示另一个文件;但绝对没有快捷方式冲突)。我必须去Finder->Services->Launch ...使用该服务。

这可能是由另一个错误造成的。有时,只有将鼠标悬停在菜单栏上的服务菜单上,Automator服务的快捷方式才会起作用。我不知道它有什么变通方法。

尝试切换到FastScripts或以其他方式为脚本分配快捷方式。在Automator服务运行之前还有一个短暂的(可能0.1 - 0.5秒)延迟。


谢谢你的帮助。“获取选择属性时,Finder会忽略新窗口。” 究竟。我使用TotalFinder所以我不使用新窗口,所以我没有注意到服务只在新窗口上失败。但是使用您的脚本,新创建的终端窗口将隐藏在后面。有没有什么办法解决这一问题?很抱歉不太了解applescripts。
— 4ae1e1 2013年

我编辑了脚本,但我不知道是否修复了它。
— Lri

谢谢你的解决方案。因为我的硬盘昨天失败了所以现在无法测试...我想我可以在几天前拿到我的MBP。
— 4ae1e1 2013年

顺便说一句,即使它不起作用,也要感谢诊断。至少我现在知道错误的原因。
— 4ae1e1 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.