web-dev-qa-db-ja.com

LESS_TERMCAP_ *変数に関するドキュメント?

これらの変数の束を設定すると、これらの マンページのきれいな色 が少なく表示されます。それらはどういう意味ですか、ドキュメントはどこにありますか?これはlessまたはtermcapによって解釈されますか?

スクリーンショット

ss of man page

41
anselm

Termcap は、Lessが端末へのアクセスに使用するライブラリです。 Termcapはほとんど廃止され、 Terminfo に置き換えられましたが、TerminfoはアプリケーションにTermcap互換インターフェースを提供します。 Termcapインターフェースのコンテンツは少なく、それを使用しています。

Termcapライブラリは、端末の機能の説明です。各施設は、2文字(または、より一般的には2文字)のコードで識別されます。たとえば、hcはハードコピー端末(画面ではなくプリンター)を識別します。 coは列の数です。 mdは太字のテキストの表示を開始します。各機能には、ブール値(hcと同様)、整数(coと同様)、または文字列(mdと同様)の値があります。文字列の多くはエスケープシーケンスであり、アプリケーションが特定の効果を達成するために端末に送信できます。

なぜシーケンスをエスケープするのですか?端末とアプリケーションの間のインターフェースは文字ストリームであるため(正確には、各方向に1つの文字ストリーム:1つはユーザー入力用、もう1つは出力から表示用)。アプリケーションが端末に文字を書き込むと、通常それが表示されます。いくつかの文字の動作は異なります。これらは制御文字であり、カーソルの移動、表示属性の切り替えなどを行います。制御文字よりも多くのコマンドがあるため、ほとんどのコマンドはエスケープシーケンスでアクセスされます。特殊文字(多くの場合、エスケープ文字、つまり名前)。

たとえば、Lessが太字のテキストを表示したい場合、md機能の値を検索します。これはLesserが端末に書き込む文字列です。端末はこの文字列をエスケープシーケンスとして認識し、後続の文字が太字で表示されるように内部状態を調整します。

ハードウェア端末の初期の頃は、ブランドごとにエスケープシーケンスと機能が異なりました。アプリケーションがすべての端末モデルについて知る必要がないように、Termcapデータベースとインターフェースが発明されました。現在、ほとんどの端末エミュレーターは非常に似た機能を備えていますが、TermcapまたはTerminfoデータベースは、小さな違いに対処するのに役立ちます。

LESS_TERMCAP_*変数は、環境または .lesskeyファイル 。ターミナル機能の代替値を提供します。 Lessが端末機能を使用したい場合、たとえば太字に切り替えた場合、最初にLESS_TERMCAP_md変数。この変数が存在する場合、Lessはその値をエスケープシーケンスとして使用して太字に切り替えます。そうでない場合は、Termcapデータベースの値を使用します。このメカニズムにより、ユーザーはLessのTermcapデータベース設定を上書きできます。

最も役立つLESS_TERMCAP_*設定はエスケープシーケンスです。属性をさまざまな属性にマップできます。 tput コマンドを使用して、システムの Termcap または Terminfo で現在の端末の機能の値を検索できますデータベース。端末に依存しなくてもよい場合は、エスケープシーケンスを直接使用できます。たとえば、次の設定は、太字で表示するように指示されたときにLessに太字の赤で表示するように指示します。

LESS_TERMCAP_md=$(tput md; tput AF 1)

または、tputコマンドがTermcap名をサポートしていない場合:

LESS_TERMCAP_md=$(tput bold; tput setaf 1)

男は、太字と斜体のみを表現できる非常に単純なフォーマットで少ないテキストを送信します。さらに、Lessは、検索結果を強調表示したり、モードラインを下部に表示したりするなど、内部で使用するさまざまなフォーマット機能を使用しています。以下は、Lessが使用するエスケープシーケンスの一部です(リマップするのに合理的に役立つ機能のみを記載しています)。

termcap terminfo  
ks      smkx      make the keypad send commands
ke      rmkx      make the keypad send digits
vb      flash     emit visual bell
mb      blink     start blink
md      bold      start bold
me      sgr0      turn off bold, blink and underline
so      smso      start standout (reverse video)
se      rmso      stop standout
us      smul      start underline
ue      rmul      stop underline

出力をカラーで表示するには、setaf機能(または、TermcapでAF)を使用します。

LESS_TERMCAP_*設定はLESSのドキュメントには記載されていません。私が提供できる最良のリファレンスは ここに私の答え です。

Gillesの回答 は素晴らしいですが、これは私を興味深くしました:

Termcapはほとんど廃止され、Terminfoに置き換えられました

  1. Termcapが廃止された場合、Terminfoに切り替えたい

  2. バグを見つけたので、Termcapからも切り替えたいと思います。 ~/.profileなどにtermcap変数を配置するとします。

    export LESS_TERMCAP_so=$(printf '\33[5;30;43m')
    export LESS_TERMCAP_se=$(printf '\33[m')
    

    その後、setと入力すると、Termcap変数がカラー出力を混乱させます。

Terminfoに切り替えるには、ファイルxterm-pretty.tiを作成します。

xterm-pretty|xterm with pretty colors,
# exit standout mode
  rmso=\e[m,
# begin standout mode
  smso=\e[5;30;43m,
# similar terminal
  use=xterm,

ファイルをコンパイルしてインストールします。

tic xterm-pretty.ti

~/.profileまたは同様のものに行を追加します。

TERM=xterm-pretty
3
Steven Penny