まえがき
ずっとWSLのEmacsを使いやすくする方法を考えている。WindowsではCorvusSKK
を愛用しているので、当然SKKを使いたい。
これまでこんな感じのいい加減な記事を投稿してきた。
Windows Subsystem for Linuxを設定する
Windows Subsystem for Linuxを設定する 2
CorvusSKKの設定や辞書をオンラインストレージで共有する
Emacsは何度かあるブランクも入れると10年以上使っているが、elisp
は全くわからない。ブランクの間に気付いたらトレンドが変わったりしているので、そのたびに何となくついていくよう勉強するが、init.el
は基本コピペして少し変えるぐらい。Qiitaをはじめとする色々な解説を読んでも半分ぐらいしか理解できず、いつも悪戦苦闘している。
leaf.el
という新しいパッケージ管理がでてきたようなので、これを機に2012年ぐらいで止まっていたinit.el
を刷新しようと思った。
[正式リリース]leaf.elで雑然としたEmacs設定ファイル「init.el」をクリーンにする
全体的な記事を書きたいと思いながら、刷新がいつまでも終らない沼に入ったので、小さい問題を解決するたびにQiitaを書いて記録しようと考えた。
やりたいこと
WindowsではCorvusSKKをつかっているので、その辞書をWSLのEmacsでも流用したい。
環境を書いておく
Windows 10 Home 1909 (64bit)
CorvusSKK 2.7.11
Ubuntu 18.04 on WSL1
Emacs 26.3
DDSKK 17.0.50
CorvusSKKはオンラインストレージ(googleドライブ)で複数の端末で設定や辞書を共有している(上の記事参照)。
Windows上のgoogleドライブはWSLでもシンボリックリンクを貼って共有しているので、CorvusSKKのディレクトリもWSLで見えている。
uim-skkをずっと使っていたけど、WSLではほとんどEmacsしか使わないので、uimである必要がないじゃないかと思いはじめた。
そこで、長年触ってこなかったDDSKKにしようと考えた。
辞書の文字コードはもちろんUTF-8だと思ったので、UTF-8で開いてCorvusSKKの辞書を参照しに行った。
(setq skk-jisyo-code 'utf-8)
(setq skk-jisyo "/[CorvusSKK設定ディレクトリ]/userdict.txt")
(setq skk-large-jisyo "/[CorvusSKK設定ディレクトリ]/skkdict.txt")
ハマッたこと
ところが、辞書が開かない。
エラーとしては
Header line for okuri-ari entries is missing!
となってしまい、辞書が読めず漢字変換ができない。DDSKKがうごいているとEmacsを終了するときに、skk辞書をセーブするが、同じ理由で終了もできなくなる。これは焦ったが、
M-x skk-kill-emacs-without-saving-jisyo
で辞書セーブを飛ばして終了できた。
SKK辞書は;; okuri-ari entries.
と;; okuri-nasi entries.
が必要であることを知ったが、もちろんCorvusSKKはこのルールを守っている。なのにDDSKKではこれが判別できない、ということでハマッた。
解決
数日間悩み、やっぱりuimに戻ろうかとuim.el
を再び入れてみたりもしていた。
タネは実はCorvusSKK
のほうにあった。CorvusSKKのgithubページを見ていたら
UTF-16 (LE, BOMあり) のSKKユーザー辞書フォーマットで書き込まれます。
と書いてあった。そう、辞書の文字コードがUTF-8だと思い込んでいたことが間違いだった。
DDSKKのマニュアルを読んでも辞書をUTF-16で開けるとは書いてないしやってみてもダメだったので、UTF-8の辞書を用意することにした。large辞書はSKK辞書のL
やjinmei
をマージしたものだったので、これはそのままでいいが、問題はユーザー辞書。常に更新されるものなのでスクリプトでも書いて逐次utf-8に変換するようにすることも考えたが面倒だったのでやめて、現時点のユーザー辞書をベースに新たに育てることにした。というわけで、iconv
で変換する(EmacsでC-x C-f RET
してもいい)。
iconv -f UTF-16LE -t UTF-8 skkdict.txt -o SKK-JISYO.utf8
iconv -f UTF-16LE -t UTF-8 userdict.txt -o userdict.utf8
これらの辞書を参照するようにinit.el
を書き直したら無事に辞書を開けるようになった。無事にDDSKK
が使えるようになった。