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


33

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

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

Réponses:


21

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 décrite 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 examiner FastScripts, qui vous permet d’attribuer des raccourcis clavier aux scripts d’applications (libre d’utiliser jusqu’à 10 raccourcis clavier) et d’utiliser le script Applescript suivant:

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

36

J'utilise actuellement FastScripts . Il inclut tous les scripts ~/Library/Scripts/, vous n’aurez donc pas à les ajouter manuellement. Il prend également en charge les scripts spécifiques à l’application et présente quelques fonctionnalités utiles avec les scripts AppleScript, comme le fait qu’il arrête un script avant une commande keystrokeou key codejusqu’à ce que les touches de modification soient libérées.

Si vous avez acheté le Powerpack pour Alfred 2 , vous pouvez créer des workflows comme ceci:

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 l'exécution de scripts 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>

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 eu un bogue depuis 10.7 où les raccourcis pour les services ne fonctionnaient 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.


open -a ScreenSaverEngineest même un peu plus court.
Jari Keinänen

Instructions Quicksilver: macosxtips.fr/index_files/…
paragbaxi

FastScripts est un shareware à 10 $ mais en vaut la peine.
Un nerd payé

Avez-vous un FastScript de base qui fait quelque chose comme bind F1 pour ouvrir un terminal ou autre?
Nick T

1
S'il vous plaît ajouter Hammerspoon à la liste :)
vault

1

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


0

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 à l'intérieur d'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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.