Linux

如何在彩色 tty 上啟用下劃線和其他格式?

  • November 21, 2019

我在 Arch Linux(一個 32 位的替代版本)上,最近我發現我以前在 Vim 中看到的藍線:set cursorline應該是下劃線的,而不是藍色的。

這讓我四處尋找解決方案。

我沒有使用圖形環境,所以沒有桌面環境或視窗管理器,只有很好的 ol’tty zsh,我目前最喜歡的 shell。

我發現這:hi CursorLine cterm=bold讓游標線更漂亮了,因為它現在不再是藍色,大部分情況下只是更淺的顏色,這已經讓我的生活變得更好了。

我也嘗試過cterm=underline(仍然將線渲染為藍色),然後undercurl嘗試:hi clear CursorLine重新做一遍,但沒有任何東西給我帶來我想要的下劃線。

我在 上嘗試過 Vim fbterm,因為我相信它是一個準圖形終端仿真器,但我得到了相同的行為,只是使用了更醜陋的超寬字型。

這不僅適用於 Vim,而且似乎適用於任何東西。我在 es 上嘗試了 ANSI 轉義序列echo,當嘗試給文本加下劃線時,我也得到了沒有下劃線的藍色。

所以我相信缺少一些東西,無論是字型、shell 配置、Vim 配置還是其他什麼。

在搜尋了相當多之後,我沒有得到關於為什麼我的 tty 缺少這些格式選項的答案,所以我決定在這裡問。

還值得注意的是,我在執行 Raspbian 的 Raspberry Pi 3B+ 上進行了嘗試,並且在 tty 上得到了幾乎相同的行為。

我設法讓它工作的唯一地方是在我不時開始使用 Firefox 的 X 伺服器上。我xterm在它上面生成了,,即使在zsh.

我現在將嘗試使用不同的終端字型,看看我是否更接近於美化我的 tty。

編輯01:

我用 Asciinema 錄製了它,它在那裡顯示得很好,但我實際看到的和我描述的一樣。 asciiccast

編輯02:

我正在閱讀有關終端模擬器部分的Arch Wiki 頁面yaft,並決定嘗試一下,因為聽起來它可能正是我正在尋找的東西。

事實證明我已經安裝了它,並且使用它確實至少啟用了我想要的一些功能,所以這很棒。

Linux 控制台驅動程序不支持彩色顯示器上的下劃線,因為它是可讀性和易於實施之間的折衷。自 1990 年代中期以來一直如此,並記錄在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 ] ...)

除了彩色顯示器之外,您幾乎沒有其他任何東西。您可以更改用於描繪下劃線的顏色,但它會以一種或另一種方式著色。手冊頁提到了用於自定義調色板的轉義序列:

  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

引用自:https://unix.stackexchange.com/questions/553227