Weisen Sie eine Verknüpfung zum Ausführen eines Skripts in OS X zu


33

Bietet OS X eine einfache Möglichkeit, Tastenkombinationen an Befehle zu binden, die normalerweise in der Befehlszeile ausgeführt werden?

Gibt es zum Beispiel eine Möglichkeit, ⌘ Cmd+ Lals globale Verknüpfung zuzuweisen , um meinen Bildschirm schnell zu sperren, möglicherweise mit /System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine?

Antworten:


21

Ja, Sie können dies mit Applescript oder Automator tun .

Ich habe so etwas getan, um mit Automator einen Dienst zu erstellen, der in allen Anwendungen verfügbar ist. Ein Dienst kann erstellt werden, um ein Bash / Zsh / Ruby / Was auch immer-Skript auszuführen. Anschließend können Sie im Bereich Tastatur der Systemeinstellungen eine Tastenkombination an den Dienst binden.

Gegen Ende dieses MacBreak-Podcasts wird dieser Vorgang im Detail gezeigt.

Bearbeiten: Ich habe gerade bemerkt, dass Sie Snow Leopard nicht verwenden. Ich denke nicht, dass das Erstellen eines systemweiten Dienstes mit 10.5.8 so einfach ist. Ich schätze, Sie können kein Upgrade durchführen, da es sich um ein Powerbook handelt. Vielleicht möchten Sie in FastScripts nachschauen , um Applescripts Tastaturkürzel zuzuweisen (die für bis zu 10 Tastaturkürzel kostenlos verwendet werden können) und das folgende Applescript verwenden:

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

36

Ich verwende derzeit FastScripts . Es enthält alle Skripts in ~/Library/Scripts/, sodass Sie Skripts nicht manuell hinzufügen müssen. Es unterstützt auch anwendungsspezifische Skripte und bietet einige nützliche Funktionen für AppleScripts, z. B. das Anhalten eines Skripts vor einem keystrokeoder key codeBefehl, bis die Änderungstasten freigegeben werden.

Wenn Sie das Powerpack für Alfred 2 gekauft haben , können Sie Workflows wie folgt erstellen:

Hotkeys haben standardmäßig eine kurze Verzögerung. Sie können diese jedoch reduzieren, indem Sie das Triggerverhalten ändern:

KeyRemap4MacBook unterstützt auch das Ausführen von Shell-Skripten:

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

Andere Anwendungen, die das Zuweisen von Verknüpfungen zu Skripten unterstützen:

Eine weitere Option ist das Erstellen eines Automator-Dienstes:

  1. Öffnen Sie Automator und wählen Sie die Service-Vorlage.
  2. Überprüfen Sie, ob der Eingabetyp und der Anwendungsbereich korrekt sind, oder ändern Sie "Ausgewählter Text" in "Keine Eingabe", wenn der Dienst keine Eingabe empfängt.
  3. Fügen Sie eine Aktion "Shell-Skript ausführen" oder "AppleScript ausführen" für das Skript hinzu.
  4. Speichern Sie den Dienst und geben Sie ihm eine Verknüpfung in den Systemeinstellungen.

Seit 10.7 gibt es einen Fehler, bei dem die Verknüpfungen für Dienste nicht immer funktionieren, bis Sie den Mauszeiger über das Menü Dienste in der Menüleiste bewegen. Verknüpfungen für Dienste funktionieren nicht, wenn eine Anwendung ohne Dienstmenü (wie Tower) an vorderster Stelle steht. Es gibt auch eine merkliche Verzögerung, bevor die Dienste ausgeführt werden.


open -a ScreenSaverEngineist sogar ein bisschen kürzer.
Jari Keinänen

Anweisungen für Quicksilver: macosxtips.co.uk/index_files/…
paragbaxi

FastScripts ist Shareware für 10 US-Dollar, aber es lohnt sich.
ein bezahlter Nerd

Haben Sie ein einfaches FastScript, das so etwas wie F1 bindet, um ein Terminal zu öffnen, oder was auch immer?
Nick T

1
Bitte fügen Sie Hammerspoon der Liste hinzu :)
Tresor

1

Wenn Sie BetterTouchTool verwenden, können Sie dem Shell-Befehl eine Verknüpfung zuweisen, indem Sie folgende Aktion auswählen: Andere Anwendungen steuern> Terminalbefehl ausführen


0

Hier ist ein Beispiel für ein KeePass.sh-Skript, das ich erstellt habe. Ich habe gerade Get Info draufgesetzt und es so eingestellt, dass es mit Terminal läuft. Danach habe ich auf meinem Desktop einen Alias ​​dafür erstellt. Es führt das Skript KeePass.sh in einem Terminal aus und beendet nach dem Beenden der Anwendung alle offenen Terminalfenster. Vielleicht möchten Sie diese letzte Zeile optimieren :-)

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

Sie müssen hier nichts Besonderes verwenden, wie in den Antworten aller anderen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.