2006-11-02
TextMate で日本語をわりとまともに表示する
TextMate という Mac OS X のエディタがあるんです。Mac でプログラミングの screencast やってたらまず間違いなくこれが使われています。今やエディタの定番であり Mac のキラーアプリケーションなのです。ぐぐってみるとみんなベタ褒め。唯一の欠点は「日本語が駄目」ということだけ。……これが致命的なんですよね。
「日本語が駄目」な理由はふたつあって、
- 入力をまったく受け付けてくれない
- 文字が重なって表示され非常に読みにくい、選択しにくい
入力に関してはダイアログを出すという方法でなんとかしたり、他からペーストしたりで、まあなんとかなるのですが(わりとシームレスに日本語入力できる CJK-Input.tmplugin を作りました)、表示の方は手の出しようがない。このエディタは文字幅をすべて決め打ちで計算しているので、アスキー文字より幅の広い日本語文字も強制的にアスキー文字の幅で描画されます。そのため重なって表示されるのです。これを改善するにはプログラムを根本的に作り直すしかありません。と、思っていました。
今朝、突然閃いたのです。「表示できる幅が限られているなら、文字の幅を変えればいいじゃないか」と。プログラムが変わらないならフォントを変えてしまおうというわけです。
さて、フォントの幅を変えられるのか。フォントエディタはいくつかあるが、手間なく簡単にやってのけられるか。FontForge には スクリプト で一括処理する機能が付いていました。Scale() とか MergeFonts() とか、使えそうな命令も揃ってますね。
日本語フォントのすべてのグリフを変形させて、英語フォントとマージする、という手順でやってみました。
M+ と IPAフォントの合成フォント の中から、半濁点を大きくする修正が施された「M+1VM+IPAG-circle.ttf」と、愛用の Bitstream Vera Sans Mono を合成してみました。
FontForge をインストールし、下記のようなスクリプトを書いて Terminal で実行。
#!/usr/local/bin/fontforge -script
#日本語を細くする
Open("M+1VM+IPAG-circle.ttf"); #日本語フォント
SelectAll()
foreach
Scale(130, 200, 0, 0) #横1.3倍、縦2倍
endloop
Generate("temp.ttf", "", 0x14) # 0x14は適当、、
Close()
#VeraMonoとMerge
Open("VeraMono.ttf"); #英語フォント
MergeFonts("temp.ttf");
SetFontNames("TextMate-Regular", "TextMate", "TextMate Regular", "Regular", "")
Generate("TextMate.ttf", "", 0x14)
Close()
30秒ほどで新しいフォントが書き出されて、ばっちり使えました。日本語はかなり小さくなるものの、なんとか読める。選択範囲もちゃんと分かる。
で、出来上がったフォントを公開しようかと思ったもののIPAフォントのライセンスがちょっと面倒なので見送ります。みんな VeraMono 使ってるというわけでもないし、TextMate を使うような人ならこれ読んでサクっと作れるだろうし、フォント名も思い付かないし、ということで。Scale() に渡す数値は試行錯誤してください。SetFontNames() は好きな名前を付けてあげてください。
ちなみに FontForge を使用するには X11 がインストールされている必要があります。
追記
小夏フォント というクリエイティブ・コモンズ・ライセンスの日本語フォントを見つけたので Bitstream Vera Sans Mono と合成してみました。フォント名はとりあえず ForMateKonaVe。手っ取り早く試してみたい方はどうぞ。

