有关LESS_TERMCAP_ *变量的文档?


Answers:


45

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命令在系统的TermcapTerminfo数据库中查找当前终端的功能值。如果您不介意依赖终端,则可以直接使用转义序列。例如,当指示以粗体显示时,此设置告诉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文档中提及。我可以提供的最佳参考是我的答案


8
谢谢。我还简要地查看了less的源代码,发现当您将LESS_TERMCAP_DEBUG设置为某项然后打开man时,您会看到类似手册页源的内容以及其中使用的所有功能标签。使您更容易决定要将它们设置为什么。
anselm 2014年

1
有关如何使用而不是转义字符设置所有环境变量的信息,请参见此答案LESS_TERMCAP_*tput
Kaushal Modi

3

Gilles的回答很好,但这使我感到好奇:

Termcap已过时,已被Terminfo取代

  1. 如果Termcap已过时,我想切换到Terminfo

  2. 我还想退出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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.