2016年4月20日水曜日

cmigemoで複数の辞書を使う

概要


C/Migemoは複数の辞書を扱える便利な機能がある。但し、Emacsからmigemo.elを通して使う時には少々fileに細工する必要がある。

C/MigemoとRuby/Migemoの違い


man cmigemoすると明らかな通り、cmigemoはmain dictionaryに加えて、最大8つのsub dictionariesを指定できる。こんな感じ:

cmigemo -s <SUB_DICTIONARY_1> -s <SUB_DICTIONARY_2> ... -s <SUB_DICTIONARY_8> -d <MAIN_DICTIONARY>

Sub dictionariesの何が便利なのかと言えば:

  • mainの辞書を弄るほどでもない内部的なentryを好き放題追加できる
  • mainの辞書とは別にrevision controlしたり配布したりできる

例えば、cmigemoに付属のmigemo-dictをmainとして、それを補完する2つのsub dictionariesを指定すると:

cmigemo -q --emacs -s /home/user/.emacs.d/migemo/migemo-dict.user -s /home/user/.emacs.d/migemo/migemo-dict.sub -d /home/user/.emacs.d/migemo/migemo-dict

この例ではsub dictionariesとしてmigemo-dict.subとmigemo-dict.userの2つを指定している。

Emacsから複数辞書を活用する


複数辞書を指定する場合、Emacsでmigemoを使うためのmigemo.elには細工が必要。

migemo.elは、cmigemoを呼び出すcommand lineを組み立てているのだが、そこでcmigemoに与えているoptionが実はRuby/Migemoのもので、そのままではsub dictionariesを指定できない。2016年現在実際に利用されているのはC/Migemoだけだと思うんだが……。

具体的にはmigemo-initの内部でuser-dictionaryを指定する部分の"-u"及びregex-dictionaryを指定する部分の"-r"をそれぞれ"-s"に設定し、migemo-user-dictionaryとmigemo-regex-dictionaryをそれぞれsub dictionariesのabsolute pathに変更すれば良い。

3つ以上のsub dictionariesを使いたい場合は、非常にダサい実装だが、migemo-sub-dictionary-1〜8を定義し:

(when (and migemo-sub-dictionary-1
           (file-exists-p migemo-sub-dictionary-1))
  (list "-s" migemo-sub-dictionary-1))

を8回copy'n'paste (-1〜-8に変更しつつ)すれば動く (と思う)。

勿論、loopとかmapとかを使ってsmartに書きたい所。

0 件のコメント:

コメントを投稿