時々帖

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

iiimecfのキー設定

iiimecfのキーバインドを変更する方法を調査してみた。

Emacs + IIIMECF + ATOK X3 = 結構シアワセ

やり方は上記のページに書いてあったのだが、文節移動をCtrl-f、Ctrl-bに割り当てる方法が分からない(elispの変更のみで)。
基本的にはiiimcf.elのiiimcf-keycode-spec-alistの要素にキーとその時の動作を定義したリストを追加してやればよい。
例えば、leftキーと同じことをCtrl-kに割り当てたいなら、

(11 37 65535)


を追加してやればよい。
1番目の要素はキーを表していて(この場合はk)、2番目は動作(この場合はleft)、3番目はよくわからない。

問題は文節前移動、文節後移動はShift+right、Shift+leftで出来るのだが、これをどうやってCtrl-f、Ctrl-bに割り当てるかだ。
right、left単独ならよいが、Shiftをどうやったら割り当てられるのか。

ソースを読んでみると、4番目の要素が修飾キーに関係しているっぽい。
修飾キーはiiimcf-modifier-spec-alistで各キーごとにどのビットを立てるか定義されていて、shiftキーは1となっている。
そこで4番目の引数に1を追加してやると。ビンゴ!!

ということで、iiimp.elに以下のような変更を加えてやった。

*** iiimcf.el.old  Sun Dec  9 08:54:54 2007
--- iiimcf.el Fri Dec 4 20:48:20 2009
***************
*** 284,289 ****
--- 284,298 ----

(defvar iiimcf-keycode-spec-alist
`((13 10 0)
+ (11 37 65535) ; C-k -> left
+ (12 39 65535) ; C-l -> right
+ (9 37 65535) ; C-i -> left
+ (15 39 65535) ; C-o -> right
+ (7 27 65535) ; C-g -> escape
+ (16 38 65535) ; C-p -> up
+ (14 32 65535) ; C-n -> space
+ (2 37 65535 1) ; C-b -> shift+left
+ (6 39 65535 1) ; C-f -> shift+right
(32 32)
,@(mapcar #'(lambda (x) (list x x 0))
(iiimcf-numseq 1 31))


ただ、ソースをもう一度みてやると、この設定では、Ctrl-fを押したときにCtrlとShiftキーがどちらも送信されるように見える。
まあ、動いているからいいか。。
スポンサーサイト

テーマ:UNIX/Linux - ジャンル:コンピュータ

  1. 2009/12/05(土) 01:34:29|
  2. Emacs
  3. | トラックバック:0
  4. | コメント:0

ATOK+IIIMECF+Emacs

久々の日記?更新。

Solaris9上のEmacsから使える日本語入力を探していたのだが、SolarisにはATOKが入っていることで使えるか試してみた。
なぜか、Emacs22 + iiimecf + atok12 on Solaris9という構成では、変換完了直後にEmacsが固まってしまい使えなかった。
(setq debug-on-quit t)としてCtrl-gを押して、どこで止まっているか調べてみると、
iiimp.elの以下の部分で止まっていたがどうにも直せそうになかった。
(defun iiimp-check-channel-bytes (com-id start bytes wait)
(cond ((eq wait t)
(catch 'tag
(while (< (point-max) (+ start bytes))
(if (iiimp-check-channel-connection com-id)
(accept-process-output ;; ←ここで止まっていた
(iiimp-com-id-process com-id)
1)
(throw 'tag nil)))
t))


考えた挙句、別のマシン(Solaris10)でiiimdを立ち上げておいて、そこにiiimecfからTCPで接続しにいくようにしたら使えるようになった。
やったことは覚えている範囲では次の通り。

/etc/iiim/iiimd.xml.confを編集して、以下の部分をコメントアウトしてhostnameを変更した。
あとaclディレクティブで接続元に対してアクセス権を出してやる必要がある。
 <listen type="tcp">
 <hostname>0.0.0.0</hostname>
<port>9010</port>
</listen>


これで、iiimdを立ち上げ直してやる
$ iiimd


そして、.emacsに以下のように記述してやった
(setq iiimcf-server-control-hostlist (list "tcp:192.168.1.12:9010"))
(setq iiimcf-server-control-default-language "ja")
(setq iiimcf-server-control-default-input-method "atokx2")
(setq default-input-method 'iiim-server-control))
(require 'iiimcf-sc)


これで、ちょっとモッサリ感はあるがEmacsでATOKが使えるようになった。
ユーザーはiiimecfの中でlogin名を使って設定しているようで、サーバ側の/var/lib/iiim/le/atokx2/users/の下にユーザごとに辞書ファイルなどをおいたディレクトリが作成される。
  1. 2009/12/05(土) 00:45:40|
  2. Emacs
  3. | トラックバック:0
  4. | コメント:0
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。