我看见这问题中,回答者使用 termcap 来定义 less 的颜色,然后可以使用它来显示 man 的方式。它说虽然 termcap 已经过时,但它更容易,而 terminfo 更复杂。
有人可以分享如何使用 terminfo 完成类似的设置吗?
$ cat ~/.LESS_TERMCAP
export LESS_TERMCAP_mb=$(tput bold; tput setaf 2) # green
export LESS_TERMCAP_md=$(tput bold; tput setaf 6) # cyan
export LESS_TERMCAP_me=$(tput sgr0)
export LESS_TERMCAP_so=$(tput bold; tput setaf 3; tput setab 4) # yellow on blue
export LESS_TERMCAP_se=$(tput rmso; tput sgr0)
export LESS_TERMCAP_us=$(tput smul; tput bold; tput setaf 7) # white
export LESS_TERMCAP_ue=$(tput rmul; tput sgr0)
export LESS_TERMCAP_mr=$(tput rev)
export LESS_TERMCAP_mh=$(tput dim)
export LESS_TERMCAP_ZN=$(tput ssubm)
export LESS_TERMCAP_ZV=$(tput rsubm)
export LESS_TERMCAP_ZO=$(tput ssupm)
export LESS_TERMCAP_ZW=$(tput rsupm)
显然,首先要改变的是名称,即.LESS_TERMINFO。除此之外就没有什么想法了。
我确实尝试阅读/解析 terminfo 页面,但对我来说没有多大意义,除了它使用 ncurses,IIRC 也使用相当多的颜色,尽管我不知道这是否相关。
任何人都可以帮助分享 less 中颜色的 .TERMINFO 定义的等效位吗?
答案1
它是相同的:ncurses 提供了术语帽接口(less
使用)虽然底层终端数据库是术语信息。与几乎所有 termcap 应用程序一样,less
并不真正仔细查看返回的字符串的语法,只关心它可以要求md
(与 terminfo 对应的 termcap 名称bold
)。
less
具有这些 termcap 名称的列表,它tgetstr
在启动时使用函数 (termcap...) 读取该列表,并允许您使用附加到 的 termcap 名称命名的环境变量覆盖这些值LESS_TERMCAP_
。
tput
顺便说一下,示例中的所有命令都使用术语信息名称。它们只是用于分配less
可以使用 termcap 接口读取的字符串。
进一步阅读:
tput
,reset
- 初始化终端或查询terminfo数据库- 图书馆用户类型(ncurses 常见问题)