2007-08-21

Emacs 22で日本語isearchをするときはMule-UCSが邪魔

先月emacs22がportsの標準となったので、今月になって手元のマシンでもアップデートしたが、特に問題も見当たらず順調に動いていた。しかし、編集していたファイルで、たまたま日本語のサーチをしたくなり、isearchで日本語を入れたところ、

I-search: [か] あ [(error Invalid character: 131072, #o400000, #x20000)]
のようなエラーが出て、目的のサーチが一切できなくなっていた。

見てのとおりSKKの環境でもあるので、考えられる原因が複数あり、とりあえずエラーメッセージでググる。出てきたのは、Meadowのtrac内のバグ報告と、メーリングリストの記事

バグ報告の方は、同様にSKKを使っている場合のようで、Mule-UCSをはずすととりあえず回避できるとある。そういえば、Emacs 22はUnicodeをきちんとサポートしているので、Mule-UCSの機能とかぶるような気もする。そのあたりが原因か?で、~/.emacs内のjisx0213をrequireしてる部分をコメントアウトしてみたら、たしかに問題なくサーチできるようになった。

その後いろいろ試すと、ファイルのcoding-systemにも依存するようで、sjisだと問題が起きない。eucだと確実に起きる。jisだと最初は問題ないが、一度問題が出るとその後も出るという感じ(正確ではないかも)。

メーリングリストの記事では、euc-jisx0213がどうのと書かれているので、やはりeucに関係があるのか。しかし、それに続くスレッドでは、Mule-UCSがなくても同じ問題が発生する手順が示してあり、Emacs 22でも同様の結果になった。

当面の使用では、Mule-UCSをはずしておけば問題は発生しないだろうが、ちゃんと直ってほしいところ。あと、Emacs 22ならMule-UCSって使わなくても済むのかな。

2007-08-03

fontconfigアプリケーションのフォント設定

最近gnucash 2.2.0が出たのでちょっと遊んでみようとしたが、まあ日本語化がほとんどできていない(1.xのころの訳がそのまま放置されてる感じ)のはいいとして、フォントがギザギザして見た目がなんとも不恰好。同じfontconfigを使っているはずのfirefoxやopenoffice.orgはちゃんとアンチエイリアシングがかかってるのに。そういえば、インストールだけして使ってないgimpとか、mousepadとかもギザギザしている。

で、原因を調べるうちに、japanese/ipa-ttfontsを入れるとついてくる /usr/local/etc/fonts/conf.d/62-fonts-ipattfonts.confのsans-serifからIPAPGothicとIPAUIGothicの行を消してみると、当然M+フォントになってしまうもののきちんとアンチエイリアスされたフォントが表示されることがわかった。ということは、オリジナルのIPAフォントに含まれている組込ビットマップが表示されてしまっているだけという感じである。

あとは、~/.fonts.confあたりをいじればいいんだろうということで、書体関係 Wiki - X でのフォント設定を参考に、

<match target="font">
<test name="family" compare="eq">
<string>IPAPMincho</string>
<string>IPAPGothic</string>
<string>IPAUIGothic</string>
<string>IPAGothic</string>
<string>IPAMincho</string>
</test>
<edit name="embeddedbitmap" mode="assign">
<bool>false</bool>
</edit>
<edit name="antialias" mode="assign">
<bool>true</bool>
</edit>
</match>
のように加えたところ、gnucash, gimp, mousepadともアンチエイリアスが有効になった。というか、組込ビットマップフォントを使わなくなった。antialiasの部分は付けなくても同じ。falseにすると当然ギザギザになる。mode="assign"もこの場合はなくても同じ。IPAフォントに限らず全部やりたいという場合は、test要素を省けばよいが、match要素の中に入れておかないと効かない。

ついでにサブピクセルレンダリングは、conf.avail/10-sub-pixel-rgb.confをconf.dにリンクするか、その中身を~/.fonts.confに入れればよい。ただ、rgbかbgrかなどは、クライアント側の問題ではなくサーバ(ディスプレイ)側の問題なんだから、本来ここで固定的に変更するのはおかしいのではないかと思う。

さらにもう一件、以前の記事で、Firefoxでboldを出すにはuserContent.cssをいじって<b>のfont-weightをboldにすればよいと書いたが、あれはやはりただの対症療法だったと悟った。やはりhtml的に<b>の中にさらに<b>を書いてより強調したいようなこともあるかもしれない。なので、問題の本質は、1回の<b>でちゃんと太字にならないフォント処理側にあって、css側にあるわけではない。

解決は同様に~/.fonts.confでできる。
<match target="font">
<test name="weight" compare="less_eq">
<const>medium</const>
</test>
<test target="pattern" name="weight" compare="more">
<const>medium</const>
</test>
<edit name="embolden" mode="assign">
<bool>true</bool>
</edit>
</match>