我有一些基于 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)处于正常负载、响应其他任务且终端已启动时,可能会发生以下所有情况:
- 大约有一半的时间它的速度很快,只需不到一秒钟就能做出响应。
- 大约 25% 的时间需要三秒钟左右才能启动新的终端窗口。
- 大约有 5% 的时间会永远等待下去。我倾向于认为它根本不会响应,但二十秒后终于出现了一个窗口,这很奇怪。
- 大约有 10% 的时间我会收到错误消息
Workflow encountered an error
或类似的东西。 - 大约有 10% 的时间快捷方式根本没有响应(它只会突出显示另一个文件;但绝对没有快捷方式冲突)。我必须去
Finder->Services->Launch ...
使用该服务。
知道为什么该服务如此不稳定吗?(嗯,这不是我唯一不稳定的服务;实际上我创建的每个服务都很不稳定......)提前致谢。
答案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 秒)。