2009年3月9日月曜日

Emacs23 で Wanderlust

Emacs23 で Wanderlust で日本語フォルダが扱えなかった。他にネットで似たような情報がなかったので、うちだけの問題なのだろう。けっこうごちゃごちゃいじってあるので、自分でもわけがわからないw
 wl付属のutf7.el を削除すれば直ったというケースもあるようだけど、うちでは無理だった。
凹んだ(×_×)

 でまあ、emacs23になってから utf7 まわりがおかしいのだろうなと思っていたのだけど、wl のデバッグログを眺めていたら、デコードされたフォルダ名の先頭に空白が・・・・・・・・BOMだったorz

原因が判明したのでググって、 /usr/share/emacs/23.0.60/lisp/gnus/utf7.el に以下の変更を。

(defconst utf7-utf-16-coding-system
(cond ((mm-coding-system-p 'utf-16-be-no-signature) ; Mule-UCS
'utf-16-be-no-signature)
((and (mm-coding-system-p 'utf-16-be) ; Emacs 21.3, Emacs 22 (BOM?)
;; Avoid versions with BOM.
(= 2 (length (encode-coding-string "a" 'utf-16-be))))
'utf-16-be)
+ ((and (mm-coding-system-p 'utf-16be) ; Emacs 22 and later
+ ;; Avoid versions with BOM.
+ (= 2 (length (encode-coding-string "a" 'utf-16be))))
+ 'utf-16be)
((mm-coding-system-p 'utf-16-be-nosig) ; ?
'utf-16-be-nosig))
"Coding system which encodes big endian UTF-16 without a BOM signature.")
Emacs23 になって utf-16-beutf-16be になっているせいらしい・・・なんでやねん。

 同じようにwl付属のutf7.elも変更しないといけないのだけど、こちらは ~/.wl にバージョン判定で切り抜けるようにした。

(cond ( (string-match "^23\." emacs-version)
(defconst utf7-utf-16-coding-system
(and (fboundp 'find-coding-system)
(find-coding-system 'utf-16be))
"Coding system which encodes big endian UTF-16.")))

 結果は、見事に動作するようになった。 

・参考
 http://d.hatena.ne.jp/defiant/20081112/1226461505
 http://article.gmane.org/gmane.emacs.bugs/16892

0 件のコメント: