Establezca el método abreviado de teclado del servicio y haga que el cambio surta efecto mediante programación

Tengo el siguiente script para establecer un acceso directo a los servicios:

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"

Esto establece un método abreviado de teclado para un servicio que he definido en la lista de propiedades correspondiente e incluso se muestra correctamente cuando se visualiza en Preferencias del sistema. El problema es que el cambio no parece tener efecto . Invocar el método abreviado de teclado no tiene ningún efecto.

¿Cómo puedo configurar este acceso directo y hacer que tenga efecto de inmediato (completamente a través de shell/applescript)?

Respuestas (1)

Los cambios realizados por AppleScript se me aplican después de cerrar y volver a abrir las aplicaciones. Lo mismo para este comando:

/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";}'

No conozco ninguna forma de aplicar los cambios sin volver a abrir las aplicaciones. Ejecutar /System/Library/CoreServices/pbs -flusho terminar pbsno parece funcionar.

¿Qué aplicaciones? Este debería ser un atajo para todo el sistema, por lo que no estoy seguro de qué tendría que hacer para que se mantenga en todo el sistema.
Lo probé con Preview, pero probablemente sea lo mismo para todas las aplicaciones. También puede cerrar la sesión y volver a iniciarla o ejecutar sudo killall loginwindow. Si no funciona en absoluto, compruebe si hay un elemento de menú que tenga control-comando-V como acceso directo. Los accesos directos para los elementos del menú tienen prioridad sobre los accesos directos para los servicios.
Es cada ventana. Una vez que cierro todas las ventanas, funciona perfectamente. Eso es tan extraño. De todos modos, ¡respuesta perfecta! Gracias por toda la ayuda.