基于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.