una teclado sierra pegar para pantalla multiples mission mac escritorios escritorio cortar control conectar como comandos cambiar ampliar macos applescript spaces mission-control

macos - teclado - mission control mac



OSScript de Apple de OSX: ¿Cómo obtener el número de espacio actual del control de la misión? (7)

... también he estado trabajando en esto :)

Usted dice que "necesita detectar el número de espacio actual". Esto no es estrictamente cierto: para avanzar una fila, solo mueves 3 espacios a la derecha, así que en principio podrías vincular algo así como

tell application "System Events" to tell process "WindowServer" key code {124, 124, 124} using control down end tell

a Alt-down (con FastScripts , Alfred u otro método rápido que evita la sobrecarga de Automator). Este enfoque fracasará si alguna vez golpeas hacia abajo en la fila inferior, por supuesto, pero si estás realmente conectado, nunca lo haces :)
Tiene que "Habilitar el acceso para dispositivos de asistencia" en el panel de preferencias de Acceso universal para que funcione el enfoque del key code .

Advertencia : Esto no funciona. Cuando abro el script de arriba, salto tres espacios. El problema es que después mi teclado no responde: parece que solo el administrador de ventanas está recibiendo eventos: puedo cerrar ventanas y cambiar de espacio, pero no puedo interactuar con ninguna aplicación.
Mi teoría es que esto sucede cuando el salto hace que la aplicación actual cambie durante la ejecución del script, pero no tengo idea de cómo solucionarlo.

Una observación relacionada: El Mission Control (es decir, /Applications/Mission Control.app/Contents/MacOS/Mission/ Control ) parece reaccionar a algunos argumentos de la línea de comando:

  • Mission/ Control : muestre el control de la misión
  • Mission/ Control 1 : mostrar escritorio
  • Mission/ Control 2 : muestra las ventanas de la aplicación actual

Traté de poner algunos de los UUID de los defaults read com.apple.spaces por defaults read com.apple.spaces , pero eso no hizo mucho. Tanto para buscar a tientas en la oscuridad.

Estoy tratando de descubrir cómo obtener el # de espacio actual del control de la misión. La fuente sería útil, pero más útil sería información sobre cómo resolver esto yo mismo. He escrito algunos manuscritos, pero la mayoría de las veces parece que cada vez que necesito hacer algo nuevo (que no puedo encontrar en la documentación del diccionario) cae dentro de la categoría de "decirle a esta aplicación específica (por ejemplo," Sistema Eventos ") esta cosa muy específica" y no tengo ni idea de cómo lo descubriría.

Específicamente lo que estoy tratando de hacer:

Odio el nuevo control de misión en OSX 10.7. Quiero recuperar mis espacios "grid" ya que los usé todo el tiempo. Solía ​​navegar entre espacios usando las teclas de flecha (por ejemplo, ALT + ) cada pocos segundos. Ahora estoy atascado con esta compleja serie de espacios de 1x9 en lugar de una elegante cuadrícula de 3x3. He reasignado todos mis espacios para usar el teclado numérico, que parcialmente soluciona el problema (ya que es una cuadrícula de 3x3), pero solo cuando tengo un teclado externo conectado.

Básicamente, quiero poder usar ALT + y ↓ de nuevo, pero para hacerlo necesito detectar el espacio actual # para poder cambiar desde el espacio 5 -> 2, por ejemplo.

La respuesta de Dave a continuación, aunque mucho más detallada de lo que esperaba, requiere escribir una aplicación para hacer esto (y aún así no responde completamente la pregunta). Si es posible, preferiría unir unas pocas teclas a un AppleScript.


Escribí una aplicación. ¿Funciona para ti?

Cambiar Space.app

Las claves para hacerlo funcionar son el control de desplazamiento y las teclas de flecha, aunque esto puede ser reparable si estás atascado en ALT.

Asegúrese de tener 9 espacios (escritorios) configurados antes de comenzar, y deberá cambiar las asignaciones predeterminadas de las teclas ctrl-up y ctrl-down en Preferencias del sistema a otra cosa (en Teclado -> Métodos abreviados de teclado -> Control de la misión : Mission Control y Show Desktop).

En la primera ejecución, se desplazará por sus escritorios para enumerarlos cuando cambie el espacio por primera vez.

Entonces debería poder cambiar entre escritorios como en una grilla de 3x3.

Puede haber algunas arrugas, pero es básicamente funcional, al menos para mí.


Estoy en Mountain Lion y esto parece funcionar para mí.

defaults read com.apple.spaces

Busque "Espacio actual". Notará que ejecutar este comando con diferentes espacios activos no cambia el espacio actual PERO si marca y desmarca la casilla de verificación en "Preferencias del Sistema" y la ejecuta de nuevo, la verá actualizada.

¡Espero que esto ayude a alguien más!

EDITAR: Es feo, pero estoy usando esto:

killall Dock && sleep 0.2 && defaults read com.apple.spaces | grep -A1 "Current Space" | tail -1 | awk ''{print $NF }'' | cut -f1 -d'';''


