如何反轉控制台顏色,在白屏上顯示黑色字母?
如何反轉控制台顏色,在白屏上顯示黑色字母?
tput rev
類似的作品,但只有部分人物的背景是白色的,其餘的螢幕仍然是黑色的,看起來有點奇怪。即使沒有字元,如何將整個控制台背景更改為白色?
問題的延伸是如何使它成為其他顏色,例如黃色背景,黑色前景?
tput setaf 0 && tput setab 3
這樣做,但再次 - 沒有字元的背景仍然是黑色的。
我說的是不使用 X 的文本控制台,或者當您在 X 中按 Cltr+Alt+F1 並獲得全黑屏控制台登錄時獲得的控制台,而不是在 x 終端視窗中。
這是 Debian 不穩定/sid。
反向影片很有趣。
terminfo 模型過於簡單且錯誤。它與終端仿真器和真實終端的實際操作方式不匹配。你真的不會在這裡與 terminfo 走得很遠。
真實終端的模型乍一看很簡單:
- 目前有一組顏色和屬性,其中之一是反向影片屬性。反轉影片導致字元字形中的像素反轉:打開像素是背景顏色,關閉像素是前景色。
- 有一個全屏反向影片設置,它反轉了所有單元格的反向影片屬性的意義。設置它,所有反轉的字元單元格都顯示為非反轉,反之亦然。
對於單色影片終端,這只是硬體中的一些異或邏輯。
逆影片屬性當然是 SGR 7 和 SGR 27,幾十年來幾乎沒有人做過 ECMA-48 以外的任何事情。整個螢幕反向影片設置由源自 DEC VT 的控制序列控制,稱為 DECSCNM(DEC 螢幕模式)。這是一種供應商私有模式,ECMA-48 為其提供了機制。這些序列只是 DEC 私有模式 #5 的 ECMA-48 SM 和 RM。
如果您確實想反轉整個螢幕,而不僅僅是輸出的下一行,那麼 DECSCNM 是您的最佳選擇。許多終端仿真器辨識並響應 DECSCNM,包括 Unicode rxvt、基於 VTE 庫的終端仿真器、Konsole、kitty、KiTTY、PuTTY、XTerm、Linux 內置終端仿真器和 my
console-terminal-emulator
in the nosh 工具集。您可以使用 列印 DECSCNM 控制序列
printf
。它沒有 terminfo 功能。這超出了有限的 terminfo 模型。對於那些不想記住控制序列的人,我的攜帶式設備setterm
提供了一種方便的便捷方式:% **setterm -7 --invertscreen 開** % **setterm -7 --invertscreen 關**
這就是事情變得糟糕的地方。
實際上,有兩組顏色和屬性。有用於繪製列印字元的集合,還有用於擦除字元和繪製通過滾動引入的空白行和列的集合。名為擦除顏色模式(DECECM) 的設置控制這兩組的不相交程度。在實際的最新型號 DEC VT 上,預設設置是它們大致相同,擦除/滾動顏色匹配印刷顏色。但是,太多的終端仿真器將其 DECECM 設置初始化為舊約定,即擦除/滾動顏色與列印顏色不同,並且始終為 SGR 39/SGR 49。
初始狀態可通過 PuTTY 中的複選框進行選擇,稱為背景顏色擦除。terminfo 模型也這樣稱呼它,但它倒退了。在首先擁有它的終端上,它是一種可設置的模式,而不是終端的固定方面。它可以通過主機發出控制序列來切換。terminfo 不提供設置它的功能,但是,只有一個表示它是關閉還是打開的固定值標誌,這可能與終端的目前狀態不匹配。同樣,對於那些不想記住控制序列的人:
% **setterm -7 --bce on** % **setterm -7 --bce off**
但是 DECECM嚴格來說只控制(背景)顏色。嚴格來說,它並不連接屬性。不需要為已擦除/滾動的字元單元格指定為列印字元分配的反向影片屬性(或實際上任何其他屬性,例如下劃線)。一些終端(例如我的和 FreeBSD 核心內置終端仿真器)可以,但很多不。
此外,它僅在首先發生擦除/滾動時適用。不擦除/滾動但不列印到行的全長也會留下不同的顏色/屬性部分。
這就是為什麼人們在許多此類終端仿真器上看到的其餘部分不是反向影片的原因。(如果使用我的終端仿真器或 FreeBSD KVT,整行在滾動或用 EL 擦除時會顯示為反向影片。查看任一結果
printf '\e[7m\e[117hwibble\e[K\n'
。)如果這還不夠,還有一堆奇怪的行為:
- PuTTY 及其衍生產品(例如名稱容易混淆的 MobaXTerm)在設置 DECECM 時將擦除顏色連結到背景顏色,但不會類似地傳播反向影片。享受(在螢幕的最後一行)一種效果,其中部分行是反向影片,部分不是,但顏色保持:
tput setaf 4; tput setab 3; tput 轉速;迴聲擺動
Windows 終端似乎也可以做到這一點。
- Interix 終端仿真器可以使用 SGR 7 打開反向影片,但無法辨識 SGR 27 將其關閉。
- 一些終端仿真器有瘋狂的我知道比你明確要求的關於反向影片的想法,例如 Unicode rxvt,如果背景和前景色設置為相同和反向影片,它會切換到完全不同的顏色對然後打開。完全不享受藍色:
tput setaf 4; tput setab 4; tput 轉速;迴聲擺動
有人可能會考慮放棄反向影片和擦除/滾動,而只使用全屏反向影片。但樂趣並沒有停止:
- PuTTY 將快速打開和關閉 DECSNM 解釋為試圖敲響警鐘。
- 幾個終端仿真器交換明暗。請求 DECSCNM 低的深色背景,您將獲得淺色背景,反之亦然。
- Windows 終端更改幾個調色板條目以響應 DECSCNM,特別是索引顏色 #232。XTerm 也會改變調色板。
所以,是的,列印全寬反向影片條的全屏應用程序要麼必須使用 DECECM 和 EL 序列(與延遲換行一起使用很棘手,我什至沒有提到)……要麼只是列印很多空間,明確地交換前景色/背景色,並完全避開反向影片。
進一步閱讀
- https://vt100.net/docs/vt510-rm/DECSCNM.html
- https://unix.stackexchange.com/a/251755/5132
- 喬納森·德博因·波拉德 (2018)。
setterm
. 小吃指南。軟體。- 喬納森·德博因·波拉德 (2018)。“ linux-vt ”。 設備。nosh 工具集。
- 喬納森·德博因·波拉德 (2018)。“ Linux 控制台”。 設備。nosh 工具集。