はじめに
英文ドキュメントを読む時に、GNU Emacs + SDIC-Eijiro を活用していたのだ
が、なぜか、最近のUbuntuではSDICが上手く動作しない。
もしかすると、英辞郎 の辞書が古い(Ver.52)ことに原因があるのかも知れな
いが、GNU Emacs + SDIC-Eijiro の手軽さにが恋しい。
そこで、一念発起して、Ubuntu 16.04で、 SDIC-Eijiro を動かすことにトラ
イしてみた。
なぜ、パッケージ提供されているsdic-eijiroがubuntu16.04で動作しないのか
世の中同じように困っている方は見えるもので、Hiroshi Tsutsuiさんが原因
を以下のようにtweetしてくれている。
最新(2.21-2)のgrepはLANG=jaJP.UTF-8だとEUC-JPのファイル(gene.sdic)を
バイナリだと認識してしまうらしい.grep 2.20-4.1にdowngradeするとsdicが
動いた.
対処
Ubuntu 16.04向けのgrep 2.20-4.1のパッケージが無いし、できれば、パッケー
ジは最新の状況を維持しておきたい。そこで、発想を逆転させて、
SDIC-Eijiro をUTF-8対応させることにする。
対応方法は、後々のUbuntuの管理が容易になると考えて、Ubuntu 16.04の
sdic-2.1.3-22をベースにしたローカルパッケージを作成することにする。
下記の修正は、sdic-2.1.3-22へのパッチとして、https://github.com/takushi1969/sdic-forUTF8.gitで公開する。
SDIC-EijiroのUTF-8化
SDIC-Eijiro のUTF-8化のポイントは2点。
- SDICが生成する辞書ファイルをUTF-8化する
- SDICが動作するコーディングをUTF-8とする
SDICが生成する辞書ファイルのUTF-8化
SDICの辞書ファイルの作成は一概して、以下の手順を踏む。
- 辞書データのEUC化
eオプションを指定したnkfのインプットに辞書の元データを渡してEUC化 - 辞書の生成
1)の出力結果をパイプで(sdic-2.1.3/contrib配下にある)perlスクリプト
に渡して、その処理結果を辞書ファイルに保存
本来は、1)でUTF-8化して、2)でUTF-8対応させたperlスクリプトで処理するこ
とが望ましいと考えるが、perlスクリプトの改造の手間を省いて、2)の辞書ファ
イルの保存前に、UTF-8化するためにnkfに-wオプションを指定したパイプを追
加する。
以下に改造の概要を示す。
nkf -e 辞書の元データ | perlスクリプト | nkf -w > 辞書ファイル
調査の結果、修正対象は以下の6ファイルとなる。
- Makefile.am
Makefile.inを作成するためのインプットであり、かつ、Makefile.inが存在
することから、本来は修正が不要か? - Makefile.in
- contrib/gene.perl
- contrib/eijirou.perl
- debian/sdic-gene95.postinst
- debian/sdic-eijiro.postinst
SDICの動作するコーディングのUTF-8化
SDICが動作するコーディングは、変数:sdic-default-coding-system の値で
決まる。そこで、sdic-2.1.3配下で、sdic-default-coding-systemを設定し
ている箇所を洗い出して、Ubuntu 16.04 + Emacs 24の使用時には、utf-8とな
るよう設定する。
調査の結果、修正対象は以下の2ファイルとなる。
- lisp/sdic.el.in
sdic-default-coding-systemの初期値が、utf-8となるよう設定する。 - texi/sdic.texi
infoドキュメントのsdic-default-coding-systemの説明箇所の初期値をEUC
からUTF-8に変更する。
ローカル・パッケージの作成とインストール
UTF-8化したSDICのローカル・パッケージの作成手順を以下に示す。
-
パッケージのビルド環境の構築
$ sudo apt update $ sudo apt install build-essential $ sudo apt-get build-dep sdic
-
正規SDICパッケージ・ソースの入手
$ mkdir sdic $ cd sdic $ apt-get source sdic
-
UTF-8化のパッチの入手
$ git clone https://github.com/takushi1969/sdic-forUTF8.git
-
正規SDICパッケージ・ソースへのパッチの適用とパッケージのビルド
$ cd sdic-2.1.3 $ patch -p1 < ../sdic-forUTF8/sdic-forUTF8.patch $ dpkg-buildpackage -b -uc -us
-
ローカル・パッケージの確認
ビルドに成功すると、親ディレクトリにSDICの各種パッケージが生成され
る。$ cd .. $ ls *deb
-
sdicとsdic-eijiroのインストール
$ sudo dpkg -i sdic_2.1.3-22-forUTF8_all.deb sdic-eijiro_2.1.3-22-forUTF8_all.deb
後書き
目標としていたSDIC-Eijiroを無事動作させることができた。
また、オリジナルのパッケージでは参照できなかったSDICのinfoも参照できる
ように対応した。
ただ、以下の留意点があるので、注意されたい。
- UTF-8の辞書は、sdic-eijiro以外は未確認