Estoy intentando resolver esto yo mismo. Todavía no está allí, pero en la dirección correcta:

  • Cada "espacio" de Control de Misión recibe un uuid asignado a él ...
  • ... a excepción de la primera (AFAIK) y la del Tablero.

Puedes leerlos aquí:

$ defaults read com.apple.spaces $ defaults read com.apple.desktop

Ubicaciones de archivos:

~/Library/Preferences/com.apple.spaces.plist ~/Library/Preferences/com.apple.desktop.plist

Aquí está el mío. Tengo cuatro espacios habilitados y aparecen tres entradas:

$ defaults read com.apple.spaces { spaces = ( { type = 0; uuid = "9F552977-3DB0-43E5-8753-E45AC4C61973"; }, { type = 0; uuid = "44C8072A-7DC9-4E83-94DD-BDEAF333C924"; }, { type = 0; uuid = "6FADBDFE-4CE8-4FC9-B535-40D7CC3C4C58"; } ); }

Si elimina un espacio, esa entrada se eliminará del archivo. Si agrega un espacio, se agregará una entrada. Nuevamente, nunca hay una entrada para Desktop 1 o Dashboard.

No estoy seguro de si hay una API pública para averiguar qué espacio se muestra en una pantalla. uuid que no uuid significa Display 1, y los demás significan Display 1 + n.

Eché un vistazo rápido a través de la Biblioteca del editor de AppleScript (Ventana ---> Biblioteca) y no vi ninguna entrada en Eventos del sistema para spaces . Esto es probablemente algo que se puede hacer con Cocoa, quizás a través de una API privada, pero no estoy seguro acerca de AppleScript.

ACTUALIZACIÓN - 23 de julio de 2011

Parece que Dock controla el Control de Misión. Puede tomar sus archivos de encabezado así:

  1. Vaya a: /System/Library/CoreServices/Dock
  2. Haga clic derecho y muestre el contenido del paquete
  3. Navega: /Contents/MacOS/
  4. Copie y pegue el binario Dock en su escritorio.
  5. Ejecutar: $class-dump ~/Desktop/Dock

Eso escupirá todos sus archivos de encabezado (es largo, casi 7.500 líneas). Puedes ver las cadenas de spaceUUID aparecen allí. Hay una clase llamada WVSpace que parece representar un espacio único en Mission Control y muchas otras clases WV *.

Lo seguiré viendo mañana; muy cansado ahora :)

ACTUALIZACIÓN - 24 de julio de 2011

Dentro de Dock hay una clase llamada WVSpaces . Tiene una serie de atributos que incluyen:

WVSpace *currentSpace; unsigned int currentWorkspace; WVSpace *nextSpace; // Space on the right??? WVSpace *previousSpace; // Space on the left??? BOOL currentSpaceIsDashboard; BOOL dashboardIsCurrent; ...lots more...

Cada clase WVSpace tiene un NSString *_uuid; atributo, que es probable su SpaceUUID. Entonces teóricamente puedes obtener el número de espacio actual de esta forma:

WVSpace *currentSpace = [[WVSpaces sharedInstance] currentSpace]; NSString *currentSpaceUUID = [currentSpace _uuid]; // Empty string if main space???

El truco es, ¿cómo acceder a la clase privada de WVSpaces enterrada dentro de Dock? Supongo que es Singleton ya que tiene un NSMutableArray *_spaces; atributo, probablemente con cada espacio enumerado en él. Solo se muestra un espacio a la vez (esto es cierto si está usando múltiples monitores, el espacio se extiende a través de ambos), por lo que tiene sentido tener solo una instancia de WVSpaces .

Por lo tanto, parece que se requerirá alguna piratería SIMBL de Dock para obtener acceso a WVSpaces .


He estado hurgando, y se me ocurrió esto: https://gist.github.com/1129406

Los espacios tienen una identificación no secuencial y un índice secuencial (basado en 0). Puede obtener la identificación de dos maneras:

  • de las API públicas (ver get_space_id )
  • desde la CGS API CGSGetWorkspace privada

Puede establecer el espacio actual por índice usando API públicas (aunque las notificaciones en sí mismas no están documentadas públicamente): vea set_space_by_index

Puede configurar el espacio actual por ID usando la CGS API CGSSetWorkspace .

No puede obtener el índice de espacio actual directamente. Sin embargo, si siempre usa el mismo conjunto de nueve espacios, puede set_space_by_index una vez usando set_space_by_index , recopilar sus ID y crear una asignación. Luego podrá obtener el índice actual de la ID.


http://switchstep.com/ReSpaceApp

Esto funciona, es gratis (en este momento) y es increíble.

Solo asegúrese de crear manualmente tantos espacios como su diseño (en preferencias) esté esperando.


on openNewSpace() tell application "System Events" —start mission control do shell script "/Applications/Mission// Control.app/Contents/MacOS/Mission// Control" tell process "Dock" set countSpaces to count buttons of list 1 of group 1 --new space click button 1 of group 1 --switch to new space repeat until (count buttons of list 1 of group 1) = (countSpaces + 1) end repeat click button (countSpaces + 1) of list 1 of group 1 end tell end tell end openNewSpace