これらの変数の束を設定すると、これらの マンページのきれいな色 が少なく表示されます。それらはどういう意味ですか、ドキュメントはどこにありますか?これはlessまたはtermcapによって解釈されますか?
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に置き換えられました
Termcapが廃止された場合、Terminfoに切り替えたい
バグを見つけたので、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