15

如果我打开了多个 OS-X Terminal.app 窗口,如何将一个终端窗口移动到另一个空间?

我很乐意使用任何脚本或编程语言来实现这一点,但更喜欢 AppleScript 或对标准框架的调用。

(注意这是只移动应用程序的一个窗口而不是所有窗口。)

4

2 回答 2

9

在 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:它们可能会被破坏。

于 2010-03-03T05:18:33.717 回答
1

根据 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);
于 2010-03-12T11:24:04.580 回答