web-dev-qa-db-ja.com

ターミナルの下部に空白行を追加する方法

Vimや他の多くのテキストエディタでは、残りの行を空白として表示しながら、ファイルの最後を画面の上部までスクロールできます。ただし、ターミナルでは、デフォルトでは、行末がターミナル画面の終わりに固定されているため、現在の行は常に下部に表示されます。最後の行と画面の下部の間に空白行を追加しながら、現在の行を上にスクロールするにはどうすればよいですか?

ありがとう

3
Kohki Mametani

エスケープシーケンス\e[B\e[Aは、それぞれカーソルを上下に移動し、ビューポート内に拘束します。エスケープシーケンス\eD(「インデックス」と呼ばれる)と\eM(「逆インデックス」)も上下に移動しますが、必要に応じてビューポートもスクロールします。 (後者には[文字がないことに注意してください。)

いくつかの「インデックス」文字を印刷してから、同じ数の「カーソルアップ」(または「リバースインデックス」)を印刷することをお勧めします。例えば。:

echo -ne '\eD\eD\eD\e[A\e[A\e[A'

カーソルを3行下に移動し、必要に応じてビューポート全体をスクロールしてから、上に戻します。事実上、画面の下部に少なくとも3つの空の行があることを確認します。

$PS1(プライマリシェルプロンプト)に接続できます。\[\]で囲まれていることを確認して、これらの文字がカーソルを水平方向に進めないことをシェルが認識できるようにします。 :

PS1='\[\eD\eD\eD\e[A\e[A\e[A\]Prompt$ '

$Prompt_COMMANDから印刷することもできます。その場合、正しく覚えていれば、0x01^A)と0x02^B)バイト。

注:ショートカット\e[3Aおよび\e[3Bは、カーソルを3行上下に移動します(もちろん、3は任意の数値に置き換えることができます)。 「インデックス」および「逆インデックス」シーケンスには、そのようなショートカットはありません。

端末の高さに基づいてプログラムで希望の行数を計算するための演習として、あなたに任せます。

5
egmont