Manpages

NAME 名 稱

控 制 終 端 代 碼 - Linux 控 制 終 端 轉 義 和 控 制 序 列

DESCRIPTION 描 述

Linux控 制 檯 實 現 了 VT102和 ECMA-48/ISO 6429/ANSI X3.64終 端 控 制 的 子 集 , 這 個 子 集 很 龐 大 ,當 然 還 有 Linux自 己 私 有 的 控 制 序 列 ,以 改 變 顏 色 配 置 ,字 符 集 映 像 ,等 等 .在 下 面 將 要 給 出 的 表 格 中 ,第 二 列 爲 指 定 的 功 能 給 出 了 ECMA-48 或 者 DEC助 記 符 (如 果 是 後 者 會 在 前 面 加 有 DEC前 綴 ).沒 有 給 出 助 記 符 的 序 列 既 不 是 ECMA-48也 不 是 VT102字 符 . 在 所 有 標 準 輸 出 進 程 執 行 完 畢 ,並 且 一 個 字 符 流 被 送 到 控 制 檯 驅 動 程 序 準 備 顯 示 出 來 的 時 候 ,所 發 生 的 第 一 件 事 就 是 將 進 程 使 用 的 代 碼 轉 換 成 顯 示 使 用 的 代 碼 . 如 果 控 制 檯 工 作 於 UTF-8 模 式 ,那 麼 輸 入 的 字 節 會 首 先 編 碼 成 16位 的 Unicode 代 碼 .如 果 不 是 UTF-8模 式 ,那 麼 每 個 字 節 會 按 照 當 前 的 字 符 映 射 表 完 成 轉 換 (轉 換 成 Unicode編 碼 的 值 ). 參 看 下 面 將 要 討 論 的 CHARACTER SETS 一 章 . 在 一 般 情 況 下 ,Unicode 代 碼 被 轉 換 成 爲 存 儲 在 視 頻 存 儲 器 中 的 字 體 索 引 ,這 樣 對 應 的 具 體 字 符 (字 符 存 儲 在 視 頻 ROM中 )就 顯 示 在 屏 幕 上 了 . 注 意 使 用 Unicode 編 碼 允 許 我 們 同 時 使 用 512 種 不 同 的 字 體 (和 計 算 機 硬 件 有 關 ). 如 果 當 前 的 Unicode 代 碼 是 一 個 控 制 字 符 ,或 者 系 統 目 前 正 在 處 理 一 個 轉 義 序 列 ,處 理 的 方 式 有 些 特 別 .它 不 會 被 轉 換 成 字 體 索 引 ,也 不 會 直 接 顯 示 在 屏 幕 上 .它 可 能 控 制 光 標 的 移 動 ,或 者 實 現 其 它 控 制 功 能 .參 看 下 面 的 LINUX CONSOLE CONTROLS 一 節 所 進 行 的 討 論 . 一 般 來 說 直 接 在 程 序 中 插 入 終 端 控 制 字 符 並 不 是 很 好 .Linux 支 持 終 端 兼 容 的 terminfo(5) 數 據 庫 . 除 了 直 接 插 入 控 制 和 轉 義 序 列 ,也 可 以 使 用 象 ncurses(3), tput(1), 或 者 reset(1). 這 樣 的 顯 示 庫 或 者 工 具 .

LINUX CONSOLE CONTROLS Linux終 端 控 制

這 一 段 描 述 了 所 有 在 Linux控 制 檯 下 使 用 的 調 用 特 殊 功 能 的 控 制 字 符 和 轉 義 序 列 (例 如 .任 何 不 在 當 前 光 標 處 插 入 可 見 字 符 的 序 列 ).

Control characters 控 制 字 符 當 一 個 字 符 在 通 過 字 符 映 射 錶 轉 換 之 前 含 有 以 下 14個 代 碼 之 一 的 時 候 表 明 它 是 一 個 控 制 字 符 . 00(NUL),07(BEL),08(BS),09(HT),0a(LF),0b(VT), 0c(FF),0d(CR),0e(SO),0f(SI),18(CAN),1a(SUB), 1b(ESC),7f(DEL). 我 們 可 以 通 過 設 置 ’顯 示 控 制 字 符 ’ 模 式 (見 下 文 )以 允 許 07,09,0b, 18,1a,7f 像 普 通 字 符 一 樣 顯 示 在 屏 幕 上 .另 一 方 面 ,在 UTF-8模 式 下 所 有 位 於 00-1f之 間 的 代 碼 都 被 認 爲 是 控 制 字 符 ,而 不 管 是 否 處 於 ’顯 示 控 制 字 符 ’模 式 . 一 個 控 制 字 符 會 立 刻 生 效 ,然 後 被 丟 棄 (即 使 是 在 轉 義 序 列 中 間 ), 之 後 轉 義 序 列 才 繼 續 處 理 下 一 個 字 符 . (在 任 何 情 況 下 ,ESC都 表 示 一 個 新 的 轉 義 序 列 的 開 始 ,可 能 導 致 前 一 個 序 列 的 非 正 常 終 止 ,CAN和 SUB 終 止 任 何 轉 義 序 列 .) 可 識 別 的 控 制 字 符 是 BEL,BS,HT,LF,VT,FF,CR,SO,SI,CAN, SUB,ESC,DEL,CSI.他 們 的 功 能 如 下 .:

