如何在彩色 tty 上启用下划线和其他格式?

如何在彩色 tty 上启用下划线和其他格式?

我使用的是 Arch Linux(32 位替代版本),最近我发现我以前在 Vim 中看到的蓝线:set cursorline应该是带下划线的,而不是蓝色的。

这让我四处寻找解决方案。

我没有使用图形环境,所以没有桌面环境或窗口管理器,只有很好的 ol' tty with zsh,我目前最喜欢的 shell。

我发现这:hi CursorLine cterm=bold使得光标线变得更漂亮,因为它现在不再是蓝色,大部分只是浅色,这已经让我的生活变得更好了。

我也尝试过cterm=underline(仍然将线条渲染为蓝色),undercurl尝试:hi clear CursorLine然后重新做一遍,但没有任何东西给我带来我想要的下划线。

我在 上尝试了 Vim fbterm,因为我相信它是一个准图形终端模拟器,但我得到了相同的行为,只是使用了更难看的超宽字体。

这不仅适用于 Vim,似乎也适用于任何事物。我在echoes 上尝试了 ANSI 转义序列,当尝试为文本添加下划线时,我也得到了没有下划线的蓝色。

所以我相信某物丢失了,无论是字体、shell 配置、Vim 配置还是其他什么。

经过一番搜索后,我没有找到关于为什么我的 tty 缺少这些格式化选项的答案,所以我决定在这里询问。

还值得注意的是,我在运行 Raspbian 的 Raspberry Pi 3B+ 上尝试过此操作,并且在 tty 上得到了几乎相同的行为。

我设法让它工作的唯一地方是在我不时开始使用 Firefox 的 X 服务器上。我xterm在它上面生成并即使在 上键入命令时我也会得到下划线zsh

现在我将尝试使用不同的终端字体,看看我是否更接近美化我的 tty。

编辑01:

我用 Asciinema 录制了它,显示得很好,但我实际看到的正如我所描述的那样。 ASCII 广播

编辑02:

我正在读书这个 Arch 维基页面关于终端模拟器的部分,并决定尝试一下yaft,因为听起来这可能正是我正在寻找的东西。

事实证明我已经安装了它,并且使用它确实至少启用了我想要的一些功能,所以这很棒。

答案1

Linux 控制台驱动程序不支持彩色显示器上的下划线,因为它是可读性和易于实现之间的折衷方案。自 20 世纪 90 年代中期以来一直如此,并记录在console_codes(4)

   4       set underscore (simulated with color on a color display)
           (the colors used to simulate dim or underline are set
           using ESC ] ...)

除了a之外,你不太可能有任何其他东西彩色显示。您可以更改用于描绘下划线的颜色,但它会以一种或另一种方式着色。手册页提到了用于自定义的转义序列调色板

   ESC ]     OSC      (Should be: Operating system command) ESC ] P
                      nrrggbb: set palette, with parameter given in 7
                      hexadecimal digits after the final P :-(.  Here n
                      is the color (0–15), and rrggbb indicates the
                      red/green/blue values (0–255).  ESC ] R: reset
                      palette

以及用于告诉 16 个调色板条目中的哪一个将显示的转义序列暗淡强调

   ESC [ 1 ; n ]       Set color n as the underline color.
   ESC [ 2 ; n ]       Set color n as the dim color.

设置TERM为“xterm”的任何变体都会产生较差的结果,因为

  • Linux 控制台驱动程序缺乏对 xterm 终端描述中的内容的支持,并且
  • 终端linux描述旨在使用 Linux 控制台驱动程序的实际功能。

使用infocmp linux xterm-256color来查看差异。它很长,所以这里总结一下以显示差异的大小:

$ infocmp -1x linux | wc -l
122
$ infocmp -1x xterm-256color |wc -l
272
$ infocmp -1x linux xterm-256color | wc -l
213

相关内容