web-dev-qa-db-fra.com

Attribuer un raccourci à l'exécution d'un script sous OS X

OS X offre-t-il un moyen facile de lier des combinaisons de touches à des commandes qui sont généralement exécutées sur la ligne de commande?

Par exemple, y a-t-il un moyen d'attribuer ⌘ Cmd+L comme raccourci global pour verrouiller rapidement mon écran, éventuellement en utilisant /System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine?

33
Stefan Lasiewski

Oui, vous pouvez le faire avec Applescript ou Automator .

Pour ce faire, j'ai utilisé Automator pour créer un service disponible dans toutes les applications. Un service peut être fait pour exécuter un script bash/zsh/Ruby/quel que soit. Vous pouvez ensuite lier une combinaison de touches au service dans le volet Clavier des préférences système.

Vers la fin de ce podcast MacBreak , cette procédure est présentée en détail.

Edit: Je viens de remarquer que vous n'utilisez pas Snow Leopard. Je ne pense pas que créer un service à l'échelle du système soit aussi facile avec 10.5.8. Je suppose que vous ne pouvez pas mettre à niveau car c'est un Powerbook. Vous voudrez peut-être vous pencher sur FastScripts qui vous permet d’attribuer des raccourcis clavier à des scripts de scripts (libre d’utiliser jusqu’à 10 raccourcis clavier) et d’utiliser le code suivant :

do Shell script "/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine"
21
ghoppe

J'utilise actuellement FastScripts . Il inclut tous les scripts dans ~/Library/Scripts/, vous n'avez donc pas besoin d'ajouter des scripts manuellement. Il prend également en charge les scripts spécifiques à l'application et présente quelques fonctionnalités utiles avec les scripts AppleScripts, comme arrêter un script avant une commande keystroke ou key code jusqu'à ce que les touches de modification soient libérées.

Si vous avez acheté le Powerpack pour Alfred 2 , vous pouvez créer des flux de travail comme celui-ci:

Les touches de raccourci ont un court délai par défaut, mais vous pouvez le réduire en modifiant le comportement du déclencheur:

KeyRemap4MacBook prend également en charge les scripts Shell en cours d'exécution:

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

Autres applications prenant en charge l’attribution de raccourcis aux scripts:

Une autre option consiste à créer un service Automator:

  1. Ouvrez Automator et choisissez le modèle de service.
  2. Vérifiez que le type d'entrée et le domaine d'application sont corrects ou remplacez "texte sélectionné" par "pas d'entrée" si le service ne reçoit aucune entrée.
  3. Ajoutez une action Exécuter un script de shell ou Exécuter AppleScript pour le script.
  4. Enregistrez le service et donnez-lui un raccourci dans les Préférences Système.

Il y a un bogue depuis 10.7 où les raccourcis pour les services ne fonctionnent pas jusqu'à ce que vous survoliez le menu des services dans la barre de menus. Les raccourcis pour les services ne fonctionnent pas lorsqu'une application qui n'a pas de menu de services (comme Tower) est à l'avant-plan. Il existe également un délai notable avant que les services ne soient exécutés.

36
Lri

Si vous utilisez BetterTouchTool, vous pouvez attribuer un raccourci à la commande Shell en sélectionnant l’action suivante: Contrôle d’autres applications> Exécuter la commande de terminal

1
alexeit

Voici un exemple de script KeePass.sh que j'ai créé. Je viens juste d’obtenir Get Info et de le configurer pour qu’il fonctionne avec Terminal. Après cela, j'ai créé un alias sur mon bureau. Il exécute le script KeePass.sh dans un terminal puis, une fois que vous avez quitté l'application, il supprime toutes les fenêtres de terminal ouvertes. Vous voudrez peut-être modifier cette dernière ligne :-)

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

Vous n'avez pas besoin d'utiliser quelque chose de spécial comme dans les réponses de tous les autres ici.

0
anon