¿Se puede crear un acceso directo para alternar la visibilidad de la barra de menú (que persistiría, como lo hace el muelle)?

3

Puedo elegir en Syst Prefs para que la barra de menú se muestre siempre u ocultar con auto-show (auto-show se muestra al pasar el mouse o al enfocar por teclado-atajo).

Pero cuando estoy trabajando, quiero que la barra de menús esté siempre visible. Y cuando estoy recreando, generalmente quiero que esté oculto.

Me gusta que con el dock pueda presionar commandoptiondpara mostrar u ocultar el dock, y permanece visible u oculto hasta que presione el mismo atajo nuevamente.

Ojalá la barra de menús funcionara de esta manera también. ¿Se puede crear tal atajo de alguna manera?


fuente
1
Solo para su información, descargué y probé FastScripts en macOS 10.12.3 con mi código como .scpt y le di un atajo de teclado ⌃⌘My ¡funciona muy bien! Mucho mejor que un servicio de automatización y preferencias de sistema vinculante clave.
user3439894

Respuestas:

1

Realizando algunos ajustes menores al código original desde la respuesta del usuario3439894. La ejecución de este código revisado no llevará la aplicación de preferencias del sistema al frente.

tell application "System Preferences"
    reveal pane id "com.apple.preference.general"
end tell
tell application "System Events" to tell process "System Preferences" to tell window "General"
    click checkbox "Automatically hide and show the menu bar" 
end tell
delay 1
quit application "System Preferences"

En algunos comentarios a mi respuesta, se ha señalado que donde tengo el comando de retraso en mi script, hace que el script falle. En mi sistema, este script funciona.

ingrese la descripción de la imagen aquí

Sin embargo, este script en mi sistema no funcionará si pongo el comando de retraso antes del evento del sistema.

ingrese la descripción de la imagen aquí

wch1zpink
fuente
@jaepage, el código de wch1zpink fallará a veces debido a dónde colocó el delay! En este caso, debe haber un clic delayantes System Eventsen la casilla de verificación , para permitir que el elemento esté disponible para actuar, y no necesita estar allí antes, quitespecialmente cuando está anidado como está escrito el mío.
user3439894
@ user3439894 Pensé que era necesario poner el retraso antes del comando de salida porque en mi sistema, por alguna razón, las preferencias del sistema se cerraron antes de que la casilla de verificación se seleccionara en el comando anterior
wch1zpink
Su código sin demora antes de la llamada de Eventos del sistema fallará si la casilla de verificación aún no está disponible para hacer clic y falla constantemente en mi sistema sin la demora como en mi código. Esta es una parte de por qué las secuencias de comandos de la interfaz de usuario no son la forma preferida de hacerlo. Solo uso UI Scripting si no tengo otra opción.
user3439894
@ user3439894 Mire las ediciones que hice a mi respuesta original. ¿Tienes alguna idea de por qué mi versión del script funciona para mí y no para ti? Estoy usando el sistema operativo Sierra.
wch1zpink
Permítanme tratar de aclarar las cosas ... No hay nada de malo en tener el lugar delaydonde lo tienen, sin embargo, mientras su código, tal como está escrito, falla en mi sistema, y ​​no el suyo es el motivo por el que algunos scripts de interfaz de usuario no siempre son confiables en cada individuo sistema. Simplemente desde un punto de vista programático, la casilla de verificación debe estar disponible antes de que se pueda actuar, por la misma razón por la que no puede cerrar la aplicación antes de que se actúe y por qué un retraso es realmente apropiado en cualquier lugar según sea necesario (o deseado por alguna razón) ) y pueden necesitar valores diferentes según el sistema individual y su uso general.
user3439894
1

Usted preguntó: " ¿Se puede crear un acceso directo para alternar la visibilidad de la barra de menú (que persistiría, como lo hace el muelle)? " Y la respuesta corta es .

Sin embargo, la respuesta más larga es que, aunque es técnica y nativamente posible crear un flujo de trabajo del Servicio de Automator que se le asigna un atajo de teclado para ocultar / mostrar la barra de Menú en OS X 10.11 y posterior, incluido el macOS actual, no está exento de problemas.

  • Tendría que asignar al Servicio de Automator un método abreviado de teclado que no interfiera con un método abreviado existente en cada aplicación que podría tener foco cuando activó el método abreviado de teclado del servicio.
  • Cada aplicación que se enfoca cuando se activa el método abreviado de teclado del servicio tendría que agregarse a Preferencias del sistema> Seguridad y privacidad> Privacidad> Accesibilidad, para que el método abreviado de teclado del servicio funcione.

