Как программно переместить одно окно Terminal.app в другое место? - PullRequest
14 голосов
/ 22 февраля 2010

Если у меня открыто несколько окон OS-X Terminal.app, как я могу переместить одно окно терминала в другое пространство?

Я рад использовать любой сценарий или язык программирования для достижения этой цели, но предпочел бы AppleScript или вызовы стандартных структур.

(Обратите внимание, что это перемещение только одного окна приложения не всех окон .)

Ответы [ 2 ]

8 голосов
/ 03 марта 2010

Использование личных звонков в Objective-C / C, неофициально перечисленных здесь

#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;
}

Стандартные предупреждения относятся к недокументированным API: они могут быть взломаны.

1 голос
/ 12 марта 2010

На основании ответа Коббала код, перенесенный на 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);
...