Назначьте ярлык для запуска скрипта в OS X

33

Предоставляет ли OS X простой способ привязки сочетаний клавиш к командам, которые обычно запускаются в командной строке?

Например, есть ли способ назначить ⌘ Cmd+ Lв качестве глобального ярлыка для быстрой блокировки моего экрана, возможно, с помощью /System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine?

Стефан Ласевский
источник

Ответы:

21

Да, вы можете сделать это с помощью Applescript или Automator .

То, как я это делал, - это использование Automator для создания Сервиса, доступного во всех приложениях. Можно создать сервис для запуска сценария bash / zsh / ruby ​​/ любой другой. Затем вы можете связать комбинацию клавиш со службой на панели «Клавиатура» системных настроек.

В конце этого подкаста MacBreak эта процедура показана подробно.

Редактировать: Я только что заметил, что вы не используете Snow Leopard. Я не думаю, что создать общесистемную службу проще с 10.5.8. Я думаю, вы не можете обновить, так как это Powerbook. Возможно, вы захотите взглянуть на FastScripts, который позволяет назначать сочетания клавиш для applecripts (бесплатно использовать до 10 сочетаний клавиш) и использовать следующий Applescript:

do shell script "/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine"
ghoppe
источник
36

В настоящее время я использую FastScripts . Он включает в себя все скрипты ~/Library/Scripts/, поэтому вам не нужно добавлять скрипты вручную. Он также поддерживает специфичные для приложения сценарии и имеет несколько функций, которые полезны для AppleScripts, например, останавливает сценарий перед командой keystrokeили key codeдо тех пор, пока не будут выпущены клавиши-модификаторы.

Если вы купили Powerpack для Alfred 2 , вы можете создавать такие рабочие процессы:

По умолчанию горячие клавиши имеют небольшую задержку, но вы можете уменьшить ее, изменив поведение триггера:

KeyRemap4MacBook также поддерживает запуск сценариев оболочки:

<?xml version="1.0"?>
<root>
  <vkopenurldef>
    <name>KeyCode::VK_OPEN_URL_SHELL_say_a</name>
    <url type="shell">say a</url>
  </vkopenurldef>
  <item>
    <name>test</name>
    <identifier>test</identifier>
    <autogen>__KeyToKey__ KeyCode::A, KeyCode::VK_OPEN_URL_SHELL_say_a</autogen>
  </item>
</root>

Другие приложения, которые поддерживают назначение ярлыков сценариям:

Другой вариант - создать службу Automator:

  1. Откройте Automator и выберите шаблон Сервиса.
  2. Убедитесь, что тип ввода и область применения указаны правильно, или измените «выбранный текст» на «нет ввода», если служба не получает никаких входных данных.
  3. Добавьте для сценария действие «Выполнить сценарий оболочки» или «Выполнить AppleScript».
  4. Сохраните сервис и дайте ему ярлык из Системных настроек.

С 10.7 существует ошибка, когда ярлыки для служб не всегда работают, пока вы не наведете курсор мыши на меню служб в строке меню. Ярлыки для сервисов не работают, когда приложение, у которого нет меню сервисов (например, Tower), находится на первом месте. Существует также заметная задержка до запуска служб.

LRI
источник
open -a ScreenSaverEngineдаже чуть короче.
Яри ​​Кейнянен
Quicksilver инструкции: macosxtips.co.uk/index_files/…
paragbaxi
FastScripts стоит $ 10 условно, но оно того стоит.
платный ботаник
У вас есть основной FastScript, который делает что-то вроде связывания F1, чтобы открыть терминал или что-то еще?
Ник Т
1
Пожалуйста, добавьте Hammerspoon в список :)
хранилище
1

Если вы используете BetterTouchTool, вы можете назначить ярлык для команды оболочки, выбрав следующее действие: Управление другими приложениями> Выполнить команду терминала

alexeit
источник
0

Вот пример скрипта KeePass.sh, который я сделал. Я просто получил информацию и настроил его для работы с терминалом. После этого я создал псевдоним к нему на рабочем столе. Он запускает скрипт KeePass.sh внутри терминала, а затем после выхода из приложения убивает все открытые окна терминала. Вы можете настроить эту последнюю строку :-)

cd ~/Documents/KeePass
/Library/Frameworks/Mono.framework/Versions/current/bin/mono KeePass.exe 1>/dev/null 2>/dev/null
cd ~
killall Terminal

Вам не нужно использовать ничего особенного, как в ответах всех остальных здесь.

скоро
источник