He encontrado una manera de escribir directamente el Posición preferida utilizando el comando del shell defaults
. Dejaré de lado la parte de la automatización ya que no conozco los detalles de tu proyecto (asumo que sabes cómo automatizar los comandos del shell como usuario actual). Esto debería permitirte cambiar los valores preferidos pero no moverá los elementos de la barra de menú sin reiniciar.
Antecedentes
El sistema Defaults se utiliza para almacenar ciertas preferencias del usuario en MacOS. Entre ellas se encuentra el Posición preferida para los elementos de la barra de menús. Dejaré que Apple explique mejor lo básico:
Desde man defaults
:
Defaults permite a los usuarios leer, escribir y eliminar los valores predeterminados del usuario de Mac OS X desde un shell de línea de comandos. Las aplicaciones de Mac OS X y otros programas utilizan el sistema de valores predeterminados para registrar las preferencias del usuario y otra información que debe mantenerse cuando las aplicaciones no se están ejecutando (como la fuente predeterminada para los nuevos documentos o la posición de un panel de información). Gran parte de esta información es accesible a través del panel de Preferencias de una aplicación, pero otra no, como la posición del panel de Información.
Los valores predeterminados de los usuarios pertenecen a dominios, que suelen corresponder a aplicaciones individuales. Cada dominio tiene un diccionario de claves y valores que representan sus valores por defecto; por ejemplo, "Fuente por defecto" = "Helvética". Las claves son siempre cadenas, pero los valores pueden ser estructuras de datos complejas que comprenden matrices, diccionarios, cadenas y datos binarios. Estas estructuras de datos se almacenan como listas de propiedades XML.
En resumen, los impagos se clasifican en Dominios (la aplicación o el servicio al que pertenece el ajuste), se identifican mediante Claves (el nombre de la configuración particular), y cada * Clave tiene un Valor asignado a ella.
El Posición preferida Los defectos que nos interesan no están todos bajo una dominio ya que las aplicaciones individuales pueden añadir nuevos elementos a la barra de menús. Sin embargo, el llaves todos comparten este formato:
NSStatusItem Preferred Position <menu-item-name>
donde <menu-item-name>
es el nombre de cada elemento que añade una aplicación o servicio concreto.
El valores se almacenan como float
números, generalmente enteros pero algunos tienen punto decimal.
Aquí están los valores predeterminados de los elementos de menú incorporados a MacOS en mi máquina como ejemplo.
'com.apple.systemuiserver': {
"NSStatusItem Preferred Position Item-0" = 23;
"NSStatusItem Preferred Position Siri" = 61;
"NSStatusItem Preferred Position com.apple.menuextra.TimeMachine" = 548;
"NSStatusItem Preferred Position com.apple.menuextra.airport" = 483;
"NSStatusItem Preferred Position com.apple.menuextra.battery" = 179;
"NSStatusItem Preferred Position com.apple.menuextra.bluetooth" = 513;
"NSStatusItem Preferred Position com.apple.menuextra.textinput" = 127;
"NSStatusItem Preferred Position com.apple.menuextra.volume" = 260;
}
com.apple.systemuiserver
es un dominio que contiene el clave NSStatusItem Preferred Position Siri
con valor 61
.
Listado de todas las posiciones preferentes actuales
Para enumerar todos los dominios , llaves y valores para nuestro Posición preferida Por defecto, podemos utilizar el defaults find
para buscar coincidencias.
El comando que necesitamos en este caso es defaults find "NSStatusItem Preferred Position"
.
$ defaults find "NSStatusItem Preferred Position"
Found 1 keys in domain 'com.coconut-flavour.coconutBattery-Menu': {
"NSStatusItem Preferred Position Item-0" = "344.5";
}
Found 1 keys in domain 'com.lastpass.LastPass': {
"NSStatusItem Preferred Position Item-0" = 795;
}
Found 8 keys in domain 'com.apple.systemuiserver': {
"NSStatusItem Preferred Position Item-0" = 23;
"NSStatusItem Preferred Position Siri" = 61;
"NSStatusItem Preferred Position com.apple.menuextra.TimeMachine" = 548;
"NSStatusItem Preferred Position com.apple.menuextra.airport" = 483;
"NSStatusItem Preferred Position com.apple.menuextra.battery" = 179;
"NSStatusItem Preferred Position com.apple.menuextra.bluetooth" = 513;
"NSStatusItem Preferred Position com.apple.menuextra.textinput" = 127;
"NSStatusItem Preferred Position com.apple.menuextra.volume" = 260;
}
Found 1 keys in domain 'org.pqrs.Karabiner-Menu': {
"NSStatusItem Preferred Position Item-0" = 750;
}
Found 1 keys in domain 'com.google.GoogleDrive': {
"NSStatusItem Preferred Position Item-0" = 607;
}
... and so on ...
Lectura y escritura del valor de un dominio y una clave dados
Para leer el valor de un determinado dominio y clave necesitamos utilizar el defaults read
de mando. Para escribir, utilizamos defaults write
.
Aquí, voy a leer el valor de la clave NSStatusItem Preferred Position Siri
en el com.apple.systemuiserver
dominio .
Tenga en cuenta que el dominio y clave debe ir entre comillas dobles.
$ defaults read "com.apple.systemuiserver" "NSStatusItem Preferred Position Siri"
61
Aquí, voy a cambiar el clave NSStatusItem Preferred Position Siri
en el com.apple.systemuiserver
dominio a la valor 42.7
.
Tenga en cuenta que el dominio y clave debe ir entre comillas dobles, y el -float
antes de la valor
$ defaults write "com.apple.systemuiserver" "NSStatusItem Preferred Position Siri" -float 42.7
$ defaults read "com.apple.systemuiserver" "NSStatusItem Preferred Position Siri"
42.7
Una vez más, dejaré que seas tú quien decida cómo automatizar esto, pero todo esto puede integrarse fácilmente en tu código.
Si esto no te funciona, aquí tienes algunos enlaces a los documentos de Apple Developer AppKit para añadir elementos a la barra de menús, así como para acceder al sistema Defaults usando objective-c y swift. No estoy seguro de que te sirvan de algo, pero tal vez te pongan en el camino correcto.
https://developer.apple.com/documentation/appkit/nsstatusitem
https://developer.apple.com/documentation/appkit/nsstatusbar
https://developer.apple.com/documentation/foundation/userdefaults