d.hetima RSSフィード

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 がインストールされている必要があります。

Japanese text in TextMate with custom modified font

追記

小夏フォント というクリエイティブ・コモンズ・ライセンスの日本語フォントを見つけたので Bitstream Vera Sans Mono と合成してみました。フォント名はとりあえず ForMateKonaVe。手っ取り早く試してみたい方はどうぞ。

87分87分 2006/11/03 14:02 ここに書き込むべきコメントではないことを承知で書き込みますが、SafariStandがどうも不調です。
インストール直後は問題ないのですが、しばらく使っていると「ターゲットリンクをタブで開く」が機能しなくなり新規ウィンドウで開くようになってしまいます。再インストールするとその直後は問題ないですが、しばらくするとやはり再現します。これは既知の問題でしょうか。
10.4.8でSafariStand 2.0b16を使用。

hetimahetima 2006/11/03 23:27 2chで似たような書き込みを見た記憶はありますが、うちで再現しないので手の打ちようがありません。

87分87分 2006/11/04 15:35 了解しました。まあコマンドキー使うこと自体は手間でもありませんし。次期ヴァージョンリリース時にまた試してみます。

もぐもぐ 2007/07/11 11:30 日本語化プラグインとForMateKonaVeを使わせて頂いております。TextMateで日本語が使えるようになって最高です。
ときどき、TextMateがフリーズしてしまいOS再起動となる問題が時々起きます。

#! /bin/sh
kill -9 `ps auxww | grep TextMate | grep -v grep | awk ’{print $2}’`
kill -9 `ps auxww | grep ATSServer | grep -v grep | awk ’{print $2}’`

なるスクリプトを書いて、TextMateとATSServer(フォントサーバ?)をkillすることで、なんとかOSフリーズの自体を回避しています。TextMateが固まった時に、急いでこのスクリプトを実行すると、OSフリーズを逃れられます…。
日本語フォントの問題なんでしょうかねぇ…。フォントサーバがクラッシュしてしまうのでしょうか…。

samuraicoder.netsamuraicoder.net 2007/07/17 11:35 TextMateがフリーズしてしまうのはフォントのキャッシュによるもので、おそらく日本語フォントとは関係ない。Allanもこのことは知っています。ほかのエディタでもたまーに起こります。OS側の問題だそうです。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト

コメントを書くには、なぞなぞ認証に回答する必要があります。