web-dev-qa-db-ja.com

プログラムを終了すると、「man」はどのように画面を復元しますか?

catlsのようなプログラムのmanページを開くと、manページの内容が出力され(適切なWordではない可能性があります)、qを押すと表示されます。 、manコマンドを呼び出す前と同じように画面が表示されます。復元はどのように行われますか?何がすべてを消去してから、シェルの以前の内容を印刷しますか?

例:

[VAR121@Tesla Testing]$  man ls

出力:

LS(1)                                                        User Commands                                                        LS(1)

NAME
       ls - list directory contents

SYNOPSIS
       ls [OPTION]... [FILE]...

 ............

qを押すと、画面は、以下に示すプロンプトなど、シェルのデフォルトの外観に戻ります。

[VAR121@Tesla Testing]$  man ls
[VAR121@Tesla Testing]$

画面はどのように復元されますか?

19
VAR121

画面の「クリア」と「復元」は、実際には使用しているターミナルエミュレータの機能です(xtermgnome-terminalkonsolescreen)。

デフォルトでは、manが使用するポケットベルはlessです。

man 1 manから

   -P  pager
          Specify  which pager to use.  This option overrides the 
          MANPAGER environment variable, which in turn overrides 
          the PAGER variable.  By default, man  uses /usr/bin/less -is.

lessが呼び出されると、ターミナルエミュレータによってaltscreenが起動され、マニュアルページの内容が表示されます。 lessが終了すると、altscreenが破棄され、端末はバッファに保存されたものを表示します。

答えがあります ここ これについてさらに説明し、lessのようなプログラムがaltscreenを起動して、終了時に画面をクリアしないようにする方法について説明します。簡単に言うと、lessが呼び出し時にaltscreenを起動しないように環境変数を定義できます。 bashを使用している場合は、これを〜/ .bashrcに配置します。

export MANPAGER="/usr/bin/less -r -X -is"

20
George M