1 votos

¿Automatizar el reposicionamiento y la actualización de los iconos de la barra de menús?

Antecedentes Cuando los elementos de la barra de menús se reorganizan manualmente utilizando Cmd+arrastrar, MacOS escribe una nueva preferencia de "posición preferida" para cada aplicación que muestra un icono de la barra de menús. (Esta preferencia ayuda, pero no garantiza, que conserven su posición en posteriores lanzamientos).

Problema Quiero automatizar el guardado de las posiciones de los iconos de la barra de menú, sin interactuar manualmente, por razones educativas y de accesibilidad.

Pregunta ¿Cómo puedo automatizar el reposicionamiento de un elemento de la barra de menús (que hará que el sistema escriba los nuevos prefijos)?

O, ¿cómo puedo hacer que MacOS escriba las nuevas preferencias directamente (sin automatizar el reposicionamiento de un elemento de la barra de menús)?

No quiero interactuar con los elementos del menú manualmente, ni escribir las preferencias yo mismo.

3voto

Next-Door Tech Puntos 109

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

-3voto

tonecurves Puntos 1

Creo que se refiere al archivo invisible llamado ".DS_STORE".

Si te sientes cómodo con la línea de comandos:

Puede ejecutar este comando para desactivar la escritura de ese archivo.

# Avoid creating .DS_Store files on network volumes
(sudo) defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true
# this should be run in your HOME directory. the "." means it will use the current folder.
# alternately you could test on one folder.
find . -type f -name '*.DS_Store' -ls -delete

Todas las carpetas anteriores deben tener sus archivos ".DS_STORE" borrados usando este comando.

Después de eliminar estos archivos, puede configurar la opción "Mostrar opciones de vista" en el menú de vista en el buscador a la forma que desee, y "hacer por defecto".

Si compartes directorios con otros usuarios de mac, sus archivos .DS_Store se crearán y afectarán a tu vista. Así que realmente sólo es efectivo en tu entorno personal.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X