Una posible solución al segundo punto anterior sería si hay una aplicación de terceros que se puede configurar globalmente para activar el flujo de trabajo del Servicio Automator (o el código AppleScript como un script AppleScript o una aplicación que no utiliza un Servicio Automator). Esto podría incluir aplicaciones como Alfred, FastScripts, Karabiner, Karabiner-Elements, Keyboard Maestro, etc., y al no haber probado estas aplicaciones de terceros en este escenario en particular, solo puedo ofrecer eso como algo a considerar.

Entonces, ¿qué tal una aplicación AppleScript que podría colocar en el Dock, para que esté fácilmente disponible para hacer clic, que alternará el estado de la barra de menús? Solo tendrá que agregar esa aplicación AppleScript a Preferencias del sistema> Seguridad y privacidad> Privacidad> Accesibilidad, para que funcione.

En lugar de una aplicación de terceros o como un Servicio Automator y solo como una aplicación AppleScript simple, tienes un atajo de teclado integrado a través de Spotlight, en el que presionas spacey el primer carácter o dos del nombre que le diste la aplicación AppleScript y luego presione enter. Como ejemplo, asígnele el nombre tmb.app para alternar la barra de menú, presionaría spacetmenterpara activar la aplicación AppleScript. Después de todo, doblo ya tienes una aplicación llamada tm instalada.

Sin embargo, dicho esto, no está exento de posibles problemas, ya que depende de las secuencias de comandos de la interfaz de usuario, lo que significa que tiene que abrir las Preferencias del sistema a la configuración General y hacer clic en la casilla de verificación "Ocultar y mostrar automáticamente la barra de menú" y cerrar las Preferencias del sistema. Esto significa que una vez que activó la aplicación, debe dejar que se ejecute y no robar manualmente el foco de las Preferencias del Sistema mientras se llevan a cabo los eventos de Scripting UI. En otras palabras, debe detener la multitarea durante un par de segundos.

En parte, uno de los problemas al usar AppleScript y / o las secuencias de comandos de la interfaz de usuario para ocultar / mostrar la barra de menú es que no es tan elegante como ocultar el Dock con su atajo de teclado incorporado, pero al menos es factible.

Dicho todo esto, aquí está el código AppleScript, que se puede usar en una aplicación / script AppleScript, en un servicio Automator o, posiblemente, en una aplicación de terceros, que alternará el estado de la barra de menú en OS X 10.11 y posterior a través de secuencias de comandos UI.


tell application "System Preferences"
    reveal pane id "com.apple.preference.general"
    delay 1
    tell application "System Events"
        click checkbox "Automatically hide and show the menu bar" of window "General" of process "System Preferences"
    end tell
    quit
end tell

Tenga en cuenta que no hay verificación de errores para garantizar que este código se ejecute en OS X 10.11 y posteriores, así que no intente usarlo en versiones de OS X anteriores a 10.11. También tenga en cuenta que el valor del delay comando puede necesitar ajustarse según sea necesario bajo las condiciones de trabajo de su sistema.

usuario3439894
fuente
@jaepage, ¿Qué tal si no ve la ventana de Preferencias del Sistema? En otras palabras, se abre fuera de la pantalla, marca / desmarca la casilla y se cierra. Luego, se cambia el estado de la barra de menú, pero no es necesario que vea los eventos de la IU. Eso es diferente si las Preferencias del sistema están en el Dock, rebotará una vez y el punto estará debajo de su icono hasta que se cierre.
user3439894
@ user3439894 usted merece el crédito por la respuesta aceptada. ¿Hay alguna forma de publicar mi revisión como un comentario a su respuesta?
wch1zpink
@jaepage, actualicé el código para ocultar las ventanas de Preferencias del Sistema mientras hacía el cambio para ocultar / mostrar la barra de Menú. Reemplacé activatepor set bounds of window 1 to {0, 0, 0, 0}y, por lo tanto, no ve la ventana de Preferencias del sistema pero hace el cambio. En realidad, podrías dejar a ambos fuera y no deberías ver la interfaz de usuario.
user3439894
@jaepage, nombré la aplicación tmb.app para probar y después de buscarla una vez en Spotlight para tmbluego realizar búsquedas posteriores de solo tm show tmb antes de Time Machine . Dicho esto, podría nombrarlo de otra manera que no coincidiría con nada más. Acabo de sugerir tmb, ya que hace que sea fácil de recordar para la barra de menú de alternancia , cuyo nombre completo como ese no abriría Time Machine, sino que también podría captar otras cosas. Tendrá que averiguar qué convención de nombres funciona mejor para que solo tenga que escribir uno o dos caracteres después ⌘space.
usuario3439894
@jaepage, no recomiendo usar Automator y vincularlo a una secuencia de teclas de acceso directo en Preferencias del Sistema por las razones que expliqué en mi respuesta y también porque no es confiable. Esta es la razón por la que sugerí que las aplicaciones de terceros activen o utilicen solo el método de la aplicación AppleScript en el Dock o desde Spotlight como la aplicación AppleScript, todo lo que tiene que ser autorizado y ese método nunca me ha fallado.
user3439894
0

