如果我man bash
在 X 内部执行操作,例如,在xterm
或中mate-terminal
,我会在某些单词上添加下划线。
如果我man bash
在虚拟终端中执行此操作,我会得到相同的单词的颜色。
我可以在 X 中获得相同的颜色吗?
是什么造成了两人行为上的这种差异呢?
答案1
如果less
设置为man
页面查看器,那么您有机会使用less
特殊变量覆盖标准颜色。
我的设置示例:
export LESS_TERMCAP_mb=$'\e[6m' # begin blinking
export LESS_TERMCAP_md=$'\e[34m' # begin bold
export LESS_TERMCAP_us=$'\e[4;32m' # begin underline
export LESS_TERMCAP_so=$'\e[1;33;41m' # begin standout-mode - info box
export LESS_TERMCAP_me=$'\e[m' # end mode
export LESS_TERMCAP_ue=$'\e[m' # end underline
export LESS_TERMCAP_se=$'\e[m' # end standout-mode
此外,您可能需要设置
export GROFF_NO_SGR=''
由于“新”groff
行为中的一些错误。
我已经检查了我的 linux 盒子,如果我在控制台中设置
export LESS_TERMCAP_md=$'\e[4m'
然后代码确实被解释为浅蓝色,而不是下划线(这在控制台下是不可能的)。
答案2
答案3
事实上,答案很简单:EGA-VGA 彩色文本模式很简单缺乏强调能力。因此,groff
使用它认为合适的任何替代品。
fbdev
从技术上讲,模拟不受 VGA 限制的约束,但(为了兼容性)它依赖于具有相同语义的相同屏幕缓冲区格式。
人们可以更改 Linux 帧缓冲 TUI 模拟器的代码来保留一些前景/背景组合作为下划线。但它会导致:
- 兼容性问题;
- 内核膨胀;
- 需要发明一个新的 terminfo $TERM 键(除了
linux
),因为假设的“新 Linux 控制台”的功能将不同于经典的 TERM=linux; - 需要确保登录 shell 相应地设置 $TERM。
答案4
其他答案很有趣,但没有人回答OP的问题:缺乏任何特定的定制,为什么有些终端显示不同的行为?
Linux 控制台有着悠久的历史(自 20 世纪 90 年代初以来)显示颜色对于它不支持的有趣视频属性。 @Incnis Mrsi 提到了这一点(尽管有很多更好的来源)。
- 然而,groff 并不知道缺乏下划线的能力。终端描述说是这样;这很好,因为 groff 忽略了这一点(它使用硬编码转义)。然而 Linux 控制台将它们呈现为它选择。
- 关于环境变量的注释
less
很有趣,但不常用。
其他一些终端可以将视频属性渲染为颜色; xterm 可以通过设置资源 colorUL
并且colorULMode
(似乎基于 Red Hat 的发行版通常都是这样配置的)。同样地,接收值可以(也是基于资源的,尽管可配置性较差)。