Necesito una forma de configurar lo siguiente mediante programación:
EspecíficamenteparaaccesosdirectosenServicios,siesomarcaunadiferencia.MepreguntosiestoesposibleatravésdeshelloAppleScript?
EDITAR:
Hevisto
Necesito una forma de configurar lo siguiente mediante programación:
EspecíficamenteparaaccesosdirectosenServicios,siesomarcaunadiferencia.MepreguntosiestoesposibleatravésdeshelloAppleScript?
EDITAR:
Hevisto
@chrisKnadler hizo un buen punto al usar Applescript para hacer esto.
He usado esto antes en el pasado, pero lo desconté debido a que el nuevo problema en Mavericks es que la preferencia se almacena en caché en todo el sistema.
Lo que significa que solo puedes usar el comando unix
escribir por defecto ...
para hacer que los resultados cambien realmente en lugar de cambiarlos manualmente o usar los comandos plist item de Applescript
Sin embargo, ahora que he echado un vistazo ha encontrado una sugerencia de que simplemente puede vaciar la memoria caché e iniciar el sistema para leer la preferencia de nuevo simplemente llamando a un
valores predeterminados leídos ...
en el archivo plist que has cambiado. Esto parece funcionar.
set theServiceName to "(null) - Print to PDF - 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 theKey to "key_equivalent"
tell application "System Events"
set gp to (get property list item theServiceName of property list item mainPropertyItem of property list file PlistPath)
tell gp
--set value of property list item "enabled_services_menu" to true
--set value of property list item "enabled_context_menu" to true
set value of property list item theKey to "@^h"
end tell
end tell
do shell script " defaults read " & quoted form of PlistPath & > /dev/null
Es posible que aún necesite aplicaciones bastante individuales para que muestren el cambio (como es normal)
ACTUALIZACIÓN: Pequeño cambio.
Se agregó > /dev/null
al final del comando predeterminado, por lo que solo se devuelven los errores.
También puedes usar PlistBuddy
y defaults
:
/usr/libexec/PlistBuddy -c 'Delete NSServicesStatus:"(null) - test2 - runWorkflowAsService"' ~/Library/Preferences/pbs.plist 2>/dev/null;defaults write pbs NSServicesStatus -dict-add '"(null) - test2 - runWorkflowAsService"' '{key_equivalent = "^~@2";}'
El comando PlistBuddy
no es necesario si no existe una entrada para el servicio. Reemplace test2
con el nombre del servicio. Salga y vuelva a abrir las aplicaciones para aplicar los cambios.
^~@2
es control-option-command-2. Consulte enlace .
Como la mayoría de las preferencias, los atajos de teclado pueden configurarse usando los comandos de "escritura predeterminada" en el Terminal. Útil si tiene muchos accesos directos que desea definir, o si tiene más de una Mac para configurar. Sin embargo, la sintaxis no es exactamente la misma que la de los comandos habituales para establecer una clave en un valor.
Para los comandos específicos de la aplicación, use lo siguiente:
defaults write com.developer.app NSUserKeyEquivalents -dict-add "Menu Item" -string "@$~^k"
Las meta-claves se establecen como @ para Comando, $ para Shift, ~ para Alt y ^ para Ctrl. k en este ejemplo es la no-meta-clave que quieres usar.
Para los accesos directos de todo el sistema, puedes usar -g en lugar del identificador de la aplicación, por ejemplo
defaults write -g NSUserKeyEquivalents -dict-add "Menu Item" -string "@$~^k"
Tenga en cuenta que deberá reiniciar la aplicación antes de que surtan efecto. También puede ver si han tenido éxito en las Preferencias del sistema, que también necesitarán un reinicio para mostrar los cambios.
Los métodos abreviados de teclado de los servicios son un poco diferentes de los métodos abreviados específicos de la aplicación o de todo el sistema, aunque se pueden administrar utilizando defaults read
y defaults write
.
La forma más fácil que he encontrado para resolver este tipo de cosas es:
defaults read > /tmp/a
Cambie el método abreviado de teclado manualmente usando Preferencias del sistema
defaults read > /tmp/b
diff /tmp/[ab]
Para el caso específico de los métodos abreviados de teclado para Servicios, en OS-X 10.8 los dominios importantes son "com.apple.ServicesMenu.Services" y "pbs". Necesitas mirar el com.apple.ServicesMenu.Services domain para obtener la información necesaria para crear una entrada en el dominio pbs.
Por ejemplo:
La clave CFVendedServices
de com.apple.ServicesMenu.Services
para "Desarchivar en la carpeta actual es:
{
NSBundleIdentifier = "cx.c3.theunarchiver";
NSBundlePath = "/opt/homebrew-cask/Caskroom/the-unarchiver/3.9.1/The Unarchiver.app";
NSKeyEquivalent = { };
NSMenuItem = {
default = "The Unarchiver/Unarchive To Current Folder";
};
NSMessage = unarchiveToCurrentFolderWithPasteboard;
NSPortName = "The Unarchiver";
NSSendTypes = (
NSFilenamesPboardType
);
NSUUID = <be1910e8 cb1a3475 90854bc5 09f0c0ab>;
},
Para crear un método abreviado de teclado, la clave NSServices pbs se construye a partir de NSBundleIdentifier, NSMenuItem y NSMessage. Ejemplo:
defaults read pbs
{
"cx.c3.theunarchiver - The Unarchiver/Unarchive To Current Folder - unarchiveToCurrentFolderWithPasteboard" = {
"enabled_context_menu" = 1;
"enabled_services_menu" = 1;
"key_equivalent" = "@~^u";
};
"org.vim.MacVim - MacVim/New MacVim Buffer Here - newFileHere" = {
"key_equivalent" = "@~^v";
};
};
}
Desafortunadamente, el dominio pbs se construye como diccionarios anidados que no pueden ser manejados por defaults write
como este, casos más simples para otros atajos de teclado. Deberá leer la clave completa de NSServicesStatus, insertar su nueva entrada y luego escribirla:
defaults write pbs NSServicesStatus '{
"com.cocoatech.PathFinder - Path Finder/Show Info - getInfoInPathFinderService" = {
"key_equivalent" = "@~^$i";
};
"cx.c3.theunarchiver - The Unarchiver/Unarchive To Current Folder - unarchiveToCurrentFolderWithPasteboard" = {
"enabled_context_menu" = 1;
"enabled_services_menu" = 1;
"key_equivalent" = "@~^u";
};
"org.vim.MacVim - MacVim/New MacVim Buffer Here - newFileHere" = {
"key_equivalent" = "@~^v";
};
}'
También puede ser necesario forzar a pbs a vaciar su caché:
/System/Library/CoreServices/pbs -flush
Soy perezoso: utilizo una herramienta como FastScripts para configurar atajos de teclado globales e invocar scripts.
Es gratis a menos que necesites 11 o más accesos directos definidos. Además, el autor es un buen caballero que crea software de calidad y apoya a los usuarios mucho más allá de lo que podría esperar de una tienda para un solo hombre.
Lea otras preguntas en las etiquetas macos keyboard command-line applescript automator