tty 与 pty 的不同行为

tty 与 pty 的不同行为

如果我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

这个问题提供了几种转储手册页的方法。他们还讨论了手册页遵循特殊格式 - 可以由终端仿真器解释的格式。

基本上手册页是格罗夫文档,因此它包含解释为格式的有趣字符man

在两个不同的终端模拟器上使用man可能会产生不同的结果 - 这正是发生在您身上的情况。不幸的是,您对其行为无能为力 - 它受到终端模拟器的限制。

答案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 的发行版通常都是这样配置的)。同样地,接收值可以(也是基于资源的,尽管可配置性较差)。

相关内容