¿Cuáles son las variables necesarias para acceder a las propiedades de enfoque en la vista de pantalla dividida?

¿Cuáles son los nombres de las variables (en términos de variables de Applescript o de otro tipo) que rastrean la aplicación enfocada actualmente, el diseño de las aplicaciones en los espacios, el espacio enfocada actualmente y si dos aplicaciones comparten un espacio en una vista dividida en lugar de 2 aplicaciones? apareciendo en un escritorio?

¿Cómo uno (dada una variable que identifica una aplicación) asigna el foco a una ventana particular de esa aplicación si esa ventana reside en una vista de pantalla dividida?

Para concretar el motivo de hacer esta pregunta: ¿el objetivo es escribir un Applescript (u otro tipo de script) que asigne un atajo de teclado que permita cambiar rápidamente el enfoque entre dos aplicaciones que comparten una vista de pantalla dividida?

El algoritmo más simple en el que puedo pensar para lograr esto (ya que parece no ser una configuración integrada) es

  1. obtener una lista de espacios actuales (incluidos escritorios, aplicaciones de pantalla completa y aplicaciones de pantalla dividida)
  2. obtener el espacio enfocado actualmente
  3. si el espacio enfocado actualmente está asignado a aplicaciones de pantalla dividida, obtenga una lista de esas aplicaciones y ventanas de aplicaciones (cada una debe tener una longitud de 2).
  4. obtener la aplicación enfocada actualmente
  5. asigne el foco al siguiente elemento en la lista de ventanas de la aplicación en la vista de pantalla dividida enfocada actualmente (que debería ser la otra ventana de la aplicación en la pantalla dividida enfocada actualmente)

No estoy seguro de si esto funcionaría tan bien para resolver el problema señalado en Cambiar el enfoque en vista dividida con respecto a dos ventanas de la misma aplicación, pero al menos esto sería un comienzo.

Respuestas (1)

He estado buscando esta respuesta durante años, y me he vuelto muy bueno rastreando la funcionalidad oculta... Desafortunadamente, fue en vano. Apple no tiene ningún mecanismo para hacer nada con espacios programáticamente. La única facilidad que encontré es ejecutar el defaultscomando y (bajo uno de los valores predeterminados cuyo nombre no recuerdo en este momento) hay un área que le dará números de ventana crípticos y los espacios a los que pertenecen. El problema es que la lista no se actualiza en vivo, por lo que no es tan útil. Todavía estoy buscando, pero estoy bastante seguro de que no hay una forma aprobada por Apple de interactuar con espacios, pantalla dividida o cualquiera de sus otras manifestaciones.

EDITAR: Oh, sí, es "com.apple.spaces". Ejecute el comando defaults read com.apple.spacesen la terminal para llegar a lo que estaba hablando.

EDIT2: Además, hay una forma de activar espacios con un poco de código C:

CoreDockSendNotification(CFSTR("com.apple.expose.awake"));
CoreDockSendNotification(CFSTR("com.apple.expose.front.awake"));
CoreDockSendNotification(CFSTR("com.apple.showdesktop.awake"));

Cada una de estas líneas hará que el control de la misión haga cosas, no es que sea tan útil. Hay otras formas de hacer esto...

defaults read com.apple.spacesfunciona como una llamada de línea de comando (así que edité la respuesta para reflejar eso en caso de que alguien más no sepa intentarlo). Brinda información y hace un buen trabajo al diseñar las vistas divididas actuales, incluida la información de la aplicación (que podría ser suficiente para escribir algo para KM). Pero sí, no sé acerca de la información en vivo. ¿Podría decir un poco más sobre parte de la infraestructura (archivos de encabezado, etc.) que necesitaría para hacer algo con ese código C? ¿O al menos un enlace a algo de documentos de soporte de Apple o un ejemplo de código que hace algo similar?
Desafortunadamente, CoreDockSendNotification no está documentado. El código C funciona con la importación predeterminada de Foundation, aunque muestra una advertencia, probablemente porque la función no se expone públicamente. Si quisiera rastrear los encabezados que faltan (lo que podría hacer si tuviera tiempo, pero...), podría eliminar la advertencia, pero no hay una razón real para hacerlo.