Answers:
Termcap是Less用来访问终端的库。Termcap已被Terminfo取代,在很大程度上已经过时了,但是Terminfo为应用程序提供了Termcap兼容性接口。Termcap界面的内容较少,并使用它。
Termcap库是对终端设备的描述。每个设施都由两个字母(或更常见的两个字符)的代码标识。例如,hc
识别硬拷贝终端(即打印机,而不是屏幕);co
是列数;md
开始显示粗体文本。每个功能都有一个值,该值可以是布尔值(如hc
),整数(如co
)或字符串(如md
)。许多字符串是应用程序可以发送到终端以达到一定效果的转义序列。
为什么要转义序列?因为终端和应用程序之间的接口是字符流(更准确地说,每个方向上的一个字符流:一个用于用户输入,一个用于输出以显示)。当应用程序将字符写入终端时,通常会显示该字符。某些字符的行为有所不同:它们是控制字符,它们执行诸如移动光标,切换显示属性等操作。命令比控制字符多得多,因此大多数命令都是由转义序列访问的,它们以一个特殊字符(通常是转义字符,因此是名称)。
例如,当Less想要显示一些粗体文本时,它将查找md
功能的值。这是一个字符串,Less将其写入终端。终端将此字符串识别为转义序列,并调整其内部状态,以便后续字符将以粗体显示。
在硬件终端的早期,不同的品牌具有不同的转义序列和功能。发明了Termcap数据库和接口,因此应用程序不必了解每种终端型号。如今,大多数终端仿真器都具有非常相似的功能,但是Termcap或Terminfo数据库对于解决微小差异仍然很有用。
该LESS_TERMCAP_*
变量可以在环境或中设置.lesskey
文件。它为Less提供终端功能的替代值。当Less想要使用终端功能时,例如切换为粗体,它将首先检查是否存在LESS_TERMCAP_md
变量。如果存在此变量,Less将其值用作转义序列以切换为粗体。如果不是,它将使用Termcap数据库中的值。该机制允许用户为Less覆盖Termcap数据库设置。
最有用的LESS_TERMCAP_*
设置是转义序列。您可以将属性映射到其他属性。您可以使用该tput
命令在系统的Termcap或Terminfo数据库中查找当前终端的功能值。如果您不介意依赖终端,则可以直接使用转义序列。例如,当指示以粗体显示时,此设置告诉Less以粗体红色显示:
LESS_TERMCAP_md=$(tput md; tput AF 1)
或如果您的tput
命令不支持Termcap名称:
LESS_TERMCAP_md=$(tput bold; tput setaf 1)
Man使用一些非常简单的格式发送较少的文本,该格式只能表示粗体和斜体。此外,Less在内部使用各种格式化功能,例如突出显示搜索结果并在底部显示模式行。以下是Less使用的一些转义序列(我只列出了重新映射相当有用的功能):
termcap terminfo
ks smkx make the keypad send commands
ke rmkx make the keypad send digits
vb flash emit visual bell
mb blink start blink
md bold start bold
me sgr0 turn off bold, blink and underline
so smso start standout (reverse video)
se rmso stop standout
us smul start underline
ue rmul stop underline
要以彩色显示输出,请使用此setaf
功能(或AF
使用Termcap)。
该LESS_TERMCAP_*
设置未在LESS
文档中提及。我可以提供的最佳参考是我的答案。
Gilles的回答很好,但这使我感到好奇:
Termcap已过时,已被Terminfo取代
如果Termcap已过时,我想切换到Terminfo
我还想退出Termcap,因为我发现了一个错误。假设您将termcap变量放入您的~/.profile
或类似变量中:
export LESS_TERMCAP_so=$(printf '\33[5;30;43m')
export LESS_TERMCAP_se=$(printf '\33[m')
之后,如果输入set
,则Termcap变量会使您的颜色输出混乱。
要切换到Terminfo,您可以创建一个文件xterm-pretty.ti
:
xterm-pretty|xterm with pretty colors,
# exit standout mode
rmso=\e[m,
# begin standout mode
smso=\e[5;30;43m,
# similar terminal
use=xterm,
编译并安装文件:
tic xterm-pretty.ti
将行添加到~/.profile
或类似行:
TERM=xterm-pretty