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


回答:


45

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

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

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

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

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

LESS_TERMCAP_*変数は環境またはで設定することができます.lesskeyファイル。ターミナル機能の代替値をLessに提供します。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は、検索結果を強調表示したり、モード行を下部に表示したりするなど、内部使用のためにさまざまなフォーマット機能を使用します。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機能(またはAFTermcapを使用)を使用します。

LESS_TERMCAP_*設定は、に記載されていないLESSドキュメント。私が提供できる最良の参考はここでの私の答えです


8
ありがとう。また、lessのソースコードを簡単に見て、LESS_TERMCAP_DEBUGを何かに設定してからmanを開くと、manページのソースとその中に使用されているすべての機能タグのようなものが見えることがわかりました。設定する対象を簡単に決定できます。
アンセルム14年

1
エスケープ文字の代わりにすべてのenv変数を設定する方法については、この回答を参照してください。LESS_TERMCAP_*tput
カウシャルモディ

3

ジルの答えは素晴らしいですが、これは私に興味を起こさせました:

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

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

  2. また、バグを発見したため、Termcapから切り替えたいと思います。termcap変数を自分~/.profileまたは同様のものに入れたとしましょう:

    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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.