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

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

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

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

答案1

支持 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 系统兼容。

选项-D抽动症信息CMP(添加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
...

答案2

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

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

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

find /usr -type d -name terminfo -print

查找目录所在的位置。

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

man terminfo

答案3

在 Linux 上,您可以使用strace来查看程序使用了哪些系统调用。下面将列出所有“open(2)”系统调用并过滤它们,以显示用于翻译当前终端的 terminfo 功能的sedterminfo 文件。tput

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 搜索路径。这些与诅咒所搜索的路径相同。

答案4

我在 Zyxel NSA310 上遇到了同样的问题

对我有用的解决方案是

export TERM=xterm

这里给出了建议:

https://better-coding.com/solved-xterm-256color-unknown-terminal-type/

相关内容