如何检查可用的终端定义?


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终端定义所使用的路径,然后自己运行“查找”?

Answers:


9

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

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

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

find /usr -type d -name terminfo -print

查找目录所在的位置。

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

man terminfo

很好,但是我有一个小问题-如何找到路径,而又不弄乱人的输出?有什么办法吗?

我已经修改了答案。
卡森(Karlson)2012年

10

支持terminfo的“ any”系统上的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系统兼容。

ticinfocmp-D选项(在2011年末添加)是显示额外信息的一种方法。例如,在我的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程序生成所有可用终端条目的报告。使用-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
...

0

在Linux上,您可以strace用来查看程序使用哪个系统调用。以下将列出所有“ open(2)”系统调用并对其进行过滤,sed以显示希望的terminfo文件,该文件用于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搜索路径。这些都是诅咒寻找的相同路径。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.