Terminfo
ncurses 提供 terminfo 数据库,以及命令行工具 infocmp
, captoinfo
, clear
, infocmp
, infotocap
, ncursesw6-config
, reset
, tabs
, tic
, toe
, tput
, tset
。
https://man7.org/linux/man-pages/man5/terminfo.5.html
- 显示当前终端的 Terminfo 数据:
infocmp
。 echo $TERM
显示终端类型。- 显示当前终端支持的 Terminfo 数据:
infocmp <name>
。- 如果显示
infocmp: couldn't open terminfo file (null).
,则表示没有安装这个 Terminfo。
- 如果显示
- 更新 Terminfo 数据库:
tic -x ~/.terminfo/t/tmux-256color
Terminfo 搜索路径
根据 man terminfo
文档。 若有设置环境变量 TERMINFO
,则在这个路径下寻找。若没有,则在 $HOME/.terminfo/
目录下找。若找不到, 则找是否存在环境变量 TERMINFO_DIRS
,TERMINFO_DIRS
的内容是由冒号分隔的路径,会依次查询。 若 TERMINFO_DIRS
是空的,则在 /usr/share/terminfo/
目录下找。
MacOS 里没有 tmux-256color
MacOS 系统自带了 ncurses 5,虽然有 terminfo 数据,但是比较旧,不包含 tmux-256color。
有篇文章讲的是如何在 MacOS 里导入 tmux-256color。但是其实用不着这么麻烦。下面是我的解决方案:
which infocmp
可以看到指向的是 /usr/bin/infocmp
,而 infocmp -V
的结果是 ncurses 5.7.20081102
。
用 brew install ncurses
安装 ncurses 6。(arm 架构) brew 安装的 ncurses 目录是 /opt/homebrew/opt/ncurses
。 然后只要 PATH=/opt/homebrew/opt/ncurses/bin:$PATH
即可。这样调用 ncurses 的命令时,用的都是 6 而不是系统自带的 5 版本。
brew 安装的 ncurses 的 terminfo 数据库目录是 /opt/homebrew/opt/ncurses/share/terminfo/
里。 系统自带的 terminfo 数据库是 /usr/share/terminfo
。
至于为什么 brew 包不更新系统自带的 ncurses,请看这个 issue。