如何使用terminfo为man和less设置颜色?

如何使用terminfo为man和less设置颜色?

我看见问题中,回答者使用 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 接口读取的字符串。

进一步阅读:

相关内容