2009-09-18 13 views
8

से किसी निर्दिष्ट फ़ोल्डर में एक टर्मिनल विंडो खोलें मैंने इस थ्रेड को कोको ऐप के भीतर टर्मिनल कमांड को निष्पादित करने के तरीके पर देखा है। लेकिन मैं वास्तव में एक निर्दिष्ट निर्देशिका में टर्मिनल.एप लॉन्च करना चाहता हूं।कोको ऐप

मुझे पता है कि निम्नलिखित काम नहीं करता:

[[NSWorkspace sharedWorkspace] openFile:folderPath withApplication:@"Terminal"]; 

टर्मिनल वास्तव में एक फ़ाइल के रूप में फ़ोल्डर खोलने के लिए कोशिश करता है।

क्या ऐसा कुछ है जिसके लिए मुझे ऐप्पलस्क्रिप्ट का उपयोग करना है?

कोई विचार?

उत्तर

14

आप इस तरह कोको से AppleScript इस्तेमाल कर सकते हैं:

NSString *s = [NSString stringWithFormat: 
    @"tell application \"Terminal\" to do script \"cd %@\"", folderPath]; 

NSAppleScript *as = [[NSAppleScript alloc] initWithSource: s]; 
[as executeAndReturnError:nil]; 

AppleScript स्क्रिप्ट cobbal से लिया गया है। धन्यवाद दोस्त!

+0

सही, धन्यवाद! –

+1

हालांकि शायद इस उपयोग के लिए ओवरकिल, स्क्रिप्टिंग ब्रिज (http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ScriptingBridgeConcepts/Introduction/Introduction.html) बाहरी ऐप्स के साथ संचार करने के लिए एक अच्छा समाधान है उद्देश्य-सी ऐप्स के भीतर से ऐप्पलस्क्रिप्ट। –

+0

उन में उद्धरण चिह्न या रिक्त स्थान के साथ फ़ोल्डर से सावधान रहें, हालांकि – cobbal

2

सुनिश्चित नहीं हैं कि वहाँ सादे कोको में यह करने के लिए एक तरह से है, लेकिन applescript में यह काफी तुच्छ

tell application "Terminal" to do script "cd ~/Desktop" 
+0

धन्यवाद, आप और woofy इसे हल किया! –

0

मैं वास्तव में AppleScript पता नहीं है, लेकिन मुझे यकीन है कि आप इस के लिए इसका इस्तेमाल कर सकते हैं।

यदि टर्मिनल निर्देशिका हर बार एक जैसी होती है, तो आप इसे cd कमांड के साथ निष्पादन योग्य .sh फ़ाइल बना सकते हैं और इसे openFile तर्क बना सकते हैं।

0

cd कमांड का उपयोग करने का सुझाव देने वाले मौजूदा उत्तर बहुत अच्छे हैं। इसके अतिरिक्त, मैं एक महान उदाहरण के लिए ऐप cdto पर स्रोत की जांच करने की अनुशंसा करता हूं। सीडीटीओ एक तेज़ मिनी एप्लिकेशन है जो टर्मिनल.एप विंडो सीडीडी को सबसे अधिक खोजक विंडो में खुलता है। यह ऐप खोजक विंडो के टूलबार में डालने के लिए डिज़ाइन किया गया है (इसके आइकन सहित)।

0

आप Terminal.app पर एक "क्या स्क्रिप्ट" घटना भेजने के लिए (अब अप्रचलित) AppleEvent कार्बन एपीआई का उपयोग कर सकते हैं:

OSStatus doTerminalScript (NSString* script) { 
    AppleEvent evt; 
    OSStatus err; 
     // Build event 
    err = AEBuildAppleEvent(kAECoreSuite, kAEDoScript, 
          typeApplicationBundleID, "com.apple.terminal", 18L, 
          kAutoGenerateReturnID, kAnyTransactionID, &evt, NULL, 
          "'----':utf8(@)", strlen([script UTF8String]), [script UTF8String]); 
    if (err) return err; 
    AppleEvent res; 
     // Send event 
    err = AESendMessage(&evt, &res, kAEWaitReply, kAEDefaultTimeout); 
    AEDisposeDesc(&evt); 
    if (err) return err; 
     // Check for any errors from Terminal.app 
    AEDesc desc; 
    err = AEGetParamDesc(&res, keyErrorNumber, typeSInt32, &desc); 
    AEDisposeDesc(&res); 
    if (!err) { 
     AEGetDescData(&desc, &err, sizeof(err)); 
     AEDisposeDesc(&desc); 
    } else if (err == errAEDescNotFound) 
     err = noErr; 
    return err; 
} 

लिया प्रपत्र here। ध्यान दें कि टर्मिनल.एप को -[NSWorkspace launchApplication:] के साथ लॉन्च नहीं किया जाना चाहिए यदि नहीं चल रहा है। तो चाहता था, यह - [NSApplication activateWithOptions:]

एक टिप्पणी द्वारा सुझाव दिया गया है साथ अग्रभूमि में रखा जा सकता है, यह आसानी से और अधिक आधुनिक Scripting Bridge API वापस पोर्ट जा सकता है।