under the control

コードポイント U+0000 から U+001F はいわゆる制御文字とかコントロールコードと呼ばれる文字を表す。

この中で、今日日プレーンテキスト内によく使われるのは CR、LF、TAB、FF、VT くらいで、その他の文字はほとんど使われることはないのだけど、それでもなお存在はしている。

vi では、入力モード中や ex コマンド入力中に特別なシーケンスを用いて制御文字を入力することができる。まず ^V を押し、次に入力したい文字を押す(U+0000 から U+001F までは ^@ から ^_ に対応している)。

textarea に書き込むテキストにもまた、それらの制御文字が必要だとは思えないが、wasavi でも ^V によるエスケープを用いた入力に対応している。ただし、vim のように ^V + 8 進数によるコードポイント入力には未対応。

さて入力できたとして、それをどう表示するかが問題になる。本来は表示上も ^K とかいう形式にしたいのだが、wasavi では 1 行の表示はブラウザ任せなので、なかなかそこまで制御できない。制御文字に対応する部分を
^K
のような形にすればいいのだが、まだそこまでやっていない(編集するテキストが span によって分割されていることを前提にするのは、たぶんシンタックスハイライティングの実装とセットになるので)。

そこで、Unicode には Control Pictures というものがあるので、とりあえず wasavi が管理するバッファ内の制御文字は U+0000 -> U+2400 みたいな変換を施して保持している。もちろんバッファ内のテキストを外部に出力する際は本来の制御文字に逆変換する。

ただ、これだと Control Pictures の各文字が等幅じゃなかったり、ブラウザによって見た目が違ったり、下手すると表示されなかったり、制御文字ではなく U+2400 ~ U+241F そのものを扱えなかったりするわけなので、まあ本当に「とりあえず」の仕様だ。

ところで「等幅」の読みって「とうふく」だと長年思っていたら、なんかググると「とうはば」らしいですよ。大ショック。

Leave a Reply

Your email address will not be published. Required fields are marked *