« Cocolog_Pro_Analyzer:ココログプロ用アクセス解析補助 Greasemonkey | トップページ | The Proofs about Alpha-equivalences in Isabelle »

2015年10月16日 (金)

quail-naggy.el: 単漢字変換 Input Method for Emacs.

About the "quail-naggy.el"


Windows 用単漢字変換日本語 IME 『風』の実用性とアイデアを受け、将来的に非 Windows 環境や IME 非対応の Windows 用 Emacs でも『風』のようなインプット・メソッドが使えるようにしておこうとして開発されたのが本ソフトである。

quail-naggy.el 本体は、仮想鍵盤の表示がメインで、変換時の辞書引きなどには、同梱の naggy-backend.pl という Perl プログラムをバックエンドとして使っている。

quail-naggy.el 自体は、Emacs に付属している quail/japanese.el と kkc.el を大いに参考にして作った。また、随分前に私自身が作ってほぼ身内でのみ配布した vkegg.el も参考にしている。

バックエンドを使うこともあり、インストールが複雑なのが本ソフトの弱点である。また、Emacs のバージョンの違いによる表示の差も設定を難しくする要因となる。

本ドキュメントでは、その難しいインストール作業をまず説明し、次いで操作方法を説明する。
インストール方法


インストール方法の大枠は次の通りである。

naggy-backend.pl で使用する Perl モジュールのインストール。

Emacs-Lisp ディレクトリ上へのファイルの展開。

SKK-JISYO.L や tankanji.txt などの変換用辞書の入手&インデックス・データベースファイルの作成。

naggy-backend.pl の設定。

.emacs の設定。



順に説明していこう。


naggy-backend.pl で使用する Perl モジュールのインストール。


naggy-backend.pl ではデフォルトでインストールされていない Perl モジュールはほとんど使っていないが、日本語関連の一つとデバッグ用の一つの計二つのモジュールだけは別途インストールする必要があるだろう。

その二つは Unicode::Japanese と autovivification である。

なお、バージョン 0.04 までは Encode::JIS2K も必要だった。

問題があった Encode::JIS2K は、コンパイルがうまくいかない環境があるようだ。Windows の標準的な Perl である ActivePerl がその例である。 2015-10-16 現在、ActivePerl で "ppm install Encode::JIS2K" としてもエラーが返るだけである。

実は Encode::JIS2K と似た機能のモジュールとして Encode::JISX0213 モジュールがあり、代わりに利用できるはずである。ただし、これも ActivePerl において "ppm install Encode-JISX0213" が成功するのに、うまく使えなかった。そのため、そちらに対応するコードは書かなかった。が、それがうまく入る環境では、各種 .pl ファイル内の "require Encode::JIS2K" を "require Encode::JISX0213"に変えるだけでうまく機能するはずである。

バージョン 0.05 からは Encode::JIS2K が多くの環境で必要なくなった。 Encode モジュールはバージョン 1.64 から、デフォルトで euc-jp を指定すると euc-jisx0213 の内容をデコードできるため、euc-jisx0213 を使っているところを euc-jp に変えた。万一、euc-jp でなく euc-jisx0213 が必要な環境の場合は、make_skk_dic_db.pl make_tankanji_dic_sdb.pl naggy-backend.plの起動時に --jisx0213 オプションを付ければ euc-jisx0213 を使って従来どおりの動作をする。(ただし、このオプションは obsolete。)

著者は Cygwin の Perl 5.10.1 で動作確認をしている。


Emacs-Lisp ディレクトリ上へのファイルの展開。


Unix 環境であれば /usr/share/emacs/site-lisp にこのアーカイブを展開した quail-naggy/ ディレクトリを置けばいい。ドキュメントなどもそのままコピーしておいたほうがいいだろう。


SKK-JISYO.L や tankanji.txt などの変換用辞書の入手&インデックス・データベースファイルの作成。


単漢字変換辞書は、例えば↓から持って来れる。が、『風』の所有者にできれば限定しておきたい。

『風』の所有者ならば、もしかすると、『風』の辞書をテキストに変換して使ってよいと考えるかもしれない。一応 dic2txt.pl というそのためのスクリプトを用意したが、詳しくはそのソースを読んで欲しい。

単漢字変換辞書の形式は、行が #YOMI:ナニカ で始まるところから次の #YOMI までが一単位で、そこに半角スペース2つか "!-" で区切られた単漢字が 10文字分が四行で、40字分を一ページとして数ページ分が含まれるのが続くファイルである。行頭が #YOMI 以外の # で始まる行は無視される。

