如何检查哪些终端定义可用?

21 linux solaris terminal ncurses console

大部分问题都在标题中,但要详细说明一下:

在大多数 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
Run Code Online (Sandbox Code Playgroud)

但它很慢。发现tput终端定义使用的路径并自己运行“查找”的任何选项?

Tho*_*key 16

支持 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,
        ...
Run Code Online (Sandbox Code Playgroud)

对于ncurses,它更复杂,因为您可以有多个terminfo 数据库,并且条目不必是单个文件。单个数据库和每个条目一个文件是默认的,以便与 Unix 系统兼容。

-D供选择抽动infocmp(加在2011年底)为示额外信息的一种方式。例如,在我的 Debian7 上,我可以看到:

$ infocmp6 -D
/users/tom/.terminfo
/usr/local/ncurses/share/terminfo
/usr/share/terminfo
/lib/terminfo
Run Code Online (Sandbox Code Playgroud)

在我的 FreeBSD 10 机器上,我使用散列数据库:

$ infocmp -D
/usr/local/ncurses/share/terminfo.db
/usr/local/share/misc/terminfo
/etc/termcap
Run Code Online (Sandbox Code Playgroud)

或者,可以使用该toe程序生成所有可用终端条目的报告。使用-s-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
...
Run Code Online (Sandbox Code Playgroud)


Kar*_*son 11

在 Solaris 10 上,您可以执行以下操作:

find /usr/share/lib/terminfo -type f -print
Run Code Online (Sandbox Code Playgroud)

您应该能够执行以下操作:

find /usr -type d -name terminfo -print
Run Code Online (Sandbox Code Playgroud)

找到目录所在的位置。

您还可以阅读以找到确切路径:

man terminfo
Run Code Online (Sandbox Code Playgroud)