Emacsでドットエディターを作ってみた

ちょっとドット絵を作りたくなったが、適当なツールが思い付かなかった。Windowsの「ペイント」しか思い付かなかったが、それだけのためにWindowsを起動するのは負けのような気がした。
手元で動いているのはMacBookである。「ペイント」に相当するくらいのアプリケーションはプレインストールされているような気がするが、筆者はMacに疎いのである。少なくとも「アプリケーション」の中を眺める限り、それだとわかるものは無い。GIMPはインストールしているのだが、マウスが無いのでしんどそうだし、それだけのために重いGIMPを起動するのも負けのような気がした。

目の前ではCarbon Emacsが動いていた。ふと、Emacs Lispで(if (looking-at ...))とかやれば、1キーで白黒反転するマクロが簡単に書けるのではないか…と思って、やってみたら、思ったより使い易かったので、もう少し進めてみた。

doteditor.el(漢字コードはEUC)

■起動方法
M-x load-fileまたは(load-file)で上のファイルを開き、M-x dot-editor-mode

■キーバインド
SPC: カーソル位置の□と■の反転
M-r: 選択領域の□と■の反転
M-c: 指定サイズの矩形領域を□で作成
M-e: 選択領域をビットマップとみなして16進数に変換したものを、選択領域の直後に挿入
M-d: 選択領域の16進数を□と■のビットマップに変換したものを、選択領域の直後に挿入
M-p: 選択領域の16進数をPBM形式の画像データにしたものを、tmp.pbmというバッファに作成 & image-modeが使用可能ならそれでプレビュー

■使用例1
1. M-cとし、width, heightに32, 24を入力
 → □が32x24個挿入される
2. 編集

□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□■■■■■■■■□□□□□□□□□□□□
□□□□□□□□□■■■■■■■■■■■■■■□□□□□□□□□
□□□□□□□□■■■■■■■■■■■■■■■■□□□□□□□□
□□□□□□□■■■■■□■■■■■■□■■■■■□□□□□□□
□□□□□□■■■■■■■■■■■■■■■■■■■■□□□□□□
□□□□□□■■■■■■■■■■■■■■■■■■■■□□□□□□
□□□□□■■■■■■■■■□□□□■■■■■■■■■□□□□□
□□□□■■■■■■■■■■■■■■■■■■■■■■■■□□□□
□□□□■■■■■■■■■■■■■■■■■■■■■■■■□□□□
□□□■■■■■■■■■□□□□□□□□■■■■■■■■■□□□
□□□■■■■■■■■□□□□□□□□□□■■■■■■■■□□□
□□■■■■■■■□□□□□□□□□□□□□□■■■■■■■□□
□■■■■■■■□□□□□□□□□□□□□□□□■■■■■■■□
□■■■■■■■□□□□□□□□□□□□□□□□■■■■■■■□
□■■■■■■□□□□□□□□□□□□□□□□□□■■■■■■□
■■■□■■■□□□□□□□□□□□□□□□□□□■■■□■■■
■■■□■■■□□□□□□□□□□□□□□□□□□■■■□■■■
■■■□■■■□□□□□□□□□□□□□□□□□□■■■□■■■
■■□□□■■■□□□□□□□□□□□□□□□□■■■□□□■■
■■□□□■■□■■■■■■□□□□■■■■■■□■■□□□■■
□□□□□□□■□□□□□□■■■■□□□□□□■□□□□□□□
□□□□□□□□■■■■■■□□□□■■■■■■□□□□□□□□

3. ビットマップ全体を選択し、M-e
00000000
00000000
000ff000
007ffe00
00ffff00
01f7ef80
03ffffc0
03ffffc0
07fc3fe0
0ffffff0
0ffffff0
1ff00ff8
1fe007f8
3f8001fc
7f0000fe
7f0000fe
7e00007e
ee000077
ee000077
ee000077
c70000e3
c6fc3f63
0103c080
00fc3f00

4. 16進データを選択し、M-pで表示確認

5. 16進データを保存

■使用例2
1. 16進テキストのビットマップデータを読み込む

00, 00, 00, 00,
00, 07, f8, 00,
00, 1f, fe, 00,
00, 3f, ff, 00,
00, 7f, ff, c0,
00, ff, e7, f0,
01, ff, ff, fc,
01, ff, ff, e0,
03, ff, ff, e0,
03, ff, ff, d0,
03, ff, ff, d0,
07, ff, ff, 10,
07, ef, be, 08,
07, ef, be, 08,
07, df, bc, 08,
07, df, 78, 08,
07, df, 78, 08,
0f, de, f8, 10,
0f, dd, f0, 10,
1f, dd, f0, 10,
1f, ed, f0, 20,
3d, f3, e0, 40,
38, f3, e1, e0,
60, 3f, ff, f0,

2. データ全体を選択し、M-d
(0-9, a-f, A-F以外の文字は無視されるのでカンマはそのままで良い、"0x"があるとその"0"が展開対象になるので注意)
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□■■■■■■■■□□□□□□□□□□□
□□□□□□□□□□□■■■■■■■■■■■■□□□□□□□□□
□□□□□□□□□□■■■■■■■■■■■■■■□□□□□□□□
□□□□□□□□□■■■■■■■■■■■■■■■■■□□□□□□
□□□□□□□□■■■■■■■■■■■□□■■■■■■■□□□□
□□□□□□□■■■■■■■■■■■■■■■■■■■■■■■□□
□□□□□□□■■■■■■■■■■■■■■■■■■■■□□□□□
□□□□□□■■■■■■■■■■■■■■■■■■■■■□□□□□
□□□□□□■■■■■■■■■■■■■■■■■■■■□■□□□□
□□□□□□■■■■■■■■■■■■■■■■■■■■□■□□□□
□□□□□■■■■■■■■■■■■■■■■■■■□□□■□□□□
□□□□□■■■■■■□■■■■■□■■■■■□□□□□■□□□
□□□□□■■■■■■□■■■■■□■■■■■□□□□□■□□□
□□□□□■■■■■□■■■■■■□■■■■□□□□□□■□□□
□□□□□■■■■■□■■■■■□■■■■□□□□□□□■□□□
□□□□□■■■■■□■■■■■□■■■■□□□□□□□■□□□
□□□□■■■■■■□■■■■□■■■■■□□□□□□■□□□□
□□□□■■■■■■□■■■□■■■■■□□□□□□□■□□□□
□□□■■■■■■■□■■■□■■■■■□□□□□□□■□□□□
□□□■■■■■■■■□■■□■■■■■□□□□□□■□□□□□
□□■■■■□■■■■■□□■■■■■□□□□□□■□□□□□□
□□■■■□□□■■■■□□■■■■■□□□□■■■■□□□□□
□■■□□□□□□□■■■■■■■■■■■■■■■■■■□□□□

3. 編集
以下略


やはり何でもテキストエディターで編集できるのが良い。