如何在Objective-C中清除控制台

时间:2012-04-10 03:05:29

标签: objective-c macos cocoa console console-application

我正在Objective-C中创建一个基于控制台的应用程序,它依赖于能够定期清除控制台。如何才能做到这一点?我在SO和Google上看到的只是让开发人员用X-Code清除控制台的方法,但

我在Yahoo!上找到的一个解决方案Answers告诉我要执行以下操作,但由于无法找到文件而无法运行:

NSTask *task;
task = [[NSTask alloc]init];
[task setLaunchPath: @"/bin/bash"];

NSArray *arguments;
arguments = [NSArray arrayWithObjects: @"clear", nil];
[task setArguments: arguments];

[task launch];
[task waitUntilExit];

4 个答案:

答案 0 :(得分:6)

尝试使用:

system( "clear" );

重要标题:

#include <stdlib.h>

提示: Objective-C仍然是C,对吧?


更新:


如果未设置“TERM环境变量。”错误:

1)直接从你的终端运行程序(或者在Xcode中测试它时忽略错误;无论如何它应该在正常的终端运行,是吗?)

2)在Scheme的设置中设置TERM变量。 要什么?只需在您的终端中运行它,看看应该是什么“TERM”:

DrKameleons-MacBook-Pro:Documents drkameleon$ echo $TERM
xterm-256color

enter image description here

答案 1 :(得分:4)

在不产生子进程的情况下执行此操作的方法是使用ncurses。

#include <curses.h>
#include <term.h>
#include <unistd.h>

int main(void)
{
    setupterm(NULL, STDOUT_FILENO, NULL);
    tputs(clear_screen, lines ? lines : 1, putchar);
}

使用-lncurses进行编译。

setupterm()来电只需要完成一次。之后,使用tputs()调用清除屏幕。

答案 2 :(得分:3)

为什么/bin/bash

只是做:

NSTask *task = [NSTask launchedTaskWithLaunchPath:@"/usr/bin/clear" arguments:[NSArray array]];

或者,使用C方式:

#include <stdlib.h>

...
system("/usr/bin/clear");
...

答案 3 :(得分:1)

您可以使用Apple脚本

tell application "Console"
    activate
    tell application "System Events"
        keystroke "k" using command down
    end tell
end tell  

使用NSAppleScript类从obj-C程序执行applescript。

NSAppleScript *lClearDisplay = [[NSAppleScript alloc] initWithSource:@"tell application \"Console\"\n \
                                activate\n \
                                tell application \"System Events\"\n \
                                keystroke \"k\" using command down\n \
                                end tell\n \
                                    end tell "];
NSDictionary *errorInfo;
[lClearDisplay executeAndReturnError:&errorInfo];

注意:
如果Apple更改或删除⌘k作为清除显示的关键命令,则会破坏脚本。