私が探しているものを正確に説明するのは本当に難しいので、端末をどのように動作させたいかについていくつかの出力例を作成しました。 (行の先頭にある各番号はその行の戻り値を表し、>は入力行を表します。
> 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すると、すべてが逆の順序で出力されるため、各コマンドの出力の外観は変更されず、位置だけが出力されます。
おそらく誰かがこれを行った(おそらくそうではない)。これは、コマンドの出力を収集して画面を更新する方法を知っているシェルによって実行される必要があります。それ自体では、通常の端末はこれを行いません。
各コマンドで、これを実行するプログラムがあったと仮定します
thatはすべて、単純なプログラムで実行できます。難しいのは、コマンドが自分で画面を引き継ぐかどうかです。これを行うプログラムは、標準出力と標準エラーに書き込みます—ご想像のとおり—。また、プレーンテキストは記述しません。画面内を移動するためにエスケープシーケンスを使用します。
これを端末初期化シーケンスを送信する正常に動作するアプリケーションに限定すると、シェルは(原則として)これを検出してしばらくの間あきらめ、コマンドが画面に書き込むことができるようになります。しかし、正常に動作するアプリケーションは大多数ではなく、対処すべき興味深い特殊なケースがたくさんあります。
これは興味深いアイデアですが、現在これを行っているものはないと思います。これを行うために連携しなければならない相互接続されたビットはたくさんあります。
ターミナルは数十年の増分履歴があり、常に同じ基本的な方法で動作してきたため、端末の動作方法を変更する試みはあまりありませんでした。これを大幅に変更すると、既存のアプリケーションの割り当てが破損します。
とはいえ、必要なことを実行するための単純なncursesアプリケーションを作成することはそれほど難しくありませんが、基本的なコマンドでのみ機能し、本格的な端末が失敗することを期待するもの(vim、nano、screen、topなど)はすべて失敗します。それらをサポートすることは、多大な作業になります。
ただし、最近、最新の端末アプリケーションを作成する試みがいくつかあり、画像やビデオを直接表示できるものもあります。たとえば 用語 。私が見たこれらの中で最も過激なものは ブラックスクリーン あなたが興味を持っているかもしれません。それはあなたが探しているものではなく、まだかなり初期の開発段階にあります(問題が発生する可能性があります)ただし、動作方法に同じ利点がいくつかある場合があります(コマンドを強調表示したり、コマンドの出力の開始/停止を簡単に確認したりできます)。