2010-02-22 7 views
13

Wenn ich mehrere OS-X Terminal.app Fenster geöffnet habe, wie kann ich ein Terminalfenster in ein anderes Feld verschieben?Wie kann ich ein Terminal.app-Fenster programmatisch in ein anderes Feld verschieben?

Ich bin gerne zu verwenden, Skript oder Programmiersprache, um dies zu erreichen, aber AppleScript oder Aufrufe von Standard-Frameworks bevorzugen würde.

(Hinweis: Dies ist nur ein Fenster einer Anwendung not all windows zu bewegen ist.)

+0

hallo, hast du es erreichen ???? Ich versuche auch, dies – flow

+0

leider zu tun, nein - ich werde diese Frage aktualisieren, wenn ich jemals einen Weg finden werde. –

Antwort

7

private Anrufe Verwendung in Objective-C/C, aufgeführt inoffiziell 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; 
} 

Standard-Warnungen über undokumentierte APIs gelten: Sie unterliegen dem Brechen.

+0

Funktioniert gut - danke! –

+1

Hinweis auf 64bit, die Int's sind jetzt lang –

+0

Kann jemand einige grundlegende Anweisungen/Schritte geben, wie man das tatsächlich implementiert? –

1

Basierend auf cobbal Antwort, Code portiert Rubin:

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

Ändern Sie auf 64 Bit das "I" -> "L" und "IIiII" zu "LLlLL" –

+0

Ich habe versucht, mit diesem Ruby-Skript, aber ich bekomme eine Fehlermeldung, dass dl.sym nur ein Argument dauert. Ich benutze Mac OS X 10.6.6 (64bit). Wie soll ich dein Ruby-Skript ausführen? Soll ich nicht einfach eine Datei mit dem Code erstellen und dann ruby ​​* myfile * ausführen? Jede Hilfe wird sehr geschätzt. –

+0

Stellen Sie sicher, dass Sie/usr/bin/ruby ​​- nicht einige neuere verwenden: $/usr/bin/ruby ​​-v Ruby 1.8.7 (2009-06-12 Patchlevel 174) [Universal-Darwin10.0] –

Verwandte Themen