C/Migemoの辞書についての覚え書き(既定の辞書について)
C/Migemoは、バージョン1.3cの時点では辞書の場所を-dオプションで指定できるが、付けない場合は現在の作業ディレクトリから辞書ファイル(migemo-dict)を探し、開くのに失敗したらその1階層上のディレクトリを探すようになっている。
vimとEmacsでは辞書の場所を拡張のコード内に記述するため毎回オプション指定するようなことはないが、直接コマンドを叩くときに上の挙動だと、辞書の配置場所が決まっているのにも関わらず-dオプションを使わないと見付けられないので不便。
$ echo toky | cmigemo | iconv -f eucjp -t utf8 migemo_open("./dict/migemo-dict")=0xa0b010 migemo_open("../dict/migemo-dict")=0xa0b010 clock()=0.000000 QUERY: PATTERN: toky QUERY:
そこで、インストール先接頭辞*1により決定される辞書のディレクトリ(のmakeマクロ「dictdir」)を使用して既定の辞書を開いてくれるような修正をした。(広い意味での)UNIX系OSでのビルド時にのみ挙動が変更されるようになっている。パッチはShift_JISのエンコーディングで使用する。
[任意]ファイル名: cmigemo-1.3c-MIT-defaultdicdir.patch
This patch is licensed under MIT license. diff -ur cmigemo-1.3c-MIT.orig/compile/unix.mak cmigemo-1.3c-MIT/compile/unix.mak --- cmigemo-1.3c-MIT.orig/compile/unix.mak +++ cmigemo-1.3c-MIT/compile/unix.mak @@ -9,7 +9,7 @@ libmigemo_SRC = $(SRC) libmigemo_OBJ = $(OBJ) -DEFINES = +DEFINES = -DDICTDIR=\"$(dictdir)\" CFLAGS = -O2 -Wall $(DEFINES) $(CFLAGS_MIGEMO) LDFLAGS = $(LDFLAGS_MIGEMO) LIBS = diff -ur cmigemo-1.3c-MIT.orig/src/main.c cmigemo-1.3c-MIT/src/main.c --- cmigemo-1.3c-MIT.orig/src/main.c +++ cmigemo-1.3c-MIT/src/main.c @@ -116,9 +116,18 @@ fplog = fopen("exe.log", "wt"); #endif - /* 辞書をカレントディレクトリと1つ上のディレクトリから捜す */ if (!dict) { +#ifdef DICTDIR + /* 既定の辞書を開く */ + pmigemo = migemo_open(DICTDIR "/" MIGEMODICT_NAME); + if (!word && !mode_quiet) + { + fprintf(fplog, "migemo_open(\"%s\")=%p\n", + DICTDIR "/" MIGEMODICT_NAME, pmigemo); + } +#else + /* 辞書をカレントディレクトリと1つ上のディレクトリから捜す */ pmigemo = migemo_open("./dict/" MIGEMODICT_NAME); if (!word && !mode_quiet) { @@ -135,6 +144,7 @@ "../dict/" MIGEMODICT_NAME, pmigemo); } } +#endif } else {
これで、-dオプションが省略できるようになった。インストール後には下のような感じで動作している。
$ echo toky | cmigemo | iconv -f eucjp -t utf8 migemo_open("/usr/share/migemo/migemo-dict")=0xb19010 clock()=0.160000 QUERY: PATTERN: (toky|東京|ト(ーキョー|キ[ャィュェョ])|toky|とき[ゃぃゅぇょ]|徒競走|都響) QUERY: