制御シーケンスを投げたり実装したりしました。そのあたりを少しメモしておこうと思います。†ふわっと説明します。'\033[31mTEST\033[m\n'こうすると、TESTという「赤い文字」が出力されます。文字コード指定するために数字をエスケープ(\)しています。ascii"コマンドがある環境の方は文字コード一覧が見れますが、033だと8進数。これを16進数で表すと0x1b、10進数なら27番を指定するとESCです。検索すると出てきます。マニュアルが見れました。これらを日本語でWeb検索すると、大抵はTeraTermのヘルプマニュアルに行き着くと思います。Unix/Linuxで使われる制御コードの大本(おおもと)になるのが、ECMA48やら、VT100やらという規格らしいのです(=ふわっとした理解)。コマンドの概要が知りたい場合はTeraTermヘルプの「制御シーケンス」の項が、コマンドの詳細な説明が必要な際はECMA48関連のサイトでコマンド一覧をダウンロードしたり、VT100関連のサイトからそのコマンド名で検索するのが早いと思います。文字の色を変えたり、カーソル位置を変えたり、ウィンドウのサイズを変えたり、色々できるようになります。実行ファイルやディレクトに色がついたり、*4見出し部分が白黒反転表示されるようになりました。各コマンドで、カラー対応のものはTERMを見ながら色関連の制御シーケンスを使うかどうか判断しているのだと思います。これがTERM=vt100だと、色数が減ったりモノクロになったりする可能性が高いです。モノクロの方が(情報量が減るので)処理は軽くなると思います、たぶん。色情報は抜け落ちて、テキストだけになると思います。コマンドや、TeraTermだと「バイナリ」オプション付きで、とにかく、出力を全てナマのまま拾うと、制御シーケンスもぜんぶ載ってきます。ESCは文字化け(印字できない)かもしれませんが。ちなみにバックスペースボタンを押した時も(文字削除ではなく)バックスペースとしてログに載りますね。最初に戻って、文字の色を変える制御シーケンスの例です。いうのが色を指定する命令で(SGR)31番は「文字を赤に」です。41番だと「背景を赤に」になります。「文字属性をリセット」です。打ち忘れると、文字が真っ赤なままになってしまいます。'\033[m'」して下さい。同じ行の文章を時間経過で更新、みたいなことができます。以下、毎秒表示の変わるshellスクリプトの例です。して、実行しみて下さい。Ctrl+Cで中断します。中断した時に元に戻す処理が必要かもしれないですね。以下、もっと複雑な感じの例。使う制御シーケンスを増やしました。罫線の記号が、色を変えながらくるくる回ります。doneここまでやらないにしても、カーソル移動して、同じ行で上書きするだけでも、少し表示が楽しくなります。そもそも前述の、キーボードのバックスペースボタンを押した時の動作もscriptコマンドとかで見ると「左に戻る、スペースで上書き、左に戻る」っていう3段階の動作をしているんですよね。それとやっていることは大して変わりません。別の例で、もうすこしこまかく説明してみます以下、画面サイズを変える場合の例です。t」という命令を使います。ターミナルだとxterm。xtermやらvttermやらをエミュレートする有名なアプリしてTeraTermがあります)OSやらリモートのサーバやらに画面サイズ変更の制御を投げます。画面サイズいっぱいに文字列を表示するようなコマンドは画面の縦横幅にあわせて、ターミナルへ送り込む内容・文字数を調整しています。画面表示がはみ出たり崩れたりすることになるわけです。画面サイズを変えたタイミングで、ターミナルが上記のような制御シーケンスを自動で送ってターミナル側の大きさを自己申告しているからです。ウィンドウの大きさが変わったりして驚くと思います。制御シーケンスは画面に表示せずに処理される場合がほとんどです。topやviコマンドを使うと、画面には表示されませんが、たくさんの制御シーケンスをターミナルが受け取っています。各コマンドは相手のターミナルを環境変数TERMで判別します(するはず)。「ターミナルへ文字の色を細かく指定(ESC[38;2;赤;緑;青m)したかったけど、この制御方法はTERM=vt100だと未対応だから、やっぱり色は変えずに表示しよう」といった制御シーケンスの使い分けが発生することになります。制御シーケンスの文法は各命令ごとに決まっていて、ESC以外のたった一文字で完結する場合や(C1制御文字)特定の文字を制御の終端とする場合(OSCシーケンスなど)、それぞれのルールによって書式や長さが異なります。書式については、まずは使うものだけ調べればいいと思います。やるなら、どんな制御があるのか一通り見てみるのも良いかと。r)やソフトリセット(DECSTR)による初期化とか)ターミナルが対応していればマウスのクリックイベントを拾うこともできて、たとえばCUI上でも動く「テキストベースのWebブラウザ」で使われています。内容が滅茶苦茶な命令によってターミナルの挙動がおかしくなってしまうといった場合あります。†...ここからは特殊な事情、趣味を抱える方に向けて。制御シーケンスを投げるときではなく、受け取った時にどうするかつまり、端末エミュレータ的なものを実装する時に考慮しなければならない話です。読む制御シーケンスには触れないようにするライブラリは、自分の使うプログラミング言語に合わせて、いわゆるvt100エミュレータ的なやつを探せば、色々と見つかります。それらが制御シーケンス部分をいい感じに処理して、標準入出力との橋渡しをしてくれるはずです。(キーボードの入力をサーバに渡せる形にしたり、サーバからの応答を画面に出力できる段階まで翻訳してくれたり)vt100?...俺はvt410が無いと嫌だ!という方は、エミュレータなど使わず、VT410(実機)を買えばいいと思います。各コマンドの説明(英語)を見ることでようやく、具体的な仕様が分かってくるわけですが、それ以前に、実装例と言うか、雰囲気とか、心意気とか、そういうのが無いと、辛いので。間に一枚コマンドをはさんで)制御シーケンスを処理したあとのテキストを、ややリアルタイム気味に読めば良いのでは?というお話です。用途によっては、あまり対話式処理にこだわらないほうが良い気がします。実装の対象とする制御コードは、まずは自分が使うやつだけで良いと思います。最初はカーソル移動と、行(K)と画面(J)の削除があれば十分でしょう。それよりも先に、バックスペース、CR、LF、Auto-Wrap*11の扱いで戸惑うのではないでしょうか。invisible-island.net/xterm/ctlseqs/ctlseqs.htmlそれにともなって、動作確認に使うコマンドも徐々に複雑にすれば良いかと(くじょうはうけつけません。コマンドスクロールできるようにしましょう。直に渡せるのは8進数っぽいですね。画面端から更に上にカーソル移動が発生した場合、カーソルが止まるのか、画面がスクロールするのかという詳細な説明は本家のサイトを探すことになります。自力、車輪の再発明はほんとうに辛いのでオススメできません...まぁ、楽しかったですけどね。何かコマンドを実行して即ログアウト、の場合は制御シーケンスは要りません。CRはカーソルを左へ、LFはカーソルを次の行へ、二つ合わさってはじめて一般的にイメージする改行(次の行の左端へ)になります。私の場合は...色々ありますが、ハイライトマウスは怖いから実装していないのと、実装したけど諦めているのが文字コード関連です。使用して作成しています。使用しています(このサイトについて)。