1

Я пытаюсь сделать комбинацию клавиш для запуска терминала в OS X Mountain Lion.Запуск Applescript: WorkFlowServiceRunner не будет завершен

После некоторых исследований я обнаружил, что я могу использовать Automator для достижения этой цели:

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

Это работает, но я заметил, что каждый раз, когда я запускаю терминал, используя этот метод, процесс, называемый WorkFlowServiceRunner начинается и никогда не заканчивается. Хуже того, когда я запускаю больше терминалов (или запускаю различные приложения с помощью ярлыков, опять же через Automator) multiple Процессы WorkFlowServiceRunner запускаются и быстро съедают память.

Я также пробовал писать свои собственные applescripts, но проблема не исчезнет. Это явно напоминает утечку памяти. Это ошибка в OS X Automator? Есть ли способ написать applescript, чтобы WorkFlowServiceRunner завершил работу после выполнения своей работы (например, запустить терминал)? Кажется, что Automator - самый «родной» способ сделать это, и я не хочу использовать сторонние приложения.

+0

Привет, я долго искал проблему. В то же время я смог получить не более двух экземпляров WorkFlowServiceRunner. Я посмотрел на запущенные процессы как с Activity Monitor.app, так и с помощью команды Unix: «ps aux», и я не смог реплицировать проблему. Я попытался все это исправить, добавив действие «Запустить AppleScript» в конец рабочего процесса, в котором говорилось: «сообщите текущему приложению о прекращении». Кажется, это не имело значения. – Kaydell

+0

Я немного уточнил свой ответ. – markhunte

ответ

4

Я заметил это время от времени.

Один из способов - создать свои собственные сервисные приложения с помощью Apple Cocoa-AppleScript.

Это не очень сложно. И я попробую и проведу вас через это. Это займет всего пару минут.

Шаг 1.

Откройте Application AppleScript Editor. И перейдите в меню "Файл" -> "Создать из шаблона" -> Какао-AppleScript Applet.app

enter image description here

Шаг 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,

Compile
(нажмите, чтобы это скомпилировать)

enter image description here

и Сохранить приложение.

* Убедитесь, что показать экран запуска снят в диалоге Сохранить.

Предоставление приложения имени LaunchTerminal.приложение

Шаг 4,

Нажмите кнопку «Bundle Содержание» на верхней правой части документа.

Откроется приложение содержание вид.

enter image description here

Нажмите кнопку Действие, а затем "Reveal в Finder" подменю.

enter image description here

шаг 5,

В папке содержимого, которое открывается в видоискателе вы увидите имя файла «info.plist»

Открыть Terminal.app и тип и беги используя этот файл, используя путь к этому файлу:

BUT убедитесь, что вы не включаете часть «.plist» при вводе в Terminal.app

/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, который является частью приложения для передачи в эфир, имеет службу.

The plist file Opened in a plist editor app

шаг 6,

Compile и сохранить приложение снова.

Просто чтобы убедиться, что оно поднимет изменения. (Я нашел, что я должен был сделать это, даже если я не должен)

шаг 7,

Дважды щелкните приложение, чтобы запустить его в первый раз.

Приложение сразу уйдет. Но первый запуск должен вещать, что у него есть сервис, который должен быть зарегистрирован в системе

шаг 8,

Открыть системные настройки и перейти к обслуживанию -> General (раздел)

И вы увидите сервис «Запуск терминала».

Настройте свой короткий отрезок как обычно.

Надеюсь, что это поможет.

UPDATE:

Я заметил, что РАССКАЖИ "Терминал" для активации. Не открывали бы мои группы окон по умолчанию, если бы я их закрыл и покинул терминал раньше. Нормальное поведение, если я это сделал, - это открыть мою оконную группу по умолчанию. (У меня есть две вкладки, открытые при запуске, каждый cd'd на другой путь).

Таким образом, я изменил открытое приложение на какао-способ его выполнения.

Выполнение сценария оболочки с открытием/application/path /. также будет работать.

+0

+1, чтобы показать, как создать службу таким образом (хотя могут быть более простые решения проблемы OP). – mklement0

+0

Отличный пост! Блестящее, вероятно, лучшее описание. – McUsr

0

Попробуйте использовать Butler или QuicKeys. У них обоих есть бесконечные «пробные периоды».