web-dev-qa-db-ja.com

'less'でターミナルリセットをインタラクティブに変更できますか?

通常、lessを終了するときに端末をリセットしたくありません(つまり、画面に表示し続けたいものが表示されます)。通常、新しいボックスを使用していて、まだ構成していない場合は、lessを呼び出して終了し、画面がリセットされるのを確認し、穏やかに呪いをかけ、less -X ...で再実行します。終了するとすぐに画面がリセットされることを覚えています。その場合、イベントのシーケンスがわずかに変更され、終了する前に軽度の呪いが発生しますが、全体的な効果はほぼ同じです。

現在実行中のlessプロセスを変更して、終了時にターミナルをリセットしないようにする方法はありますか?

1
William Pursell

一部の端末(xtermなど)には、代替画面への切り替えを有効/無効にするメニュー設定があります。ほとんどはしません...

ちなみに(一部/ほとんどの同じ問題)、端末が元のxterm47コードの代替画面切り替えを実装している場合、クリアせずに別の画面に戻すことができます。これを実装しないTERM=xtermを設定するものに気づきました(後の1049コードのみを実装します)--- ymmv

smcupおよび-を見ると、通常の端末の説明で47コードがどのように使用されているかがわかります。 rmcupからの機能

infocmp xterm-old

これらのアイテムを(とりわけ)表示します:

rmcup=\E[2J\E[?47l\E8,
smcup=\E7\E[?47h,

rmcup\E[2Jは、通常の画面に戻る前に(代替)画面をクリアします。 \E7および\E8保存/カーソル位置を復元します(通常の画面の場合)。本当にwanted toの場合は、これらの機能をxterm互換の端末の説明に置き換えることができます。 、クリアスクリーン部分を省略して、

tput smcup
tput rmcup

コマンドラインから、代替画面の内容を確認します。 (コマンドラインがその一部を上書きするので)それは素晴らしいことではありませんが、それは役立つかもしれません。

Xtermには前後に切り替えるためのメニューオプションがあるため、xtermでは必要ありません。しかし、そのアプローチが役立つと思うかもしれません。

参考文献:

3
Thomas Dickey

_| . cat_を使用します。

段階的に:_|_を押し、次に_|mark:_プロンプトで_._を押し、次に_!_プロンプトでcatと入力し、次に|done (press RETURN)プロンプトをもう一度Enterキーを押します。 lessを終了すると、現在のページが画面に残ります。

出力をlessのように処理する場合(バックスペース+アンダースコアを下線に変換し、印刷できない文字を_<XX>_などとして表示)、代わりに_less -FX_を使用します。 cat

less(1)マンページから:

_  | <m> Shell-command
          <m> represents any mark letter.  Pipes a section  of  the  input
          file  to the given Shell command.  The section of the file to be
          piped is between the first line on the current  screen  and  the
          position  marked by the letter.  <m> may also be ^ or $ to indi-
          cate beginning or end of file respectively.  If <m> is . or new-
          line, the current screen is piped.
_

その後、xtermクローンごとに何度も再構成することなく、rmcup/smcupの代替画面切り替えを単純にザッピングしたい場合は、次のコマンドを使用できます。

_infocmp | sed 's/[sr]mcup=[^=]*,//g' | tic -
_

これにより、現在の端末の端末の説明が_~/.terminfo_内に書き込まれ、代替画面切り替えのコードは省略されます。ほとんどのプログラムでは、_/usr/share/terminfo_からのものよりも優先して使用する必要があります。

2
qubert