auto-complete-modeで日本語を補完するac-ja.elを作った


Emacsでの日本語入力は専らDDSKKを使っています。

変換中の補完はDDSKKのskk-dcomp-multiple-activateがあるのですが、確定後の補完ができないのがいまいち不満でした。

誰か作ってるはずだと思い、いろいろ探してみましたが以外なことに目ぼしいものが見つからなかったので、いろいろな方のコードを拝借しながらauto-complete.elを使って日本語を補完するac-ja.elをいうのを書いてみました。

ac-ja.elとは

auto-complete-modeを使った日本語補完をサポートする、ふたつの情報源を提供します。
恐らく、いろいろなIMで使えるとは思いますが、DDSKKとの併用が便利ではないかと思います。

ダウンロード

ac-ja.elはMarmaladeというelispのリポジトリサイトに登録していますので、package.elをお使いの方はとても簡単にインストールできます。

package.elやMarmaladeからのダウンロードについて詳しくは以前書いたこちらを参考にしてください。

package.elをお使いでない方は、Githubから手動でダウンロードしてください。

myuhe/ac-ja.el – GitHub

以降では、各情報源ごとに必要な設定について書いていきます。

ac-source-dabbrev-jaとその設定

ac-source-dabbrev-jaは、その名のとおりdabbrevで日本語を収集して作られる情報源です。

requireしてac-sourcesに加えるだけで使えるようになるはずです。

(require 'ac-ja)
(setq ac-sources (append ac-sources '(ac-source-dabbrev-ja)))

これで、補完が開始される度にdabbrevがはしり、補完候補が集められます。DDSKKをお使いの方はjisyoバッファもdabbrevされるので、個人辞書に登録した単語も補完候補に出てくると思います。

ac-source-skkとその設定

ac-source-skkはSKKで使われる辞書ファイルから補完候補が作成される情報源です。DDSKKの利用が前提となります。

必要となる設定は次のような感じになります。

;;補完候補としたい辞書ファイルの場所を指定します。
(setq ac-skk-jisyo-file "~/SKK-JISYO.L")
;;補完候補生成に必要な中間ファイルを置く場所を指定します。
(setq ac-skk-alist-file "~/ac-skk-alist.el") 
(require 'ac-ja) 
(setq ac-sources (append ac-sources '(ac-source-skk)))

指定する辞書ファイルによって人名や地名などいろいろと補完できるようになるんではないかと思います。

また、この二つの情報源は併用して使うことも可能です。併用して使うとこんな感じになると思います。

http://i2.wp.com/img404.imageshack.us/img404/9422/006wq.png?w=1008

文字列を確定したら自動的に補完を開始

DDSKKでは文字入力に独自の関数をあてていますので、ac-auto-startをtとしていても自動的に補完が開始されません。

そこで、自動的に補完を開始させるために以下のようなコードを.emacsにでも書いておきます。

(eval-after-load "skk"
  '(progn
     (defadvice skk-kakutei (after ad-skk-kakutei last)
       "skk-kakuteiの後にatuo-complete-modeによる補完を実行するadvice"
       (unless (minibufferp)
         (ac-start)))))

(add-hook 'skk-mode-hook 
          (lambda () 
            "skk-kakuteiのadviceを活性化" 
            (interactive)
            (ad-activate 'skk-kakutei)))

(defadvice skk-mode-exit (before ad-skk-mode-exit last)
       "skk-modeから抜ける時にskk-kakuteiのadviceを不活性化。"
       (ad-deactivate 'skk-kakutei))

これで自動的に補完ができるようになるはずです。

その他の雑多なこと

いろいろと制限がありまして、まずひらがなと漢字が混じると補完できません。ということなので、補完するのは主に漢字が並んだ名詞になると思います。

それとできてから気づいたのですが、auto-complete-modeってmigemoれないので、補完候補が膨大にあるとなかなか探すのが大変です。どなたかmigemoれるanythingインターフェイスで書き直してください。

それでは good補完ライフを

参考

ac-source-dabbrev-jaに関するコードは本家dabbrev.elのコードからいろいろと拝借しました。

ac-source-skkに関するコードはDDSKKのメンテナ、Kitamotoさんのskk-kakutei-extra.elからいろいろと拝借しました。

漢字で補完 – lisp_interactionの日記

素敵なコードありがとうございます!!

  • Kitamoto Tsuyoshi

    稚拙なコード(skk-kakutei-extra.el)ですみません。
    のちほど ac-ja.el を試してみたいと思います。
    — 北本

    • myuhe

      コメントありがとうございます!!
      DDSKK、ありがたく使わせていただいてます。
      コード、拝借させていただきました。稚拙だなんてとんでもないです!!

  • Kitamoto Tsuyoshi

    稚拙なコード(skk-kakutei-extra.el)ですみません。
    のちほど ac-ja.el を試してみたいと思います。
    — 北本

    • myuhe

      コメントありがとうございます!!
      DDSKK、ありがたく使わせていただいてます。
      コード、拝借させていただきました。稚拙だなんてとんでもないです!!