文字コード混在環境で正しく lgrep する
2年前のEmacs の M-x grep をマルチエンコーディングにで文字コードの混ざった環境でも日本語で検索できるようになって便利って話をしたんだけど、実はこれ、手元の環境では emacs -nw でしかちゃんと動いてなかった。
普段 Emacs を Emacs らしく使う際のほとんどの時間は -nw で使っているんだけど、ViewSourceWith や It's All Text を使って Firefox や Thunderbird から、あるいは日本語の文字幅の問題から直接 CarbonEmacs を window で使うこともある。数ヶ月前に初めて気づいたんだけど、以前の設定で lgrep を呼び出すと日本語検索で余計なものが引っかかったり、必要なものが引っかからなかったりしてまったく使いものになっていなかった。
twitter で何度もつぶやいてたりあれこれ検索していたんだけど、該当する現象で困っている人はいないらしく、役に立ちそうな情報はなかなか見つからなかった。当初は emacs の設定の方を見ていたんだけど、もしかすると lgrep かなぁと思って設定をいじっていたら以下の方法で正しく検索できるようになった。
lgrep -Au8 -Ia
どうも lgrep -K で渡すはずの keyboard coding system が期待通りでなかったらしい。
OPTIONS -ASet all coding systems to coding-system. -I Set input coding system to coding-system. -K Set keyboard coding system to coding-system. If it is not set, output coding system will be applied to it.</pre></blockquote> を見ると -Ou8 が書いてあればデフォルトでは -K にも u8 が渡るような感じがするけど、CarbonEmacs から lgrep を呼び出すときに u8 じゃない値が渡ってしまっているようだ。 ということで今、手元の設定は以下のようになっている。 (setq grep-command "find . -type f -a ! -regex '.*\\.svn.*' -a ! -regex '.*\\.git.*' -a ! -regex '.*\\.hg.*' -a -print0 | xargs -0 lgrep -nk -Au8 -Ia ") うむ。やっとまともな状態になった。 こういう問題は CarbonEmacs だけじゃなくて Meadow なんかでも起きそうなのでちゃんと日記に書き起こしておくことにした。