BEL(0x07,^G)鈴 聲 ;

BS(0x08,^H)後 退 一 格 (在 行 首 不 起 作 用 );

HT(0x09,^I)跳 至 下 一 個 製 表 位 .如 果 後 面 已 沒 有 製 表 位 則 跳 至 行 尾 ;

LF(0x0A,^J),VT(0x0B,^K),FF(0x0C,^L)三 者 都 表 示 換 行 ;

CR(0x0D,^M)回 車 並 換 行 ;

SO(0x0E,^N)激 活 G1 字 符 集 , 如 果 設 置 了 LF/NL(新 行 模 式 )還 要 加 上 回 車 換 行 ;

SI(0x0F,^O)激 活 G0 字 符 集 ;

CAN(0x18,^X),SUB(0x1A,^Z)兩 者 都 表 示 中 斷 轉 義 序 列 ;

ESC(0x1B,^[)開 始 一 個 新 的 轉 義 序 列 ;

DEL(0x7F)忽 略 ;

CSI(0x9B)等 同 於 ESC [;

ESC- but not CSI-sequences 非 控 制 轉 義 序 列

ECMA-48 CSI sequence ECMA-48 CSI 序 列
CSI(或 者 ESC [)後 面 跟 的 參 數 序 列 大 部 分 是 NPAR(16), 就 是 由 分 號 隔 開 的 十 進 制 數 .空 參 數 或 缺 少 的 參 數 以 0處 理 . 可 以 用 一 個 問 號 代 替 參 數 序 列 . 在 任 何 情 況 下 ,系 統 讀 取 CSI [(或 者 ESC [ [)後 的 單 個 字 符 , 而 忽 略 整 個 序 列 .(用 於 忽 略 回 顯 功 能 鍵 .)

CSI 序 列 的 動 作 由 其 最 後 一 個 字 符 決 定 .

ECMA-48 Set Graphics Rendition 設 置 圖 形 屬 性
ECMA-48 SGR 序 列 ESC [ <parameters> m 設 置 顯 示 屬 性 . 同 樣 的 序 列 可 以 設 置 一 個 或 多 個 屬 性 .

ECMA-48 Mode Switches ECMA-48模 式 選 擇
ESC [ 3 h

DECCRM(默 認 關 閉 ): 顯 示 控 制 字 符 .

ESC [ 4 h

DECIM(默 認 關 閉 ): 設 置 插 入 模 式 .

ESC [ 20 h

LF/NL(默 認 關 閉 ): 自 動 在 CR後 加 上 LF,VT 或 者 FF.

ECMA-48 狀 態 報 告 命 令 .
ESC [ 5 n 設 備 狀 態 報 告 (DSR): 以 ESC [ 0 n 應 答 (終 端 準 備 好 ).
ESC [ 6 n 光 標 位 置 報 告 (CPR): 以 ESC [ y ; x R 應 答 , 這 裏 x,y 指 光 標 位 置 .

DEC Private Mode(DECSET/DECRST)sequences DEC私 有 模 式 序 列 . 這 裏 給 出 的 序 列 在 ECMA-48中 沒 有 描 述 .我 們 列 出 了 設 置 模 式 序 列 ; 用 l替 換 最 後 一 個 h就 是 重 設 模 式 序 列 .
ESC [ ? 1 h

DECCKM(默 認 關 閉 ): 打 開 時 光 標 鍵 送 出 ESC O 前 綴 , 而 不 是 ESC [.

ESC [ ? 3 h

DECCOLM(默 認 = 80 行 ): 交 替 選 擇 80/132 行 模 式 .當 原 顯 示 模 式 不 足 以 滿 足 要 求 的 時 候 ,象 resizecons(8) 這 樣 的 用 戶 程 序 會 改 變 終 端 顯 示 卡 的 硬 件 註 冊 .

ESC [ ? 5 h

DECSCNM(默 認 關 閉 ): 設 置 視 頻 反 轉 模 式 .

ESC [ ? 6 h

DECOM(默 認 關 閉 ): 打 開 時 ,光 標 位 置 用 相 對 於 滾 動 條 左 上 角 的 位 置 表 示 .

ESC [ ? 7 h

DECAWM(默 認 關 閉 ): 打 開 自 動 換 行 .在 這 種 模 式 下 ,一 行 中 超 過 80列 的 字 符 將 自 動 換 行 (在 DECCOLM打 開 時 是 132列 ).

ESC [ ? 8 h

DECARM(默 認 關 閉 ): 打 開 鍵 盤 自 動 重 複 .

ESC [ ? 9 h

X10 鼠 標 報 告 (默 認 關 閉 ): 設 置 報 告 模 式 1(或 者 重 設 爲 0)- 見 下 文 .

ESC [ ? 25 h

DECCM(默 認 打 開 ): 設 置 光 標 可 見 .

ESC [ ? 1000 h

X11 鼠 標 報 告 (默 認 關 閉 ): 設 置 報 告 模 式 2(或 者 重 設 爲 0)- 見 下 文 .

Linux Console Private CSI Sequences Linux控 制 檯 私 有 控 制 序 列 下 面 的 序 列 既 不 屬 於 ECMA-48 字 符 也 不 屬 於 VT102.它 們 只 在 Linux控 制 檯 上 使 用 .顏 色 採 用 SGR 參 數 : 0 = 黑 色 ,1 = 紅 色 ,2 = 綠 色 ,3 =褐 色 ,4 = 藍 色 ,5 = 洋 紅 ,6 = 孔 雀 藍 ,7 = 白 色 .

CHARACTER SETS 字 符 集

內 核 可 以 完 成 以 下 四 種 字 符 轉 換 ,使 字 符 能 在 屏 幕 上 顯 示 . a)Latin1 -> PC,b)VT100 graphics -> PC,c)PC -> PC, d)user-defined(用 戶 自 定 義 ). 有 兩 種 字 符 集 設 置 ,以 G0 和 G1定 義 ,當 前 字 符 集 必 定 是 其 中 之 一 .(初 始 化 爲 G0.)鍵 入 ^N 使 G1 成 爲 當 前 字 符 集 ,鍵 入 ^O 使 G0 成 爲 當 前 設 置 . 變 量 G0 and G1 指 向 字 符 映 射 關 係 表 ,並 且 這 種 指 向 關 係 可 以 由 用 戶 改 變 . 系 統 初 始 化 時 它 們 分 別 指 向 表 a)and b). 序 列 ESC( B ,ESC( 0 ,ESC( U 和 ESC( K 分 別 使 G0 指 向 字 符 映 射 表

a),b),c)和 d). 序 列 ESC )B ,ESC )0 ,ESC )U 和 ESC )K 分 別 使 G1 指 向 字 符 映 射 表 a),b),c)和 d). 序 列 ESC c 重 置 一 個 終 端 ,當 屏 幕 顯 示 出 現 混 亂 時 可 以 使 用 這 個 序 列 . 另 一 個 序 列 "echo ^V^O" 僅 僅 將 G0設 爲 當 前 字 符 集 ,但 並 不 保 證 G0 指 向 映 射 表 a). 有 的 Linux發 行 版 中 提 供 一 個 叫 做 reset(1) 的 程 序 用 來 送 出 序 列 "echo ^[c". 如 果 你 的 系 統 終 端 變 量 沒 有 錯 誤 ( rs1=\Ec), 那 麼 使 用 "tput reset"也 可 以 達 到 同 樣 效 果 . 用 戶 自 定 義 映 射 表 可 以 用 程 序 mapscrn(8). 定 義 .這 個 程 序 工 作 時 會 將 送 入 的 字 符 c通 過 關 係 式 s=map[c]映 射 到 字 符 s然 後 送 入 顯 存 .字 符 s所 對 應 的 位 圖 放 在 字 符 ROM裏 面 ,可 以 使 用 程 序 setfont(8). 來 改 變 .

MOUSE TRACKING 鼠 標 軌 跡

鼠 標 軌 跡 工 具 可 以 返 回 與 xterm 兼 容 的 鼠 標 狀 態 報 告 .因 爲 控 制 檯 驅 動 沒 有 辦 法 知 道 鼠 標 類 型 ,只 有 當 虛 擬 終 端 驅 動 接 收 到 鼠 標 輸 入 輸 出 消 息 更 新 時 纔 會 將 這 些 報 告 返 回 給 控 制 檯 輸 入 流 ..這 些 鼠 標 輸 入 輸 出 消 息 由 gpm(8) 守 護 進 程 產 生 . 所 有 鼠 標 軌 跡 轉 義 序 列 參 數 由 xterm 編 碼 成 象 value+040 這 樣 的 單 一 字 符 形 式 的 數 字 參 數 .比 如 ,’!’ 編 碼 成 1.屏 幕 座 標 系 統 以 ’1’爲 基 準 .

X10 兼 容 模 式 在 鼠 標 鍵 按 下 時 將 按 下 的 鍵 和 鼠 標 位 置 編 碼 後 送 出 . ESC [ ? 9 h 允 許 這 一 動 作 ,ESC [ ? 9 l禁 止 這 一 動 作 . 有 鍵 按 下 時 ,xterm 送 出 ESC [ M bxy(6 個 字 符 ).這 裏 b 代 表 鍵 -1,而 xy 是 鼠 標 的 x 和 y 座 標 .這 和 內 核 產 生 的 序 列 相 同 . 常 規 的 軌 跡 模 式 (Linux 2.0.24不 再 支 持 )在 左 右 兩 鍵 同 時 按 下 然 後 釋 放 時 送 出 轉 義 序 列 .組 合 鍵 編 碼 也 被 送 出 .ESC [ ? 1000 h 允 許 這 個 動 作 而 ESC [ 1000 l 禁 止 這 個 動 作 .當 有 鍵 按 下 或 者 釋 放 時 , xterm 送 出 ESC [ M bxy.b 的 低 兩 位 對 按 鍵 信 息 編 碼 : 0=鼠 標 鍵 1按 下 ,1=鼠 標 鍵 2 按 下 ,2=鼠 標 鍵 3 按 下 ,3=釋 放 . 高 位 編 碼 代 表 組 合 鍵 ,和 上 述 編 碼 一 起 送 出 : 4=Shift,8=Meta(Alt),16=Control(Ctrl).xy爲 發 生 鼠 標 事 件 的 x和 y座 標 .以 左 上 角 爲 (1,1).

和 其 它 終 端 的 比 較

我 們 已 經 討 論 了 幾 種 終 端 類 型 ,比 如 Linux 控 制 檯 .這 類 終 端 稱 爲 "VT100兼 容 "的 終 端 .這 裏 我 們 再 介 紹 其 他 兩 種 重 要 的 終 端 類 型 : DEC VT102 和 xterm(1) 以 及 他 們 和 Linux控 制 終 端 的 區 別 .

Control-character handling 控 制 字 符 處 理
vt102 也 使 用 以 下 控 制 序 列 :

NUL(0x00)忽 略 ;

ENQ(0x05)觸 發 應 答 消 息 ;

DC1(0x11,^Q,XON)繼 續 傳 送 ;

DC3(0x13,^S,XOFF)使 vt100 忽 略 (並 停 止 傳 送 ) 除 XOFF and XON 以 外 的 一 切 字 符 .

VT100-like DC1/DC3 進 程 可 以 由 tty 驅 動 激 活 . 程 序 xterm

(在 vt100 模 式 中 )使 用 控 制 序 列 BEL,BS,HT,LF,VT,FF,CR,SO,SI,ESC.

Escape sequences 轉 義 序 列
VT100 控 制 檯 序 列 不 完 全 支 持 Linux控 制 檯 序 列 :

程 序 xterm (vt100 模 式 )承 認 ESC c,ESC # 8,ESC >,ESC =, ESC D,ESC E,ESC H,ESC M,ESC N,ESC O,ESC P ...ESC ESC Z(以 [ ? 1 ; 2 c,’I am a vt100 with advanced video option’迴 應 ) 以 及 ESC ^ ...ESC 意 義 同 上 . 接 受 ESC(,ESC ),ESC *,ESC + 後 跟 0,A,B 的 字 符 序 列 ,分 別 代 表 的 DEC 特 殊 字 符 ,畫 線 設 置 ,UK 和 US ASCII碼 . 接 受 ESC ] 作 爲 特 定 資 源 設 置 :

以 下 字 符 的 含 義 略 有 不 同 ::

它 還 接 受 以 下 序 列 :

它 不 識 別 ESC % ...

CSI Sequences CSI 序 列 程 序 xterm (直 到 XFree86 3.1.2G)不 能 識 別 閃 爍 或 者 不 可 見 模 式 的 SGR值 .X11R6 也 不 能 識 別 以 SGRs 爲 參 數 設 置 的 色 彩 . xterm 可 以 識 別 其 他 的 ECMA-48 CSI 序 列 ,只 要 Linux可 以 識 別 . 反 之 亦 然 .

xterm 可 以 識 別 以 上 列 出 的 所 有 DEC 私 有 序 列 ,但 是 不 包 括 Linux 私 有 模 式 序 列 . 在 Xterm Control Sequences 中 有 關 於 xterm 的 私 有 模 式 序 列 的 討 論 .

document by Edward Moy and Stephen Gildea,available with the X distribution.

BUGS

在 版 本 爲 2.0.23 的 內 核 中 ,CSI 序 列 的 識 別 有 些 問 題 : 不 能 識 別 轉 義 序 列 中 的 NUL.

參 見

console(4), console_ioctl(4), charsets(7)

本 頁 面 中 文 版 由 中 文 man 手 冊 頁 計 劃 提 供 。 中 文 man 手 冊 頁 計 劃 : https://github.com/man-pages-zh/manpages-zh