Uso de applescript para crear espacios y lanzar aplicaciones

Entonces, el objetivo final de lo que estoy buscando hacer es este:

Cuando estoy en el trabajo uso un monitor externo con mi MBP. Tengo un conjunto constante de espacios y aplicaciones que configuro todos los días. Lo que me gustaría hacer es crear un applescript o una combinación de applescript y una aplicación de automatización que, una vez iniciada, creará la cantidad necesaria de espacios en cada monitor y luego abrirá las aplicaciones apropiadas en cada espacio.

No sé si esto se logra mejor completamente en applescript o, como dije, usando una combinación de applescript para crear los espacios y automator para abrir la mayor parte de las aplicaciones y las ventanas del navegador que uso.

no es una respuesta, pero hay una gran cantidad de rutinas de Applescript/Spaces en macscripter.net/viewtopic.php?id=23453
@Tetsujin, IIRC Esos scripts no funcionan desde OS X 10.8. FWIW Spaces y/o Mission Control no son realmente amigables con el guión, es realmente impredecible dependiendo de lo que uno esté tratando de hacer.

Respuestas (2)

Para agregar un Desktop Space a cada monitor/pantalla:

do shell script "/Applications/Mission\\ Control.app/Contents/MacOS/Mission\\ Control"
delay 0.5
tell application "System Events" to click (every button whose value of attribute "AXDescription" is "add desktop") of group 1 of process "Dock"
delay 0.5
do shell script "/Applications/Mission\\ Control.app/Contents/MacOS/Mission\\ Control 1"

Se puede modificar el código para agregar más escritorios.

Para cambiar a una aplicación de escritorio / pantalla completa en particular en una configuración de pantalla dual, por ejemplo, Escritorio 3:

do shell script "/Applications/Mission\\ Control.app/Contents/MacOS/Mission\\ Control"
delay 0.5
try
    tell application "System Events" to click (first button whose value of attribute "AXDescription" is "exit to Desktop 3") of list 1 of group 1 of process "Dock"
on error
    tell application "System Events" to click (first button whose value of attribute "AXDescription" is "exit to Desktop 3") of list 2 of group 1 of process "Dock"

end try

Hay debates por ahí sobre convertir una aplicación en modo de pantalla completa con script.

Haga clic en el botón 'agregar escritorio' en el elemento de la interfaz de usuario "Barra espaciadora" en Big Sur (no estoy seguro de cuándo cambió esto).

hacer shell script "abrir -a 'Mission Control'"
retraso 0.5
Dile a la aplicación "Eventos del sistema" que ¬
    haga clic en (cada botón cuyo valor de atributo "AXDescription" sea "agregar escritorio") ¬
        del elemento de interfaz de usuario "Barra espaciadora" del elemento de interfaz de usuario 1 del grupo 1 del proceso "Dock"
retraso 0.5
hacer shell script "abrir -a 'Mission Control'"
Ahora quiero borrar un espacio. He leído n8henrie.com/2013/03/a-strategy-for-ui-scripting-in-applescript y apple.stackexchange.com/questions/40436/… . Estoy seguro de que puedo usar esto en combinación con lo que me ha enseñado para averiguar cómo hacer clic en el botón "X" para el espacio en el que estoy actualmente. Agregaré a esta respuesta cuando descubra cómo Haz eso. Necesitaré usar la descripción en lugar del número de grupo para lograr esto. No puedo averiguar cómo obtener nombres propios todavía.
Esto probablemente debería moverse al chat... pero estoy tratando de usar lo que he aprendido para atravesar el árbol de elementos de la interfaz de usuario y no tengo éxito. Syntax error: Can’t get "exit to Desktop 3" of UI element 1 of UI element "Spaces Bar" of UI element 1 of group 1. Access not allowed.... Estoy bastante seguro de que estoy en el lugar correcto. Estoy un nivel más profundo en el Accessibility Inspector, y he probado un montón de cosas diferentes. Es muy posible que aún no haya probado lo correcto, también es posible que la declaración "Acceso no permitido" signifique lo que dice. Seguiré intentándolo antes de pedir más ayuda.
Esto es solo una cuestión estética, pero puede evitar "hacer script de shell" con el más nativo de AppleScript tell application "Mission Control" to launch. Creo que esto también le permite eliminar la delayconfiabilidad ya que su secuencia de comandos no recuperará el control hasta que se haya respondido al evento, mientras que la secuencia de comandos de Shell regresa de inmediato.