我已经看到这个线程介绍了如何从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