2010-02-22 32 views
13

यदि मेरे पास कई ओएस-एक्स टर्मिनल.एप विंडोज़ खुले हैं, तो मैं एक टर्मिनल विंडो को दूसरी जगह कैसे ले जा सकता हूं?मैं प्रोग्रामिक रूप से एक टर्मिनल.एप विंडो को किसी अन्य स्थान पर कैसे स्थानांतरित कर सकता हूं?

मुझे यह प्राप्त करने के लिए किसी भी स्क्रिप्टिंग या प्रोग्रामिंग भाषा का उपयोग करने में खुशी है, लेकिन ऐप्पलस्क्रिप्ट पसंद करेंगे या मानक ढांचे को कॉल करेंगे।

(नोट: यह एक आवेदन not all windows का केवल एक ही खिड़की स्थानांतरित करने के लिए है।)

+0

हाय, तुम इसे प्राप्त किया था ???? मैं यह – flow

+0

दुख की बात करने की कोशिश भी कर रहा हूं, नहीं - अगर मैं कभी भी रास्ता खोजता हूं तो मैं इस प्रश्न को अपडेट कर दूंगा। –

उत्तर

7

ऑब्जेक्टिव-सी/सी में निजी कॉल का उपयोग करना, अनाधिकारिक सूचीबद्ध 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; 
} 

स्टैंडर्ड चेतावनी अप्रलेखित API के बारे में लागू होते हैं: वे तोड़ने के अधीन हैं।

+0

बहुत अच्छा काम करता है - धन्यवाद! –

+1

64 बिट पर नोट, int अब –

+0

हैं क्या कोई वास्तव में इसे कार्यान्वित करने के तरीके पर कुछ बुनियादी निर्देश/कदम दे सकता है? –

1

cobbal के जवाब के आधार पर, कोड रूबी के लिए पोर्ट:

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

64 बिट पर, "आई" -> "एल" और "IIiII" को "एलएलएलएलएल" –

+0

में बदलें, मैंने इस रूबी स्क्रिप्ट का उपयोग करने का प्रयास किया, लेकिन मुझे एक त्रुटि संदेश मिलता है कि dl.sym केवल एक तर्क लेता है। मैं मैक ओएस एक्स 10.6.6 (64 बिट) चला रहा हूँ। मुझे अपनी रूबी स्क्रिप्ट कैसे निष्पादित करनी चाहिए? क्या मुझे बस कोड युक्त फ़ाइल नहीं बनाना चाहिए और फिर रूबी * myfile * चलाना चाहिए? किसी भी प्रकार की मदद की बेहद सराहना की जाती है। –

+0

सुनिश्चित करें कि आप/usr/bin/ruby ​​का उपयोग कर रहे हैं - कुछ नया नहीं: $/usr/bin/ruby ​​-v रूबी 1.8.7 (200 9 -12-12 पैचलेवल 174) [सार्वभौमिक-डार्विन 10.0] –

संबंधित मुद्दे

 संबंधित मुद्दे