CSI
Control Sequence Introducer
CSIシーケンスはターミナル制御の中核であり、最も頻繁に使われる。
フォーマット
code:_
CSI = ESC [
完全な形式: ESC [ <パラメータ> <中間バイト> <最終バイト>
パラメータ: 0x30–0x3F (数字, ;, <, =, >, ?)
中間バイト: 0x20–0x2F (スペース, !, ", # など)
最終バイト: 0x40–0x7E (アルファベット, @, [ など)
カーソル移動
table:_
シーケンス バイト列 動作
CSI n A \x1b[3A カーソルをn行上へ (例: 3行上)
CSI n B \x1b[3B カーソルをn行下へ
CSI n C \x1b[3C カーソルをn列右へ
CSI n D \x1b[3D カーソルをn列左へ
CSI n ; m H \x1b[10;20H カーソルを行n・列mに移動 (例: 10行20列)
CSI n d \x1b[5d カーソルを行nに移動(列は変えない)
CSI n G \x1b[10G カーソルを列nに移動(行は変えない)
CSI s \x1b[s カーソル位置を保存
CSI u \x1b[u カーソル位置を復元
code:_
# 具体的なバイト列の16進数表記
カーソルを(1,1)に移動:
1B 5B 31 3B 31 48
↑ ↑ ↑ ↑ ↑ ↑
ESC [ 1 ; 1 H
カーソルを5行上に移動:
1B 5B 35 41
ESC [ 5 A
パラメータ省略時はデフォルト値(通常1)が使われる:
\x1b[A → カーソルを1行上に移動 (n=1)
\x1b[H → カーソルを(1,1)に移動 (n=1, m=1)
消去
table:_
シーケンス バイト列 動作
CSI 0 J \x1b[0J or \x1b[J カーソルから画面末尾まで消去
CSI 1 J \x1b[1J 画面先頭からカーソルまで消去
CSI 2 J \x1b[2J 画面全体を消去
CSI 3 J \x1b[3J 画面全体+スクロールバック消去
CSI 0 K \x1b[0K or \x1b[K カーソルから行末まで消去
CSI 1 K \x1b[1K 行頭からカーソルまで消去
CSI 2 K \x1b[2K 行全体を消去
スクロール領域
code:_
CSI t ; b r → スクロール領域を行t〜行bに設定
例: \x1b[5;20r → 5行目から20行目をスクロール領域に設定
モード設定 (DECSET/DECRST)
CSI ? n h でモードを有効化、CSI ? n l で無効化する。? はプライベートモードの指標。
table:_
シーケンス 動作
\x1b[?1h カーソルキーをアプリケーションモードに (DECCKM)
\x1b[?7h 自動折り返し有効 (DECAWM)
\x1b[?12h カーソル点滅有効
\x1b[?25h カーソル表示 (DECTCEM)
\x1b[?25l カーソル非表示
\x1b[?1049h 代替スクリーンバッファ有効
\x1b[?1049l 代替スクリーンバッファ無効
\x1b[?2004h Bracketed Paste Mode 有効
\x1b[?2004l Bracketed Paste Mode 無効
デバイスステータスレポート
code:_
CSI 6 n → カーソル位置レポート要求
ターミナルは CSI row ; col R で応答する
例: カーソルが(10, 20)にある場合 → \x1b[10;20R を入力側に返す
CSI c → デバイス属性 (DA) 要求
例: \x1b[?62;22c のように応答