4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Ubuntu 16.04でSDICを使用するには

Last updated at Posted at 2017-08-09

はじめに

英文ドキュメントを読む時に、GNU Emacs + SDIC-Eijiro を活用していたのだ
が、なぜか、最近のUbuntuではSDICが上手く動作しない。

sdic_does_not_work.png

もしかすると、英辞郎 の辞書が古い(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点。

  1. SDICが生成する辞書ファイルをUTF-8化する
  2. SDICが動作するコーディングをUTF-8とする

SDICが生成する辞書ファイルのUTF-8化

SDICの辞書ファイルの作成は一概して、以下の手順を踏む。

  1. 辞書データのEUC化
    eオプションを指定したnkfのインプットに辞書の元データを渡してEUC化
  2. 辞書の生成
    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のローカル・パッケージの作成手順を以下に示す。

  1. パッケージのビルド環境の構築

    $ sudo apt update
    $ sudo apt install build-essential
    $ sudo apt-get build-dep sdic
    
  2. 正規SDICパッケージ・ソースの入手

    $ mkdir sdic
    $ cd sdic
    $ apt-get source sdic
    
  3. UTF-8化のパッチの入手

    $ git clone https://github.com/takushi1969/sdic-forUTF8.git
    
  4. 正規SDICパッケージ・ソースへのパッチの適用とパッケージのビルド

    $ cd sdic-2.1.3
    $ patch -p1  < ../sdic-forUTF8/sdic-forUTF8.patch 
    $ dpkg-buildpackage -b -uc -us
    
  5. ローカル・パッケージの確認
    ビルドに成功すると、親ディレクトリにSDICの各種パッケージが生成され
    る。

    $ cd ..
    $ ls *deb
    
  6. sdicとsdic-eijiroのインストール

    $ sudo dpkg -i sdic_2.1.3-22-forUTF8_all.deb sdic-eijiro_2.1.3-22-forUTF8_all.deb
    
sdic_work_correctly.png

後書き

目標としていたSDIC-Eijiroを無事動作させることができた。
また、オリジナルのパッケージでは参照できなかったSDICのinfoも参照できる
ように対応した。

sdic_info.png

ただ、以下の留意点があるので、注意されたい。

  1. UTF-8の辞書は、sdic-eijiro以外は未確認
4
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?