使用可能な端末定義を確認するにはどうすればよいですか?


16

質問の大部分はタイトルにありますが、少し詳しく説明します。

ほとんどのLinuxで可能find /usr/share/terminfo -type fです。しかし、Solarisマシンには近くにあります-このディレクトリは存在しません。

端末のリストを反復処理して、次のようなことを行うことができます。

for TERM in xterm xtermc xterm-color xterm-256color screen rxvt
do
    tput cols >/dev/null 2>/dev/null && echo "$TERM available"
done

しかし、遅いです。tput端末定義に使用されるパスを検出し、自分で「検索」を実行するオプションはありますか?

回答:


9

Solaris 10では次のことができます。

find /usr/share/lib/terminfo -type f -print

次のようなことができるはずです。

find /usr -type d -name terminfo -print

ディレクトリの場所を見つける。

正確なパスを見つけるために読むこともできます:

man terminfo

これは素晴らしいことですが、1つの小さな問題があります-man出力をgrepせずに、どのようにパスを見つけることができますか?それを行う方法はありますか?

答えを修正しました。
カールソン

10

terminfoをサポートする「任意の」システム上のinfocmpプログラムは、現在の端末の端末の説明を見つけるパス名を表示します。例(この場合はAIX):

$ infocmp vt100
#       Reconstructed via infocmp from file: /usr/share/lib/terminfo/v/vt100
vt100|vt100-am|Digital VT100,
        am, msgr, xenl, xon,
        cols#80, it#8, lines#24, vt#3,
        ...

ncursesの場合、複数のterminfoデータベースを使用でき、エントリは個別のファイルである必要がないため、より複雑です。Unixシステムとの互換性のために、エントリごとに1つのデータベースと1つのファイルがデフォルトです。

ticおよびinfocmp2011年後半に追加)の-Dオプションは、追加情報を表示する1つの方法です。たとえば、私のDebian7では、これを見ることができます:

$ infocmp6 -D
/users/tom/.terminfo
/usr/local/ncurses/share/terminfo
/usr/share/terminfo
/lib/terminfo

私のFreeBSD 10マシンでは、ハッシュ化されたデータベースを使用しています。

$ infocmp -D
/usr/local/ncurses/share/terminfo.db
/usr/local/share/misc/terminfo
/etc/termcap

または、toeプログラムを使用して、使用可能なすべての端末エントリのレポートを作成できます。-sand -aオプションを使用すると、conflictプログラム(プログラムなど)を組み合わせることができます。

--> /users/tom/.terminfo
----> /usr/local/ncurses/share/terminfo
------> /usr/share/terminfo
--------> /lib/terminfo
--*-+---:       9term           Plan9 terminal emulator for X
--*---*-:       Eterm           Eterm with xterm-style color support (X Window System)
--*-*---:       Eterm-256color  Eterm with xterm 256-colors
--*-*---:       Eterm-88color   Eterm with 88 colors
--*-+---:       MtxOrb          Generic Matrix Orbital LCD display
--*-+---:       MtxOrb162       16x2 Matrix Orbital LCD display
--*-+---:       MtxOrb204       20x4 Matrix Orbital LCD display
--*-+---:       NCR260VT300WPP  NCR 2900_260 vt300 wide mode pc+  kybd
--*-+---:       aaa             ann arbor ambassador/30 lines
--*-+---:       aaa+dec         ann arbor ambassador in dec vt100 mode
--*-+---:       aaa+rv          ann arbor ambassador in reverse video
...

0

Linuxではstrace、プログラムが使用するシステム呼び出しを確認するために使用できます。以下は、すべての「open(2)」システムコールをリストし、それらをフィルタリングして、現在の端末のterminfo機能を変換sedするtputために使用されるterminfoファイルを表示することを望みます。

TERMINFO_FILE=$(strace -e open tput cud1 2>&1 | sed -n -e 's/^.*\(".*terminfo.*"\).*$/\1/p')
echo ${TERMINFO_FILE}

sed式は、terminfoファイルがパターン「terminfo」のパスに保存されていることを前提としていることに注意してください。それが心配な場合は、別の仮定を使用して、最後の「オープン」システムコールを選択できます。

TERMINFO_FILE=$(strace -e open tput cud1 2>&1 | grep -e "^open" | tail -n 1 | sed -n -e 's/^.*\(".*"\).*$/\1/p')
echo ${TERMINFO_FILE}

最後に、infocmp -Dまたはを使用してterminfo検索パスのリストをダンプできますtic -D。これらは、コンパイルされたterminfo検索パスをリストします。これらは、cursesによって検索されるのと同じパスです。


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