quail-naggy.el では、変換時の候補のしぼりこみに SKK 用の単語辞書を使う。また、単に単漢字変換だけでなく指定すれば SKK 辞書を使った単語変換もできるので、SKK 辞書を手に入れたほうがよい。↓から SKK-JISYO.L をダウンロードする。ダウンロードしたものは gzip がかけられていると思うので gunzip しておく。

手に入れた tankanji.txt と SKK-JISYO.L を先にファイルをインストールした quiail-naggy/ に置く。ここで、辞書のロードに時間をくわないように、インデックス・データベースファイルを作っておく必要がある。

# perl make_skk_dic_db.pl -e SKK-JISYO.L
# perl make_tankanji_dic_db.pl -e tankanji.txt


…とする。オプションの -e は euc-jisx0213 を使うという意味で、tankanji.txt が sjis の場合は -s を指定すれば良い。-u とすれば、utf8 になる。

これで、SKK-JISYO.L.sdb.pag , SKK-JISYO.L.sdb.dir , tankanji.txt.sdb.pag , tankanji.txt.sdb.dir ができるはずである。

ファイルをインストールしたときに付いてきた bushu-skk-dic.txt も SKK 辞書で部首変換に使う。「@き」などとして木へんの部首の単漢字が引ける。これもインデックス・データベースファイルを作る必要がある。

# perl make_skk_dic_db.pl -e bushu-skk-dic.txt


これで、bushu-skk-dic.txt.sdb.pag , bushu-skk-dic.txt.sdb.dir ができるはずである。


naggy-backend.pl の設定。


naggy-backend.pl はそれが起動したディレクトリからデータを読む設定になっている。最初に site-init.nginit というファイルを読む。これを記述する必要がある。これまでのファイル名で辞書を作ったら、次のようなファイルにすればいい。

set-tankanji-dic tankanji.txt -e
add-skk-dic SKK-JISYO.L -e
add-skk-dic bushu-skk-dic.txt -e


ここでも -e は文字コードに euc-jisx0213 を指定するためのオプションで、この二番目の引き数の位置になければならない。tankanji.txt が sjis であれば、-s を指定する。

naggy-backend.pl では、付属の alpha-hwkana.trl と simple_hebrew.trl を読み込んで使用する。それらは特に設定の必要はない。


.emacs の設定。


やっと、.emacs の設定である。.emacs には quail-naggy/ を置いたディレクトリについて、次のように書く。

;;
;; Naggy
;;
 (setq load-path
       (append load-path (list "/usr/share/emacs/site-lisp/quail-naggy")))
