エスケープシーケンス

プログラム中に改行やタブを挿入するときなどに使うエスケープシーケンス。

エスケープシーケンス - Wikipedia

これによると、実はエスケープシーケンスは3種類あって、

  • 改行などのエスケープコード(エスケープ文字)
  • 文字集合の指示・呼び出しのシーケンス(特殊な文字・漢字コード?)
  • 入力位置などを操作する画面制御シーケンス(画面制御コード)

となっているらしい。
で、今回は、

  • 改行などのエスケープコード
  • 入力位置などを操作する画面制御シーケンス

の2つを扱う。
(特殊文字はいまのところちょっと使わなそう・・・。)

特に、今回のキモは画面制御シーケンスである。
まず、terminalを起動して、"Ctrl + v"を押した後、"Esc"を押す。
すると、

$ ^[

と入力される。でこのあとに、"["を入力し、さらに特定の数字と文字で表されたコードを入力する。

https://www.kushiro-ct.ac.jp/yanagawa/ex-2017/2-game/01.html#escseq

コード表を参考に入力してみると、

テキストの色、背景色、リセット
テキストの色、背景色、リセット

テキストの色を変えたり、背景色を変えたり、リセットできる。

3行戻るコマンド
3行戻るコマンド

これを入れると、

戻っている
戻っている

カーソルが戻っている。(3行かは微妙・・・。)

3行前から入力
3行前から入力

戻ったところから入力出来たり・・・。

2Jで画面クリア
2Jで画面クリア

"^[[2J"で、

クリアされた
クリアされた

画面クリア出来たり・・・。

で、これはC言語でも出来るわけで、

前半はエスケープ文字の、改行、タブ、バックスペース、で簡単に制御している。
10秒後の後半は、画面制御コードでいろいろいじっている。
画面制御コードはprintf中に"\e[31m"(テキスト色を赤に変更)というように指定する。

エスケープ文字
エスケープ文字

まずは、エスケープ文字。
改行、タブはだいたいわかるとして、バックスペースを入れた場合は、直前の文字が消える。

画面制御コード
画面制御コード

10秒後に、画面制御コード。
ポイントは、"m行n列に戻る"というコードは、mもnも1から始まるという点だろうか・・・。0行0列は意味がなかった。
あと、画面をクリアしても、1行1列に戻らないので、自分で戻る必要がある。

Sample/c/escape_sequence/escape_sequence/src/escape_sequence at master · bg1bgst333/Sample · GitHub