Atribua um atalho para executar um script no OS X

33

O OS X fornece uma maneira fácil de vincular combinações de teclas a comandos que normalmente são executados na linha de comando?

Por exemplo, existe alguma maneira de atribuir ⌘ Cmd+ Lcomo um atalho global para bloquear rapidamente minha tela, possivelmente usando /System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine?

Stefan Lasiewski
fonte

Respostas:

21

Sim, você pode fazer isso com o Applescript ou o Automator .

A maneira como fiz isso é usar o Automator para criar um Serviço disponível em todos os aplicativos. Pode ser feito um serviço para executar um script bash / zsh / ruby ​​/ qualquer que seja. Em seguida, você pode vincular uma combinação de teclas ao serviço no painel Teclado das preferências do sistema.

Perto do final deste podcast MacBreak, este procedimento é mostrado em detalhes.

Edit: Acabei de perceber que você não está usando o Snow Leopard. Não acho que criar um serviço para todo o sistema seja tão fácil com o 10.5.8. Eu acho que você não pode atualizar, pois é um Powerbook. Você pode procurar no FastScripts, que permite atribuir atalhos de teclado a scripts de maçã (gratuitos para usar até 10 atalhos de teclado) e usar o seguinte Applescript:

do shell script "/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine"
ghoppe
fonte
36

Atualmente, uso o FastScripts . Ele inclui todos os scripts ~/Library/Scripts/, para que você não precise adicionar scripts manualmente. Ele também suporta scripts específicos de aplicativos e possui alguns recursos úteis com AppleScripts, como interrompe um script antes de um comando keystrokeou key codeaté que as teclas modificadoras sejam liberadas.

Se você comprou o Powerpack para Alfred 2 , poderá criar fluxos de trabalho como este:

As teclas de atalho têm um pequeno atraso por padrão, mas você pode reduzi-lo alterando o comportamento do acionador:

O KeyRemap4MacBook também suporta a execução de scripts de shell:

<?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>

Outros aplicativos que suportam a atribuição de atalhos para scripts:

Outra opção é criar um serviço Automator:

  1. Abra o Automator e escolha o modelo de Serviço.
  2. Verifique se o tipo de entrada e o escopo do aplicativo estão corretos ou altere "texto selecionado" para "sem entrada" se o serviço não receber nenhuma entrada.
  3. Adicione uma ação Executar Script do Shell ou Executar AppleScript para o script.
  4. Salve o serviço e atribua a ele um atalho nas Preferências do Sistema.

Houve um bug desde a versão 10.7, onde os atalhos para serviços nem sempre funcionam até você passar o mouse sobre o menu de serviços na barra de menus. Os atalhos para serviços não funcionam quando um aplicativo que não possui um menu de serviços (como o Tower) fica na frente. Também há um atraso perceptível antes da execução dos serviços.

Lri
fonte
open -a ScreenSaverEngineé ainda um pouco mais curto.
Jari Keinänen
Instruções do mercúrio: macosxtips.co.uk/index_files/…
paragbaxi
FastScripts é $ 10 shareware, mas vale a pena.
um nerd pago
Você tem um FastScript básico que faz algo como vincular F1 para abrir um terminal ou o que seja?
Nick T
1
Por favor, adicione Hammerspoon à lista :)
vault
1

Se você estiver usando o BetterTouchTool, poderá atribuir um atalho ao comando shell, selecionando uma ação a seguir: Controlando outros aplicativos> Executar comando do terminal

alexeit
fonte
0

Aqui está um exemplo de script KeePass.sh que fiz. Acabei de obter informações sobre ele e configurá-lo para executar com o Terminal. Depois disso, criei um alias para ele na minha área de trabalho. Ele executa o script KeePass.sh dentro de um Terminal e, depois que você sai do aplicativo, mata todas as janelas abertas do Terminal. Você pode ajustar a última linha :-)

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

Você não precisa usar nada de especial como nas respostas de todos os outros aqui.

anon
fonte