LoginSignup
2
3

More than 3 years have passed since last update.

WSLのEmacsでDDSKKが使えるようになるまで

Last updated at Posted at 2020-04-29

まえがき

ずっと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辞書Ljinmeiをマージしたものだったので、これはそのままでいいが、問題はユーザー辞書。常に更新されるものなのでスクリプトでも書いて逐次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が使えるようになった。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3