/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 ビットのエイリアスの使用を強制します。