ターミナル内のテキスト全体を変更せずにスクロールダウンするシェルスクリプト

ターミナル内のテキスト全体を変更せずにスクロールダウンするシェルスクリプト

/bin/sh スクリプトを使用して、ターミナルで数行のテキストをスクロールダウンしようとしています。この場合、smcup、rmcup を使用するソリューションは受け入れられません。

私が試した他のいくつかのオプションはすべて失敗しました(ジェイディービーピー):

  • tput cup 0 0; tput ri
  • tput cup 0 0; tput rin 3

man terminfo では次のように指定されているため、これは少し奇妙です。

テキストを下にスクロールするには、プログラムは画面の左上隅に移動し、ri (逆インデックス) 文字列を送信します。文字列 ind と ri は、画面のそれぞれの隅にない場合は未定義です。

テストを実行する前に、ターミナルの出力をスクロール可能にする必要があります (テストの前に set、env を使用してみてください)。

xterm のソリューションで十分です。

テストを高速化し、明確にするには、まずこのスクリプトを使用します。

#!/bin/sh

# create scrollable text
set

# includes correction from JdeBP
# try to scroll text down one line
tput cup 0 0; tput ri

# includes correction from JdeBP
# try to scroll text down 3 lines
tput cup 0 0; tput rin 3

答え1

tput cup 0 0, ri

これが失敗したのも不思議ではない。tputプログラムのコマンドライン構文

カップに入れる 0 0
tput ri

とてもシンプルです。

XTerm 以外で複雑な作業を行う上級ユーザー向けの注意事項:

  • 実際の端末やその高品質のエミュレータでは、デフォルト以外の上下の余白とオリジン モードがオフになっていると、動作や、スクロールするためにカーソルを配置する場所に影響します。これは、terminfo モデルが示唆するほど単純ではありません。たとえば、実際の DEC 端末の詳細については、DEC VT4xx/5xx ドキュメントを参照してください。
  • DEC の世界では、SD と SU はウィンドウ パンであり、バッファ スクロールではありません。VT525 にはマルチウィンドウ機能があり、これらの制御シーケンスは、基になるバッファの周囲でウィンドウを移動します。
  • 完全に 8 ビットクリーンではない一部の低品質の端末エミュレーターは、U+0084 と U+008D を IND と RI として正しく認識せず、7 ビットのエイリアスの使用を強制します。

関連情報