概要
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に書きたい所。