私が探しているものを正確に説明するのは難しいので、端末がどのように機能したいかを説明するためにいくつかのサンプル出力を作成しました。 (行の先頭の各数字はその行の戻りを表し、>は入力行を表します。
> me@computer:~$
5. me@computer:~$ cat somefile < command
start of file < output
< output
this < output
is < output
the < output
content < output
of < output
the < output
file < output
< output
end of file < output
4. me@computer:~$
3. me@computer:~$
2. me@computer:~$
1. me@computer:~$ echo this is the first line < command
this is the first line < output
この例では、実行するコマンドを入力する入力行が常に一番上にあります。つまり、各コマンドとその出力を「イベント」にプッシュします。したがって、ファイルをcatに指定すると、すべての内容が逆順に出力されるため、各コマンドの出力は外観が変わらず、位置だけが異なります。
ベストアンサー1
誰かがすでにこれを行っている可能性があります(そうではないかもしれません)。これは、コマンド出力を収集して画面を更新する方法を知っているシェルを介して行う必要があります。通常の端末はこの作業を独自に行いません。
すべてのコマンドに対してこれを実行するプログラムがあるとします。
- 入力コマンド(いくつか減らすことができます)が許可されています。簡単にするために、まず入力を1行に制限します。
- テキストをインポートした後、シェルはコマンドを実行して、コマンドの標準出力から一度に1行ずつ収集します。そして間違い。
- 新しい出力行を取得したら、既存のテキストを下に押しながらその行を画面に挿入する必要があります。より多くの出力を読み取ると、挿入点が下に移動します。 (ターミナルで提供低レベル操作は役に立つかもしれませんが、成功するにはまだ遠いです。働く)。
- 画面が受け入れることができるよりも多くの出力がある場合、ユーザーは挿入ポイントが画面の下部に達したときに出力が上にスクロールし始めるようにすることができます。
- 出力がなくなると(コマンドが停止する)、シェルはカーソルを画面上部に戻します。
みんなそれ簡単なプログラムで可能です。難しいのは、コマンドが画面自体を占有したい場合です。これを実行するプログラムは、(あなたが推測したように)標準出力と標準エラーに書き込まれます。そして彼らはプレーンテキストを書きません。画面の周りを移動するためにエスケープシーケンスを使用します。
端末初期化シーケンスを送信するうまく動作するアプリケーションに制限すると、シェルは(原則として)それを検出して一時的に放棄し、コマンドが画面に書き込まれるようにします。しかし、ほとんどのアプリケーションはうまく機能し、処理する必要がある興味深い特別なケースがたくさんあります。