less -F
コンテンツが1画面に収まると、閉じる回数が減ります。しかし、termcap初期化を使用すると、つまり、いいえ使用すると、-X
ファイルが画面に収まり、内容が少なく表示され、画面に合っていることを確認し、初期化解除中に画面を終了して消去するため、何も印刷されません。
これは次のように証明できます(空のLESS
変数を想定)。
$ echo foo > new_file
$ cat new_file
foo
$ less -X -F new_file
foo
$ less -F new_file
$
マウスホイールでスクロールできるtermcap機能やその他の機能が気に入って絶対に使いたくありません-X
。コンテンツが画面に収まると(そして基本的にそのように動作する場合cat
)、シャットダウンを減らす方法もありますか? ?
ベストアンサー1
関連する抜粋は次のとおりです。less
'よくある質問:
画面を変更せずに終了できますか?
less が開始されると "ti" termcap 文字列を端末に送信し、終了すると "te" 文字列を送信します。 "te"文字列の機能は、システム、端末の種類、およびtermcapのバージョンによって異なります。一部のシステムでは何も行いません。他の場合は、lessが開始されたときの状態に画面を復元し、lessが見ていたファイルの最後のページを画面から削除します。
システムで "te" の振る舞いが気に入らない場合は、-X オプションで less を呼び出して "ti" と "te" の文字列転送を無効にできます。残念ながら、 "ti" / "te"文字列は他の目的を果たす可能性があるため、これは時々他の副作用を引き起こします。たとえば、一部の端末では、「ti」と「te」を無効にすると、矢印キーの動作が停止します。
「te」に他の操作を実行させるには(たとえば、画面をまだ実行していない場合は復元する)、システム端末のtermcapまたはterminfoを変更する方法を理解する必要があります。残念ながら、これはシステムごとに異なるため、システムのマニュアルを確認する必要があります。
研究の結果、「ti」と「te」のtermcap関数は、terminfoで「smcup」と「rmcup」と命名され、これはより現代的なtermcapと同じです。
$TERM
端末がどのように設定されているか(おそらく)確認できますxterm
。
infocmp -1 # which will print out capabilites one per line
次の助けを借りて、シーケンスの意味を解読できます。VT100制御文字リファレンス。
端末から「smcup」および「rmcup」機能を削除する場合:
infocmp -1 | sed -r '/[sr]mcup.*/d' > new-terminfo-for-$TERM
次に、$ TERMの新しい基本機能仕様であることをterminfoライブラリに通知します。
tic new-terminfo-for-$TERM
# you reverse this with `rm -ri ~/.terminfo`
気づくでしょうless
」代替画面これ以上消去されません(入力されたことがないからです)。しかし、マウスはもう機能しません。。
「rmcup」制御文字シーケンスで遊んで見つけたら教えてください!
修正する:
可能な代替案は、ファイルが端末の高さに合うときにcatを実行する関数でlessをラップすることです.bashrc):
less () {
# When single file argument, and file small enough, cat it
if [ $# = 1 ] && [ -f "$1" ] && [ $(wc -l "$1" | cut -d' ' -f1) -le $((${LINES:-0} - 3)) ]; then
cat "$@"
else
command less "$@"
fi
}