NTEmacs 24.2 で google-translate を使う

最近のGoogle 翻訳って、結構使えますね。まあ、ダイレクトに日本語にするのはまだまだ難しいようですが、欧米系の言語だったら英語にしちゃえばそれほど問題なく理解できて便利です。

だから、Emacs 上から Google 翻訳が使える google-translate というのがあると、「これは絶対使いたい!」と思った訳です。ところが、かなり嵌ってしまった。

説明サイトによると、google-translate.el をダウンロードし、load-path が通った場所に置き、~/.emacs に以下を書けばOKなのですが。


;; google-translate.el
(require 'google-translate)
;; キーバインド
(global-set-key "\C-ct" 'google-translate-at-point)
(global-set-key "\C-cT" 'google-translate-query-translate)

自分の環境 (NTEmacs 24.2) では、\C-ct で元の言語を選んで、翻訳先の言語を指定しようとすると、以下のようなエラーが出てしまいます。


Debugger entered--Lisp error: (void-function cl-flet)
(cl-flet ((read-language nil (google-translate-completing-read prompt
[...]

"cl-flet" というのが空だよという意味で、これは Emacs 24.3 で採用されているもののようですが、私の環境では Emacs 24.3 だと skkserver と通信できないので、どうしても Emacs 24.2 で動かさなければならない。

そこで検索した結果、"cl-flet" を "flet" に書き換えればよいというので、google-translate.el の450行目を以下のように変えます。


; (cl-flet ((read-language () ;; コメントアウト
(flet ((read-language () ;; Emacs 24.2 対策

これで翻訳先の言語も指定できるようになったのですが、今度は


Debugger entered--Lisp error: (void-function mailcap-parse-mailcaps)
(mailcap-parse-mailcaps)

というエラーが出るわけです。これは google-translate.el の内部で使われている url.el の問題で、Emacs の組み込みの mailcap.el よりも flim パッケージの mailcap.el が先に読まれてしまうことが原因だとか(参考URL)。

解決策はよく分からなかったが、とりあえず flim の mailcap.el をリネームすれば google-translate が正常に動いた。

なお、重複する名前の Elisp ライブラリを表示する "M-x list-load-path-shadows" というコマンドがあり、自分の環境では300以上重複があった。これは整理しないと駄目だな…。