auto-complete-modeで日本語を補完するac-ja.elを作った
- 2011.10.11
- Emacs
- auto-complete.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から手動でダウンロードしてください。
以降では、各情報源ごとに必要な設定について書いていきます。
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)))
指定する辞書ファイルによって人名や地名などいろいろと補完できるようになるんではないかと思います。
また、この二つの情報源は併用して使うことも可能です。併用して使うとこんな感じになると思います。
文字列を確定したら自動的に補完を開始
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からいろいろと拝借しました。
素敵なコードありがとうございます!!
-
前の記事
EmacsのMercurialフロントエンドはmonkyがおすすめ 2011.10.05
-
次の記事
日記をお引越しました 2011.11.06