terminfo

2744 ワード

termcapはその名の通りterminal capability databaseのライブラリであり、textインタフェースプログラムを作成する際に使用すると、さまざまなterminal間の違いを回避することができます.terminfoはtermcapのアップグレード版です.
 
arch linuxではterminfo関連のツールやデータベースがncursesというパッケージに付属していますが、このパッケージをインストールすると、/usr/share/terminfo/?/*があります.これらの様々なterminalのデータベース、また/usr/lib/terminfo/?/*それと完全に繰り返されるセットで、なぜか分かりません.
ユーザ自身のデータベースファイルは一般に~/.terminfoの下.
 
これらのファイルはすべてコンパイルされたデータベースですが、infocmpでterminalデータベースのソースファイルを再生成することができます.逆に、ソースファイルからデータベースにコンパイルしticツールを使用します.
 
man terminfoを開くと、variable、capname、termcap codeの3列の長いテーブルがあります.
textインタフェースのプログラム開発者として、variableを使って自分が使っているcapabilityを指定します.
terminalデータベースのソースファイルのメンテナンス者としてcapnameを使用して定義するcapabilityを指定します.
termcap codeは古いtermcapの対応するcapabilityの名前です.
 
例えば、以前はmanのカラー表示を実現するために、私は.bashrcには次のexportがあります.
export LESS_TERMCAP_mb=$'\E[1;31m'       # begin blinking
export LESS_TERMCAP_md=$'\E[1;38;5;74m'  # begin bold
export LESS_TERMCAP_me=$'\E[0m'          # end mode
export LESS_TERMCAP_so=$'\E[38;5;246m'   # begin standout-mode(search results and bottom status)
export LESS_TERMCAP_se=$'\E[0m'          # end standout-mode
export LESS_TERMCAP_us=$'\E[4;38;5;146m' # begin underline
export LESS_TERMCAP_ue=$'\E[0m'          # end underline

参照man 5 termcapでは、XXXX_TERMCAP_yyという環境変数の定義方法は、コマンドXXXXを使用する場合(XXXXがtermcapを使用することを前提とする)、yyの定義に基づいてcapabilityを設定することを意味する.
上記のコードでlessコマンドに設定されているcapability(mb mdなど)はテキストレンダリングに関連しており、フォントや色などの情報を制御するためのANSI Escape Sequenceとして定義されています.関連情報はwikipediaのANSI_を見ることができます.escape_コードエントリ.
manのデフォルトで使用されるpagerはlessツールであり、lessはterminfo(またはtermcap)を使用するため、以上の定義はman pageに色を塗ることを実現します.
 
しかし、これで私のlessはすべての時にこれらの設定を使用して、man pageでこれらを使用するだけでなく、terminfoの方法を使用します.
 
まずmkdir~/.terminfo、その後infocmp>xterm-manpageを行う.txtは、現在のterminal(私が使用していたのはxterm)のデータベースのソースファイルを生成します.
このファイルを編集するには、最初のxterm|blablablaをxterm-manpage|blablablaに変更する必要があります.これはこのデータベースに唯一の名前を付けます.man terminfoの大きなテーブルでは、上記のmb mdなどのtermcap codeに対応するcapnameを順に見つけ、ファイル内の対応するcapnameの値を上記の値に変更して保存します.
次のセグメントは、対応する7つの設定です(この7つだけを使用してコンパイルすることはできません.既存のソースファイルに基づいて、この7つの場所を変更してからコンパイルする必要があります).
  blink=\E[1;31m,
  bold=\E[1;38;5;74m,
  sgr0=\E[0m,
  smso=\E[38;5;246m,
  rmso=\E[0m,
  smul=\E[4;38;5;146m,
  rmul=\E[0m,

 
tic xterm-manpageを使用します.txtコンパイル(一般ユーザコンパイルでは~/.terminfoでデータベースが生成され、rootコンパイルでは/usr/share/terminfoのようなシステムレベルの場所で生成される)、大きな成果が得られます.
 
その後、manを呼び出すときに、TERM=xterm-manpage man infocmpなどの環境変数を接頭辞して使用するデータベースを指定すればよい.
 
明らかにbashrcでman aliasをあげると便利です.