我已經看到這個線程介紹瞭如何從Cocoa應用程序內執行終端命令。但我想實際啓動Terminal.app到指定的目錄。從Cocoa應用程序打開指定文件夾的終端窗口
我知道下面不工作:
[[NSWorkspace sharedWorkspace] openFile:folderPath withApplication:@"Terminal"];
終端試圖實際打開該文件夾的文件。
這是我必須使用AppleScript的?
任何想法?
我已經看到這個線程介紹瞭如何從Cocoa應用程序內執行終端命令。但我想實際啓動Terminal.app到指定的目錄。從Cocoa應用程序打開指定文件夾的終端窗口
我知道下面不工作:
[[NSWorkspace sharedWorkspace] openFile:folderPath withApplication:@"Terminal"];
終端試圖實際打開該文件夾的文件。
這是我必須使用AppleScript的?
任何想法?
你可以使用AppleScript的可可這樣的:
NSString *s = [NSString stringWithFormat:
@"tell application \"Terminal\" to do script \"cd %@\"", folderPath];
NSAppleScript *as = [[NSAppleScript alloc] initWithSource: s];
[as executeAndReturnError:nil];
AppleScript腳本從cobbal拍攝。謝了哥們!
不知道是否有一種方法可以做到這一點純可可粉,但在AppleScript的它相當瑣碎
tell application "Terminal" to do script "cd ~/Desktop"
謝謝,你和woofy解決了它! – 2009-09-18 22:22:49
我真的不知道的AppleScript,但我敢打賭,你可以用它來做這個。
如果終端目錄每次都是相同的,您可以創建一個可執行的.sh文件,其中包含一個cd
命令,並將其作爲openFile參數。
現有的答案建議使用cd
命令是很好的。此外,我建議您查看應用程序cdto的源代碼,以獲取一個很好的示例。 Cdto是一個快速的迷你應用程序,它打開一個Terminal.app窗口,並將其放在最前面的finder窗口中。這個應用程序的設計(包括它的圖標)放置在取景器窗口的工具欄中。
可以使用(現在已廢棄)的AppleEvent碳API發送一個 「做腳本」 事件Terminal.app:
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:]
啓動Terminal.app。 如果需要,它可以放在前臺與- [NSApplication activateWithOptions:]
正如評論建議,這可以很容易地移植到更現代的Scripting Bridge API。
完美,謝謝! – 2009-09-18 22:17:27
儘管這種用法可能有些過分,但Scripting Bridge(http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ScriptingBridgeConcepts/Introduction/Introduction.html)是通過通過外部應用程序進行通信的一個很好的解決方案Objective-C應用程序中的AppleScript。 – 2009-09-19 02:28:09
雖然 – cobbal 2009-09-19 04:40:03