mixiユーザー(id:15421546)

2015年01月02日20:06

12482 view

成功! ubuntu 14.10 Emacs24上で日本語をインライン入力

emacsのインストール手順は次のとおり。
ubuntuソフトウェアセンターからemacs、ならびemacs-mozcをインストール。
ホーム>.emacs.d のinit.elに、以下の内容を記述する。

Emacsでは、Controlキー + \ で日本語のインライン入力に切り替わるが、この設定では変換と無変換もホットキーとして切り替え機能を設定した。
emacsを立ち上げて変換キーを押したところ、キーに設定したプログラムが動作し、最下行に
mozc.el: Starting mozc-helper-process...done
と表示され、インライン入力が可能になった。
この設定では、Emacs内で変換キーを押せば日本語入力、無変換キーを押せば英字入力になり、fmcixのトグル動作より快適。

fcitxに続いてibusでも試したところ、Super-Spaceによって無変換入力を選択、あるいはanthy/mozcではアルファベット入力を選択することによってインライン入力が出来るようになった。

これでやっと分かって来たが、emacsではキーボード入力に使うIMシステムとしてanthy/mozcを使うとインライン入力が出来ず、入力ソースとしてemacs-mozcを起動して使うことでインライン入力が使えるらしい。
これは理解するのがとても難しい。ubuntuほかLinuxのディストリビューションからemacsが外されたのはこんな複雑な状況を説明するのが困難だからかもしれない。

------------------------------------------ ここから ---------------------------------------------------
;; mozc
(when (require 'mozc nil t)
(setq default-input-method "japanese-mozc")

;; すぐ下に変換候補を表示
(setq mozc-candidate-style 'overlay)
;; (setq mozc-candidate-style 'echo-area) ; デフォルトだとこちら(エコーエリアに表示)

;; 変換キーでon、無変換キーでoffで切り替え
(global-set-key
[henkan]
(lambda () (interactive)
(when (null current-input-method) (toggle-input-method))))
(global-set-key
[muhenkan]
(lambda () (interactive)
(inactivate-input-method)))
(defadvice mozc-handle-event (around intercept-keys (event))
"Intercept keys muhenkan and zenkaku-hankaku, before passing keys to mozc-server (which the function mozc-handle-event does), to properly disable mozc-mode."
(if (member event (list 'zenkaku-hankaku 'muhenkan))
(progn (mozc-clean-up-session)
(toggle-input-method))
(progn ;(message "%s" event) ;debug
ad-do-it)))
(ad-activate 'mozc-handle-event))
------------------------------------------ ここまで ------------------------------------------------------

半角/全角キーではなく、変換キーによるmozcのemacs内での起動をすることによって、
ubuntu 14.10, 14.04, Linux MInt 17.1 CinnamonのどれもEmacs24で日本語のインライン入力ができることを確認した。
なお、インライン入力が出来ない根本の原因はEmacsのソースの1行にバグが有るためらしい。
ソースファイルのその行を変更してビルド、インストールすればインライン入力ができるようになる。
具体的には、ソースのWM_IME_STARTCOMPOSITIONの操作を、break; するのではなく、goto dflt; にする。(ソースファイルの3,200行目あたり)

--------------------------------------------------------------
case WM_IME_STARTCOMPOSITION:
; 3199
if (!set_ime_composition_window_fn)
; 3200
goto dflt;
; 3201
else
---------------------------------------------------------------
emacsの開発グループにこの不具合を誰かが報告しているでしょうから、いずれ修正されるのでしょう。
0 0

コメント

mixiユーザー

ログインしてコメントを確認・投稿する