學習

ANSI跳脫序列(ANSI escape sequences)

ANSI跳脫序列(ANSI escape sequences),是一種控制字元序列,用於控制終端機上的文字顯示效果,游標(cursor)位置和其他選項。這些序列通常以ESC跳脫字元和”[“字元開始,相容的終端機(例如: VT100)會將這些escape sequences解釋為相應的指令,而不是一般的普通文字。


圖. 轉譯範例: PTT 系統資訊

這些序列有各種不同的功能,序列的開頭字元皆為 ESC (ASCII 27=0x1B)
圖. 序列解釋

以下列出幾種常見的ANSI序列,
圖. Popular C0 control codes - ANSI escape code - Wikipedia

對於本研究的一部分,與PTT論壇互動而言,我們將會用到是其中的 **CSI序列(Control Sequence Introducer)**,也就是 ESC [ = 0x9B

CSI序列(Control Sequence Introducer)

CSI序列,主要可以分為下列幾種主要的功能,游標控制(Cursor Controls)、螢幕清除(Erase Functions)、和顏色(Colors / Graphics Mode)控制等,以下列出幾種常見的CSI序列,

圖. ANSI control sequences - ANSI escape code - Wikipedia

SGR (Select Graphic Rendition)

SGR序列可用於更改文字的顏色、背景色、斜體、加粗、和下劃線等不同效果。這些序列是為了在終端機上顯示顏色設計的,已廣泛應用於終端機、命令列介面(CLI)應用程式和日誌輸出等用途。

SGR序列(CSI n m),以CSI 字元開始,以 m 字元結束,中間包含想要的參數,參數部分以分號(semicolons)隔開,我們可以組合不同的參數來達到多種效果。

SGR (Select Graphic Rendition) parameters - ANSI escape code - Wikipedia

例如,以下序列: ESC[1;34mHello ESC[47mWorld

圖. 序列範例

n 值 30-37 設定的是字體顏色(foreground color),40 - 47 設定的是背景色( background color),而1為將格式設為粗體,0則可以恢復預設顏色及字體,

所以透過上述規則,上述序列代表的意思為,

  • 切換為粗體,將字體顏色設為藍色,輸出”Hello”。
  • 將背景色設為白色,輸出”World”。

圖. 範例解釋

圖. SGR parameters - Colors - ANSI escape code - Wikipedia