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

Re: ミニバッファでIMEがONにならない



白井です。

# MW32-IME は普段使わないので、よくわからないし、関係ないかなぁ〜
# と思っていたのですが、関係してきちゃいました。

From: YAGI Tatsuya <ynyaaa@xxxxxxxxx> さん曰く
Subject: Re: ミニバッファでIMEがONにならない
Message-ID: <uack8po3n.fsf@xxxxxxxxx>
Date: Wed, 27 Jul 2005 18:58:20 +0900

> >Meadow-3.00-dev で mw32-ime-state を排除してみました。
> >
> >結構大きな修正ですので、使ってみて問題があるようであれば教えてく
> >ださい。 > Meadow-3.00-dev を使っている方

普段は tamago を使っているのですが、tamago ON の状態で他の
buffer に行って、戻ってくると、MW32-IME が召喚されちゃいます。
矢木さんの指摘の↓ですね。

> ・mw32-ime-select-window-hook, mw32-ime-set-selected-window-buffer-hook
>   中で current-input-method が non-nil かで判定している。
>   (equal current-input-method "MW32-IME") で判定しないとまずいはず。

だけど、toggle-input-method() で MW32-IME を召喚したときは

current-input-method => "MW32-IME"

となっていますが、mw32-ime-toggle() で IME を動かしたときは

current-input-method => nil

なので、注意が必要です。(*1)

(*1) を解決するには mw32-ime-toggle() で IME を動かしたときも
current-input-method を設定しちゃうほうが楽だとおもうので、矢木
さんの↓

> ・mw32-ime-toggle が current-input-method を無視している。
>   (defun mw32-ime-toggle ()
>     (interactive)
>     (if (equal current-input-method "MW32-IME")
>         (inactivate-input-method)
>       (activate-input-method "MW32-IME")))
>   こんな感じにして、mw32-ime-state-switch 中の
>   fep-force-on/off の引数を nil にすれば良いと思う。
>   その場合 mw32-ime-on/off-hook, mw32-ime-mode-line-update は
>   mw32-ime-state-switch 内で実行しておく必要がある。

で良いとは思うのですが。。。しかし、以下の様なことができなくなり、
個人的にはちょっと困ってしまいます。

こんなの↓
ぼくは日頃 Wnn とか Anthy を tamago で使っています。たまに Anthy
の辞書に載っていない漢字を出すために Windows の IME を(都合によ
り)右 ALT で召喚することがあります。このとき、tamago の状態はそ
のままだし、(都合により)C-o で tamago の ON/OFF ができますが、

(activate-input-method "MW32-IME")

が動くとそれ以降 MW32-IME になっちゃってちょっとめんどくさいです。

#しかし、この辺はいまいち理解していないので、理解するように努め
# ます。

> ・mw32-ime-select-window-hook の
>   (when (eq new (minibuffer-window))
>     (setq current-input-method nil))
>   があるとミニバッファから C-x o をくり返して戻って来ると
>   IMEが強制的にOFFになってしまう。
> 
>   C-g でミニバッファを抜けた場合への対処としては、quail に倣って
>   mw32-ime-state-switch でIMEをONにする処理の中に
>   (if (eq (selected-window) (minibuffer-window))
>       (add-hook 'minibuffer-exit-hook 'mw32-ime-exit-from-minibuffer))
>   を入れておくのが良いと思う。mw32-ime-exit-from-minibuffer の定義は次の通り。
>   (defun mw32-ime-exit-from-minibuffer ()
>     (inactivate-input-method)
>     (if (<= (minibuffer-depth) 1)
>         (remove-hook 'minibuffer-exit-hook 'mw32-ime-exit-from-minibuffer)))

この二つはもっともだと思います。

-- 
白井秀行 (mailto:shirai@xxxxxxxxxxx)