Как я могу программно переместить одно окно Terminal.app в другое пространство?

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

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

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

14
задан Cœur 2 November 2018 в 12:13
поделиться

2 ответа

Использование частных вызовов в 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 действуют стандартные предупреждения: они могут быть взломаны.

8
ответ дан 1 December 2019 в 15:21
поделиться

На основании ответа cobbal, код перенесен на 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);
1
ответ дан 1 December 2019 в 15:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: