2

プログラムless、more、またはviは、画面をクリアせずに端末画面にスクロールセクションをどのように追加し、その後どのように消えますか?

スクリプトから実行している場合、またはスクリプトを終了する方法で、特定の時間実行する方法はありますか?

4

1 に答える 1

6

まず、これは bash や使用しているシェルとは関係ありません。lessコマンド自体が画面の更新を処理します。任意のシェルまたはその他のプログラムから実行できます。

ターミナル エミュレータはエスケープ シーケンスをサポートしています。印刷可能な文字 (文字、数字など) を書き込むと、それらの文字が表示されます。エスケープ シーケンスを記述すると、カーソルの移動、現在の行のクリア、画面のクリアなど、他にもさまざまなことが起こります。

termcaporterminfoおよびcursesorソフトウェア パッケージはncurses、これらのエスケープ シーケンスへのアクセスを提供します。lessvimemacs、通常ncursesは画面の管理に使用します。

あなたの質問に関連する 2 つのシーケンスは、termcap と terminfo によってti呼び出されます。このシーケンスにより、端末は現在の状態 (画面に表示されているすべてのものとカーソル位置) を保存し、次に空の状態で始まる 2 次表示バッファーに切り替わります。シーケンスは保存された状態を復元し、プライマリ ディスプレイ バッファに戻ります。を使用するプログラムは、デフォルトで、開始時にシーケンスを出力し、終了時に入力を出力します。これが、そのようなプログラムが終了時に端末ウィンドウを以前の状態に復元できる方法です。tesmcuprmcupsmcuprmcupncursessmcuprmcup

また、スクリプトから実行していた場合、またはスクリプトを終了する方法で、特定の時間実行する方法はありますか

それを行うための本当に良い方法はないと思います。lessインタラクティブなプログラムです。通常、ユーザーが入力したときqなどにのみ終了します。特定の時間実行することは、その目的に反するものであり、ユーザーとして、使用less中に終了されるとイライラします。

コマンドを使用することもできますが、これは/メカニズムにtimeout干渉し、表示が破損する可能性があります。あなたがやろうとしていることを達成するためのより良い方法がおそらくあります。smcuprmcup

于 2014-03-20T16:42:23.663 に答える