8

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

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

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

4 回答 4

6

尝试使用:

system( "clear" );

重要标题:

#include <stdlib.h>

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


更新 :


“未设置 TERM 环境变量”的情况下。错误 :

1)直接从您的终端运行程序(或者在 Xcode 中测试它时忽略错误;无论如何它应该在普通终端中运行,对吧?)

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

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

在此处输入图像描述

于 2012-04-10T03:09:05.260 回答
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()呼叫清除屏幕。

于 2012-04-10T03:47:08.750 回答
3

为什么/bin/bash

做就是了:

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

或者,使用 C 方式:

#include <stdlib.h>

...
system("/usr/bin/clear");
...
于 2012-04-10T03:09:22.990 回答
1

你可以使用苹果脚本

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 作为清除显示的关键命令,这将破坏脚本。

于 2012-04-10T06:08:52.980 回答