2010-02-22 19 views
13

Si tengo varias ventanas de Terminal.app OS-X abiertas, ¿cómo puedo mover una ventana de Terminal a otro espacio?¿Cómo puedo mover programáticamente una ventana Terminal.app a otro espacio?

Me complace utilizar cualquier script o lenguaje de programación para lograr esto, pero preferiría AppleScript o las llamadas a los marcos estándar.

(Nota esto es mover sólo una ventana de una aplicación not all windows.)

+0

hola, lograste que ???? También estoy tratando de hacer esto – flow

+0

, lamentablemente, no, actualizaré esta pregunta si alguna vez encuentro una manera. –

Respuesta

7

El uso de las llamadas privadas en Objective-C/C, extraoficialmente enumeran here

#import <Foundation/Foundation.h> 

typedef int CGSConnection; 
typedef int CGSWindow; 

extern OSStatus CGSMoveWorkspaceWindowList(const CGSConnection connection, 
             CGSWindow *wids, 
             int count, 
             int toWorkspace); 
extern CGSConnection _CGSDefaultConnection(void); 


int main(int argc, char **argv) { 
    CGSConnection con = _CGSDefaultConnection(); 

    // replace 2004 with window number 
    // see link for details on obtaining this number 
    // 2004 just happened to be a window I had open to test with 
    CGSWindow wids[] = {2004}; 

    // replace 4 with number of destination space 
    CGSMoveWorkspaceWindowList(con, wids, 1, 4); 

    return 0; 
} 

advertencias estándar se aplican sobre las API indocumentados: están sujetos a la ruptura.

+0

Funciona muy bien, ¡gracias! –

+1

Nota sobre 64 bits, las int ahora son largas –

+0

¿Alguien puede dar algunas instrucciones/pasos básicos sobre cómo implementar esto realmente? –

1

Sobre la base de la respuesta de cobbal, código portado a Ruby:

require 'dl'; 

wid = 2004 

dl = DL::dlopen('/System/Library/Frameworks/ApplicationServices.framework/ApplicationServices') 

_CGSDefaultConnection = dl.sym("_CGSDefaultConnection", 'I'); 

CGSMoveWorkspaceWindowList = dl.sym("CGSMoveWorkspaceWindowList", 'IIiII'); 

con = _CGSDefaultConnection.call(); 

CGSMoveWorkspaceWindowList.call(con[0], wid, 1, 4); 
+0

En 64 bits, cambie la "I" -> "L" y "IIiII" por "LLLLL" –

+0

Intenté utilizar este script de ruby, pero aparece un mensaje de error que dl.sym solo toma un argumento. Estoy ejecutando Mac OS X 10.6.6 (64 bits). ¿Cómo debería ejecutar tu script de ruby? ¿No debería simplemente hacer un archivo que contenga el código y luego ejecutar ruby ​​* myfile *? Cualquier ayuda es muy apreciada. –

+0

Asegúrate de estar usando/usr/bin/ruby ​​- no de uno más reciente: $/usr/bin/ruby ​​-v ruby ​​1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0] –

Cuestiones relacionadas