Estoy publicando esto como una segunda respuesta en lugar de editar mi respuesta original, ya que esta nueva versión del ejemplo del código AppleScript acomoda los problemas planteados con el uso del comando y dónde se colocó en el código presentado por wch1zpink y yo entre nuestras versiones de El código .delay

El nuevo código envuelve un valor mucho más pequeño para el delay comando en un repeat bucle , lo que hace que el código general se ejecute más rápido al tiempo que acomoda el diferencial de tiempo basado en las especificaciones del sistema de la computadora en la que se ha ejecutado. Además, debido al uso de secuencias de comandos de la interfaz de usuario , los dos repeat bucles aseguran que los elementos de la interfaz de usuario estén disponibles y que se hayan cambiado respectivamente antes de continuar dentro del código .

Este código fue probado bajo macOS High Sierra y funcionó como una aplicación AppleScript , servicio Automator , como se describe en mi respuesta original, y como un archivo .scpt de AppleScript activado por FastScripts con un atajo de teclado asignado, como con el servicio Automator .

Ejemplo de código AppleScript :

if running of application "System Preferences" then
    try
        tell application "System Preferences" to quit
    on error
        do shell script "killall 'System Preferences'"
    end try
end if

repeat while running of application "System Preferences" is true
    delay 0.01
end repeat

tell application "System Preferences" to ¬
    reveal pane id "com.apple.preference.general"

tell application "System Events"

    repeat until exists checkbox ¬
        "Automatically hide and show the menu bar" of ¬
        window "General" of process "System Preferences"
        delay 0.01
    end repeat

    set cbVal to value of checkbox ¬
        "Automatically hide and show the menu bar" of ¬
        window "General" of process "System Preferences"

    click checkbox "Automatically hide and show the menu bar" of ¬
        window "General" of process "System Preferences"

    repeat until cbVal is not (value of checkbox ¬
        "Automatically hide and show the menu bar" of ¬
        window "General" of process "System Preferences")
        delay 0.01
    end repeat

end tell

tell application "System Preferences" to quit

    Desplácese según sea necesario para ver el código completo .

 


Nota: El código de AppleScript de ejemplo es solo eso y, además del manejo de errores incluido, no contiene ningún manejo de errores adicional, según corresponda. La responsabilidad recae sobre el uso para agregar cualquier manejo de errores según sea apropiado, necesario o deseado. Observe la declaración de prueba y la declaración de error en la Guía del lenguaje AppleScript . Ver también, Trabajar con errores .

También tenga en cuenta que no estoy afiliado con Red Sweater Software , el desarrollador de FastScripts , solo un usuario satisfecho de su producto.

usuario3439894
fuente
0
  1. Hizo una aplicación con Automator usando este código AppleScript por "@ user3439894". Puede intentar establecer el retraso en 0.1, que funcionó para mí.
    decir a la aplicación "Preferencias del sistema"
        revelar id del panel "com.apple.preference.general"
        retraso 1
        decirle a la aplicación "Eventos del sistema"
            haga clic en la casilla de verificación "Ocultar y mostrar automáticamente la barra de menú" de la ventana "General" del proceso "Preferencias del sistema"
        final decir
        dejar
    final decir
  1. Hizo un atajo de teclado para la aplicación y lo asignó a cmd-ctrl-9 Funciona muy bien.

Instrucciones aquí: https://appleinsider.com/articles/18/03/14/how-to-create-keyboard-shortcuts-to-launch-apps-in-macos-using-automator

Huésped
fuente
Las respuestas en Ask Different deben ser independientes, ya que si su enlace se cae, su respuesta será inútil. Parafrasear la fuente e incluir cualquier información relevante en la respuesta asegurará que
siga