1

我正在尝试制作键盘快捷键以在 OS X Mountain Lion 中启动终端。

经过一番研究,我发现我可以使用Automator来实现这一点:

http://mac.tutsplus.com/tutorials/tips-shortcuts/how-to-launch-any-app-with-a-keyboard-shortcut/

它可以工作,但我注意到每当我使用这种方法启动终端时,一个名为WorkFlowServiceRunner的进程就会启动并且永远不会终止。更糟糕的是,当我启动更多终端(或再次通过 Automator 使用快捷方式启动不同的应用程序)时,多个WorkFlowServiceRunner 进程启动并迅速耗尽内存。

我也尝试过编写自己的applescripts,但问题并没有消失。这显然看起来像内存泄漏。这是 OS X Automator 中的错误吗?有没有办法编写一个applescript,以便 WorkFlowServiceRunner 在完成其工作后终止(例如启动终端)?Automator 似乎是完成这项工作的最“原生”方式,我不想使用任何 3rd 方应用程序。

4

2 回答 2

4

我不时注意到这一点。

一种解决方法是使用 Cocoa-AppleScript Applet 制作您自己的服务应用程序。

这不是很难做到。我会尽力指导你完成它。它应该只需要你几分钟。

步骤1。

打开您的应用程序 Applescript 编辑器。并转到“文件”菜单->“从模板新建”-> Cocoa-AppleScript Applet.app

在此处输入图像描述

第2步,

将此代码粘贴到新文档中。

property NSWorkspace : class "NSWorkspace"

tell current application's NSApp to setServicesProvider_(me)
NSUpdateDynamicServices()

my runAService()
    on runAService()

            NSWorkspace's sharedWorkspace()'s launchAppWithBundleIdentifier_options_additionalEventParamDescriptor_launchIdentifier_("com.apple.Terminal", current application's NSWorkspaceLaunchDefault, missing value, missing value)

        tell me to quit
    end runAService

第 3 步,

编译
(点击这里编译)

在此处输入图像描述

保存应用程序。

*确保 在保存对话框中未选中显示启动屏幕。

为应用命名,例如LaunchTerminal.app

第 4 步

单击文档右上角的“捆绑内容”按钮。

这将打开应用程序内容视图。

在此处输入图像描述

单击操作按钮,然后单击“在取景器中显示”子菜单。

在此处输入图像描述

步骤5,

在查找器中打开的内容文件夹中,您将看到一个文件名“info.plist”

打开 Terminal.app 并使用此文件的路径键入并运行此代码:

但请确保在 Terminal.app 中输入名称时不包含名称的“.plist”部分

 /usr/bin/defaults write /Users/YourUserNameHere/myServiceApps/LaunchTerminal.app/Contents/Info  NSServices -array-add '{NSMenuItem={default="Launch Terminal";}; NSMessage="runAService"; NSSendTypes=();}'

(您可以将文件拖放到终端以获取 posix 路径字符串)路径部分如下所示:/Users/YourUserNameHere/myServiceApps/LaunchTerminal.app/Contents/Info

此代码应将一个数组添加到 plist 文件中,这是应用程序广播它具有服务的方式的一部分。

在 plist 编辑器应用程序中打开的 plist 文件

步骤6,

再次编译并保存应用程序。

只是为了确保它接受更改。(我发现我必须这样做,即使我不应该这样做)

步骤7,

双击应用程序以首次运行它。

该应用程序将立即退出。但是第一次运行应该广播它有一个应该向系统注册的服务

步骤8,

打开系统首选项并转到服务 -> 常规(部分)

您将看到“启动终端”服务。

像往常一样设置你的捷径。

希望这可以帮助..

更新 :

我注意到告诉应用程序“终端”要激活。如果我之前将它们全部关闭并退出终端,则不会打开我的默认窗口组。如果我这样做了,正常的行为是打开我的默认窗口组。(我在启动时打开了两个选项卡,每个 cd'd 到不同的路径)。

因此,我将打开的应用程序更改为可可的方式。

一个打开/application/path/的do shell脚本。也将工作。

于 2013-09-16T01:06:00.580 回答
0

尝试使用ButlerQuicKeys。他们都有无尽的“试用期”。

于 2013-08-27T17:12:09.873 回答