(require 'quail-naggy)
(setq naggy-backend-program "/usr/bin/perl")
(setq naggy-backend-options
      '("/usr/share/emacs/site-lisp/quail-naggy/naggy-backend.pl"))
(setq default-input-method "japanese-naggy")
(if (>= (string-to-number emacs-version) 24.5)
    (progn 
      (setq naggy-vk-split-window-length 7)
      (setq naggy-vk-frame-length 7)))


最後の naggy-vk-split-window-length と naggy-vk-frame-length の設定は、 Emacs のウィンドウに候補を表示するとき作るウィンドウの高さを指定する。経験によると、ftp.gnu.org の /gnu/emacs/windows/ から取ってきた Emacs 24.5 はこの設定ないと候補が 4行表示されるべきところで 3行しか表示されなかった。一方、gnupack の Emacs 23.3 では必要なかった。

これで C-\ を置せば quail-naggy が起動するはずである。


操作方法


何かを(ローマ字で)入力したあとに、それを平仮名としてまたは片仮名としてまたは漢字として確定するかをキーで指定するというのが変換の流れになる。

そのため、入力中は、他の Input Method のようにひらがなが表示されるのではなく、半角英字のローマ字読みが表示される。

そのまま英字として確定するときは return を押せば良い。ひらがなで確定するときは「無変換」キーを押し、カタカナで確定するときは「変換」キーを押す。半角カタカナで確定するときは Shift + 「変換」キーを押す。全角英数字を出したいときは tab を押す。だいたいそのようにキー設定してある。

ただし、109キーボードではなく 101キーボードにも使えるよう M-tab または S-return でひらがな確定、S-tab でカタカナ確定をできるようにしてあるが、それは標準的なキー操作ではないという認識が作者にはある。

なお、Emacs はこれまで「無変換」キーや「変換」キーの Elisp 用キーシンボルをたびたび変えてきた。一応、私が知ってる範囲でそれらのシンボルにもキー割り当てをしているが、将来的にまた変えられたら、quail-naggy.el の該当部分をいじって対応して欲しい。どのようなキーシンボルが割り当てられているかは、M-x describe-key をして調べれば良い。


単漢字変換はローマ字の文字列入力後にスペースキーを押すことで行う。候補ウィンドウが表示され、そこに 40 個の候補が並ぶ。それらはキーボード上の一つのキーにマッピングされる。さらにスペースを押すとページをめくって次の候補群を表示する。

単漢字変換モードに入ってからも、「無変換」キーでひらがな確定、「変換」キーでカタカナ確定ができることに変わりはない。ただ、半角英数で確定するためには C-g で一端キャンセルしてから return する必要がある。


単漢字のしぼり込み検索ということができる。具体的には aka:kou と入力して変換すると、「あか」という読みを持つ漢字のうち「こう」という読みも持つ漢字が highlight して表示される。なお、aka:akeru と入力すると、 SKK-JISYO.L で「あk」の読みを持つ「明ける」があるため、「明」が highlight して表示される。

Naggy :akka:bakeru

:akka:bakeru といったように最初を : ではじめると単語変換になり、「あっか」という読みの候補が「ばける」という読みでしぼり込み検索されて、表示される。1文字以上の長さのため、後ろのほうがわからない候補は meta キー + その候補のキーを押すことで候補を一時的に選択できて、後ろがなんであるかがわかる。

この辺りは『風』の機能よりも拡張されている部分になる。


わかっている不具合


『風』は、入力が終ったあととかは、制御キーでバックスペースなどが自由にできる。しかし、quail-naggy.el では、元の quail モードの制限らしく、それができないことがある。確定後に制御キーが使える場合もあり、動作が一定しない。原因は掴めていないが、quail モードの制限と思うので、詳しく調査していない。がまんして使っていただきたい。

ただ、制御キーの前に C-g を押すと、次の制御キーは効くようになるようなので、私はだいたい気にせず使っている。


また、gnupack の Emacs で、Windows の日本語 IME を『風』ではなく、 Windows 標準の Microsoft IME を使っていると、「変換」キーでカタカナ変換をしたあと、変換モードに入ってしまう。これを避けるには、私が標準的でないと思っている、S-tab でカタカナ変換しないといけない。

これを避けるもう一つの方法は、IME のツールバーを右クリックで出てくる設定において、追加として日本語キーボードに(Microsoft IME でなく)単なる「日本語」と書かれたものも選択しておき、shift+control などで選んで、その Microsoft IME でない、日本語キーボードを使うというものである。


さらに、ときどき、Emacs から perl の起動がうまくいかないことがあった。 Emacs を起動した直後のひらがな確定や単漢字変換のとき、変換すべきローマ字列が消えてしまい、その次に何度か同じように変換したりしてると、変換ができるようになるという現象が、何度かあった。naggy-backend.pl のプロセス用バッファである" *naggy-backend*" を見ると、exit code 5 で異常終了していた。再現性がなくて、原因不明である。


あと、不具合ではないが、naggy モード中は、shift + space で全角スペースが出るように global-set-key してしまっている。それがおいやな方は、 quail-naggy.el の該当部分を消す必要がある。ごめんなさい。


最後に


最初に書きましたが、このソフトは多くを他の人のアイデアやコードに依っています。その作者の方々に感謝します。

インストールが大変難しいものになってしまいました。それをクリアした上で使ってくださる利用者の方がいれば、その方々にも感謝します。

インストールが難しかったり、まだできたてで動作が安定していなかったり、やろうと思ってできなかった部分が多くあったりしますが、もしかすると遠くの誰かが必要とするかもしれないと思い、公開することにしました。いろいろ致らない部分があるとは思いますが、お許しください。


License


The author is a Japanese.

I intended this program to be public-domain, but you can treat this program under the (new) BSD-License or under the Artistic License, if it is convenient for you.

Within three months after the release of this program, I especially admit responsibility of efforts for rational requests of correction to this program.

I often have bouts of schizophrenia, but I believe that my intention is legitimately fulfilled.


更新ログ

2016-02-09
更新。バージョン 0.05。
2015-11-15
更新。バージョン 0.04。
2015-11-13
更新。バージョン 0.03。
2015-10-23
更新。バージョン 0.02。
2015-10-16
初公開。バージョン 0.01。


ダウンロード

更新: 2015-10-16,2015-10-23
初公開: 2015年10月16日 20:05:52
最新版: 2016年02月09日 13:23:33

2015-10-16 20:05:48 (JST) in Emacs/Meadow, JRF 作成ソフトウェア, Perl | | コメント (5) | トラックバック (0)

Emacs/Meadow」カテゴリ内の最近の記事

JRF 作成ソフトウェア」カテゴリ内の最近の記事

Perl」カテゴリ内の最近の記事

批評や挨拶のためのネットコミュニティ

  • はてなブックマーク(って何?) このエントリーをはてなブックマークに追加 このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク
  • Twitter (って何?)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/93568/62487396

トラックバックのポリシー

他サイトなどからこの記事に自薦された関連記事(トラックバック)はまだありません。
» JRF のソフトウェア Tips:quail-naggy.el: 単漢字変換 Input Method for Emacs. (この記事)

コメント

book 初公開。quail-naggy-20151016.zip。バージョン 0.01。

naggy-backend.pl は jrf_semaphoreで先に技術利用していたから、バージョン 0.03 だけど、一応、quail-naggy.el の 0.01 がこの配布物のバージョンとしておく。

投稿: JRF | 2015-10-16 20:23:55 (JST)

snowboard 更新: quail-naggy-20151023.zip。バージョン 0.02。

一週間使ってみた。

気付いた部分について修正し、直せない不具合については、わかっている弥縫策と共に上の記事に追記した。修正したのは次の通り。

まず、致命的な欠陥の修正について。ピリオド "." を「。」に変換できてなかったのを修正した。ついでに、naggy-backend.pl に、オプション --punctuation-fullwidth-period を作り「、。」を「,.」で書く人に対応。ただし、「、。」を「、.」で書く人と「,。」で書く人とかにはまだ非対応。希望者があれば考える。

次に、『風』との互換性を高める修正が二つ。一つは、backspace 時、最初のページが表示されていたら、変換をキャンセルするようにした。もう一つは、ひらがな変換やカタカナ変換のとき、? や ! などの記号を半角のまま残すのではなく全角に変換するようにした。

投稿: JRF | 2015-10-23 06:50:43 (JST)

wrench 更新: quail-naggy-20151113.zip。バージョン 0.03。

naggy-backend.pl では、set-tankanji-dic をしなかった場合にも、一応、対応。

quail-naggy.el では、naggy-vk-up-kouho などを作った。仮想鍵盤上のカーソルの移動についてかなりいじった。

「カーソルの移動」というと簡単な変更のようだが、これが結構、大がかりな変更のため、もしかすると不安定になるかもしれない。その場合は、バージョン 0.02 を使って欲しい。

投稿: JRF | 2015-11-13 08:58:29 (JST)

ring 更新: quail-naggy-20151115.zip。バージョン 0.04。

単漢字変換のとき、一番最初の候補が 1ページ目に来ないときの動作を修正。

naggy-backend-command で Timeout したときに、エラーを出すようにした。頻繁に Timeout する場合は .emacs で (setq naggy-backend-timeout 30) などとして時間を延長すればいい。

仮想鍵盤上で、マウスで候補を指定できるようにした。mouse-1 で指定。mouse-2 で決定。ただし、できるので試しに作ってみただけで、あまり意味のない、使って欲しくない機能。

前回は、はからずも、13日の金曜日のリリースになってしまっていた。ウィルスチェックなどに(誤認識でも)引っかかったりするのはいやだし、縁起がよくないので早めに次のバージョンをリリースしておいた。

投稿: JRF | 2015-11-15 13:49:15 (JST)

golf 更新:quail-naggy-20160209.zip。バージョン 0.05。

euc-jisx0213 の代わりに euc-jp を使うようにした。Encode 1.64 以降では、デコードの場合はそれでいいと書いてあって、それでいいというのを確認したため。これで Encode::JIS2K とおさらばできる。

quail-naggy.el はいじってないが、一応わかりやすいようにバージョン番号だけ上げておいた。

投稿: JRF | 2016-02-09 13:31:25 (JST)

コメントを書く



(メールアドレス形式)


※匿名投稿を許可しています。ゆるめのコメント管理のポリシーを持っています。この記事にまったく関係のないコメントはこのリンク先で受け付けています。
※暗号化パスワードを設定すれば、後に「削除」、すなわち JavaScript で非表示に設定できます。暗号解読者を気にしないならメールアドレスでもかまいません。この設定は平文のメールで管理者に届きます。
※コメントを書くために<b>ボールド</b>、<pre>詩文やソースコード</pre>、<a href="">リンク</a>、その他のHTMLタグが使えます。また、漢字[かんじ]でルビが、[google: キーワード] で検索指定が使えます。


ランダムことわざ: 猿も木から落ちる。

今日のネットの話題: アジアがすごいぜ。英語やろうぜ。