Legen Sie die Tastenkombination für den Dienst fest und lassen Sie die Änderung programmgesteuert wirksam werden

Ich habe das folgende Skript, um eine Diensteverknüpfung festzulegen:

set serviceName to "(null) - VimAnywhere - runWorkflowAsService"
set libPrefPath to POSIX path of (path to preferences folder from user domain as text)
set plistFile to "pbs.plist"
set plistPath to libPrefPath & plistFile as text
set mainPropertyItem to "NSServicesStatus"
set keyBindingKey to "key_equivalent"
set keyBinding to "^@v"

tell application "System Events"
  set gp to (get property list item serviceName of property list item mainPropertyItem of property list file plistPath)
  tell gp
    set value of property list item keyBindingKey to keyBinding
  end tell
end tell

do shell script "defaults read > /dev/null"

Dadurch wird ein Tastaturkürzel für einen Dienst festgelegt, den ich in der entsprechenden Eigenschaftsliste definiert habe, und es wird sogar korrekt angezeigt, wenn es in den Systemeinstellungen angezeigt wird. Das Problem ist, dass die Änderung anscheinend nicht wirksam wird . Das Aufrufen der Tastenkombination hat keine Wirkung.

Wie kann ich diese Verknüpfung festlegen und sofort wirksam werden lassen (vollständig über Shell/Applescript)?

Antworten (1)

Die von AppleScript vorgenommenen Änderungen werden für mich übernommen, nachdem ich Anwendungen beendet und erneut geöffnet habe. Gleiches gilt für diesen Befehl:

/usr/libexec/PlistBuddy -c 'Delete NSServicesStatus:"(null) - VimAnywhere - runWorkflowAsService"' ~/Library/Preferences/pbs.plist 2>/dev/null;defaults write pbs NSServicesStatus -dict-add '"(null) - VimAnywhere - runWorkflowAsService"' '{key_equivalent = "~@v";}'

Ich kenne keine Möglichkeit, die Änderungen anzuwenden, ohne Anwendungen erneut zu öffnen. Ausführen /System/Library/CoreServices/pbs -flushoder Beenden pbsscheint nicht zu funktionieren.

Welche Anwendungen? Dies sollte eine systemweite Verknüpfung sein, daher bin ich mir nicht sicher, was ich tun müsste, damit es systemweit bleibt.
Ich habe es mit Vorschau getestet, aber es ist wahrscheinlich für alle Anwendungen gleich. Sie können sich auch einfach ab- und wieder anmelden oder ausführen sudo killall loginwindow. Wenn es überhaupt nicht funktioniert, überprüfen Sie, ob es einen Menüpunkt gibt, der Strg-Befehl-V als Abkürzung hat. Die Shortcuts für Menüpunkte haben Vorrang vor den Shortcuts für Dienste.
Es ist jedes Fenster. Sobald ich alle Fenster schließe, funktioniert es perfekt. Das ist so seltsam. Wie auch immer, perfekte Antwort! Danke für all die Hilfe.