emacsでインクリメンタルな日本語検索と言っても限られた環境で

日本語変換にAnthyを使っていて,かつ.emacs.elに

(load-library "anthy")
(setq default-input-method "japanese-anthy")

なんてしてemacsで日本語環境を構築してると,C-sでインクリメンタルサーチを行うときに日本語で検索できないと言う,まぁ普通はどうでもいいような問題が発生します.それをなんとか解決できないものかと考えてまして.

考える

Anthyを使わずにemacs標準の謎日本語変換システム*1を使うと,C-sで日本語で検索できます.そこで,

  1. C-sを入力
  2. 日本語環境を"japanese"に変更
  3. isearch-forward実行
  4. 日本語環境を"japanese-anthy"に戻す

なんてことをすれば,できるんじゃないかと.でも実際は,関数の中だけ日本語環境が"japanese"になれば良いので,最後の"japanese-anthy"は要らないか.

で,書いてみた.

(defun my-isearch ()
  (interactive)
  (setq default-input-method "japanese")
  (isearch-forward))
  
(global-set-key "\C-s" 'my-isearch)

とりあえず動くが,挙動が正直引く.

手順

  1. まず,何らかのタイミングでAnthyemacs上で起動させておく
  2. C-s(この状態で,普通にアルファベットの検索はできる)
  3. C-\で日本語入力モードに……はならない
  4. Enterキーを押す
  5. C-\で日本語入力モードに!
  6. やったぁ,検索できるぞ

『C-\で日本語入力モードに』が二回出てくる時点で,この手法は間違っているということに気づかねばなるまい.きもいマジきもい.

*1:id:omochist:20070125:1169737491