twittering-modeでアイコン画像が表示されない?

twitterを始めてまず思ったのは、Emacs (NTEmacs 22.2.1) 上でツイートしたいということ。すでに twittering-mode.el という拡張 lisp があるので早速インストールしてみた。

まず twittering-mode の公式サイトよりパッケージの圧縮ファイル(今回は、twittering-mode-1.0.0.zip)をダウンロードする。解凍すると色々ファイルがでてくるが、Emacs 22 以降なら twittering-mode.el だけで十分である。これをパスが通ったディレクトリにコピーする。

あと、.emacs に以下にように記し、起動時にライブラリがロードされるようにし、M-x twittering-mode とする。


(require 'twittering-mode)

すると、ブラウザを通じて認証を行うので、「許可する」を押し PIM コードを表示させる。PIM コードを Emacs のミニバッファーにコピーすると認証が完了して、twittering-mode が起動する。キーバインドなどは、付属のドキュメントを参照されたい。



さて、本題はここからで、私の環境ではアイコンの画像が表示されなかった。ImageMagick は正常にインストールされており、他のモードでは画像のインライン表示はできている。また、twittering-mode でも、この点以外は問題がない。はて、これはどういった原因か?

"mailcap-parse-mailcaps" がないというエラーがでていた。twitter 上の助けを受けて、色々調べた結果、gnus/mailcap.el(twittering-mode.el が使う)と film/mailcap.el が同名のため、後者がロードされてしまっていることが原因のようだ。

では、これをどう解決するか。上記の mailcap.el は別物なので、片方を消すわけにはいかない。さいわい outputz.el という拡張でも同様の問題が生じており(ここを参照)、解決策がとられているのを知った。

すなわち twittering-mode.el における "(require 'url)" 以下に、次のような文字列を加える。


(require 'url)
;; hack ここから
(unless (fboundp 'mailcap-parse-mailcaps)
(block nil
(dolist (path load-path)
(when (or (file-exists-p (expand-file-name "mailcap.el" path))
(file-exists-p (expand-file-name "mailcap.elc" path)))
(load (expand-file-name "mailcap" path)))
(when (fboundp 'mailcap-parse-mailcaps)
(return)))))
;; hack ここまで

これは「(require 'url) の後に mailcap-parse-mailcaps という関数が束縛されてなかったら、 load-path にある mailcap を全部ロードする」という意味である。

これでアイコン画像がぶじ表示された。よかったよかった。