やるきなし

2015/07/12 22:33 / Debian GNU/Linux unstable (sid) で sdic が動かない

急に 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 を付けてしまえばとりあえず良いような気がする.

以下デバッグメモ.