急に sdic が動かなくなって,大変困る.sdicとはEmacs上で辞書をひく軽量な実装.
調べたところ Debian の grep package の version が 2.21-2 に上がったことが原因ならしい.この version の grep は LANG=ja_JP.UTF-8 環境で EUC-JP なファイルをバイナリだと認識してしまうらしい(ある意味正しい挙動?).
% echo $LANG ja_JP.UTF-8 % dpkg -l grep | grep ^ii ii grep 2.21-2 amd64 GNU grep, egrep and fgrep % /bin/fgrep -e "<K>air" /usr/share/dict/gene.sdic バイナリファイル /usr/share/dict/gene.sdic に一致しました % sudo dpkg -i grep_2.20-4.1_amd64.deb % dpkg -l grep | grep ^ii ii grep 2.20-4.1 amd64 GNU grep, egrep and fgrep % /bin/fgrep -e "<K>air" /usr/share/dict/gene.sdic | head -1 | nkf -u <K>air</K>1.〜を放送する(〜が放送される),公表する,発表する,2.(衣類などを)風に当てる,干す,乾かす,部屋に風を通す,3.意見を吹聴する,不平を並べる,4.様子, 空気,態度,大気,空間,外見,5.空気の,空気を用いる,6.空の,空中の,飛行機の,7.曲,旋律
とりあえず grep を 2.20-4.1 に downgrade すれば動く.もしくは自前の fgrep (script かなにか)を用意して,LANG=ja_JP.UTF-8 環境でも EUC-JP のファイル (gene.sdic) をバイナリだと認識しないように細工してあげれば (-a option を付けて実体を起動する)動きそう.
というか,fgrep は script になっていて,その内容は exec grep -F "$@" のみなので,ここに -a option を付けてしまえばとりあえず良いような気がする.
以下デバッグメモ.
- sdicf.el の sdicf-grep-search が検索(grep)を実行している本体
- 以下ぐらいでとりあえずテストできる.
(setq sdic (sdicf-open "/usr/share/dict/gene.sdic")) (sdicf-grep-search sdic "<K>air")
"<K>air"
のようなquery (?)はsdicf.elのsdicf-searchで作られる.