8

コンソールを定期的にクリアできることに依存する Objective-C でコンソールベースのアプリケーションを作成しています。これはどのように行うことができますか?私が SO と Google で見たのは、開発者に X-Code でコンソールをクリアさせる方法だけでしたが、それはできません。

Yahoo! で見つけた 1 つの解決策 回答から次のことを行うように言われましたが、ファイルが見つからないため実行されません。

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  

obj-C プログラムから applescript を実行するには、NSAppleScript クラスを使用します。

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 に答える