[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

Re: default-input-method



木村です。

変数default-input-methodの値がいつの間にかリセットされてしまう件ですが、
その原因が判りました。

私がsite-lispに独自にインストールしているものの中に、
Riece(http://www.nongnu.org/riece/)というIRCのクライアントがあるのです
が、これが起動される際に

(set-language-info "Japanese" 'riece-mcat-feature 'riece-mcat-japanese) ...(*)

というふうに、set-language-infoを実行してlanguage-info-alistに独自の情
報を追加しています。

一方mule-cmds.elを見ると、set-language-infoは
set-language-info-internalという別の関数を呼び出していますが、その最後
に

    .....
    (if (and (featurep 'meadow)
             (equal lang-env current-language-environment))
        (set-language-environment lang-env))))

という部分があって、set-language-infoの第1引数の値が
current-language-environmentと等しい場合には、set-language-environment
を実行する様になっています。

というわけなので、M-x rieceを実行すると、

   (*)が実行される
→ (set-language-environment "Japanese")が実行される
→ default-input-methodの値が、language-info-alistで指定されたデフォル
   ト値にリセットされる。

ということになります。

対策ですが、lisp/startup.elなどを調べたところ、leim-list.elが読み込まれ
るのは起動時のみのようなので、egg/leim-list.elを変更する代わり
に、.emacsで

(set-language-environment "japanese")
(set-language-info "Japanese" 'input-method "japanese-egg-anthy")

のように、set-language-environmentしてからset-language-infoしてやれば
大丈夫のようです。

と言う訳で、「default-input-methodの値がいつの間にかリセットされてしま
う件」は一件落着なのですが、それとは別に一つ疑問点が。

Emacs 22.1のmule-cmds.elをみると、set-language-info-internalには↑の
「set-language-infoの第1引数の値がcurrent-language-environmentと等しい
場合には、set-language-environment を実行する」部分はないので、これは
Meadowで独自に追加した部分だと思いますが、Meadowでこれを行っているのは
何か理由があるのでしょうか。

---
木村 康浩