大部分问题都在标题中,但要详细说明一下:
在大多数 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 功能的sed
terminfo 文件。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/