kinput2 の日本語入力オン・オフキー

前提となる環境

  1. ここでは、かな漢字変換サーバーとして canna を選択する場合のみ を考えます。サーバーとして Wnn や sj3 を用いる場合 については触れません。
  2. キーボードとしては、いわゆる「日本語106キーボード」を用 いる場合にしか通用しないと思われる部分があります。

はじめに

kinput2 で日本語入力する場合、日本語モードの ON/OFF を行うキーの設 定は意外とややこしく、カスタマイズに苦労する人もいるようです(例えば、 Control+o は別の機能に使いたいのに、どうしても kinput2 に奪 われてしまってはまる、など)。

ここでは、それらのキーの設定がどのようにして決まっているのかを説明 します。カスタマイズしようとする方の一助となれば幸いです。

kinput2 プロトコルと XIM プロトコル

まず、カスタマイズを大きく左右する要素が、「言語入力プロトコル」で す。これは、kinput2 と日本語入力しようとするアプリケーションの間の「デー タのやりとりの形式」のことです(これは、kinput2 とかな漢字変換サーバー の間のプロトコルとは違います。そちらは「かな漢字変換プロトコル」です)。 ※「言語入力プロトコル」というのは私が勝手にでっちあげた言葉で、正式な 用語ではありません。ご注意ください。

これには、おおざっぱに言って、「kterm 専用のもの」と「それ以外のア プリケーションに共通しているもの」の2つがあります。前者が「kinput2 プ ロトコル」で後者が「XIM プロトコル」です。詳しくは FreeBSD Q&A No.360 をご覧ください。

両者を比べると、XIM プロトコルの方が汎用的で新しいです。kinput2 プ ロトコルは、XIM のような汎用的な枠組みがない時代に、kterm だけでも日本 語入力ができるように、ということで考えられたもので、現在では推奨されな いはずです。kterm も、現在では両方のプロトコルで入力が可能になっていま す。

また、kinput2 プロトコルで kterm に入力を行う場合、日本語モードがオ ンになっていると、未確定文字が一切ないときでも、半角スペースやリターン キーの入力が kterm に伝わらない(無視される)、という問題があります。

日本語入力の設定を1ヶ所で集中して行うためにも、kinput2 プロトコル は使用しないようにして、XIM プロトコルで統一することをお薦め します。

ただ、XIM プロトコルもいろいろと問題は多いらしく、今後は古い規格と して滅んでいく運命にあるようです。その辺りの事情については、 詳しく書かれた記事をご 参照ください。本ページでは、XIM の枠組を超える話には触れません。

さて、日本語入力を ON/OFF するキーがどこで決まっているか、ですが、

で違いがあり、さらに、ON にするキーの方については で違いがあります。何ともややこしい話ですね。いっぺんに考えるのは無理な ので、順に述べていきましょう。

日本語入力を ON にするキー

まず ON にする方のキーですが、これを決めるのは kinput2 プロトコルではアプリケーション(kterm)の側、 XIM プロトコルではkinput2(より一般には、XIM サーバー)の側 および canna の設定と決まっています。

日本語入力を ON にするキー
プロトコル 何が決めるのか
kinput2 アプリケーション(kterm)
XIM XIM サーバー(kinput2)
canna の設定

kinput2 プロトコルの場合

上述したとおり、できれば kinput2 プロトコルではなく XIM プロトコル を使うことをおすすめします。それでも、何らかの事情で kinput2 プロトコ ルを使う必要のある方は以下を参照してください。

kterm で kinput2 プロトコルを用いる場合は、標準では 「Shift+SPACE」と「CTRL+半角/全角」に日本語入力 の開始が割り当てられています。これを変更するには、 FreeBSD Q&A No.360 にあるように kterm のリソースで指定してく ださい。※ kinput2 プロトコルを使う場合は、kterm 以外のリソースをいく らいじっても意味がありません。

リソースを記述するファイルが .Xresources なのか .Xdefaults なのか、 単に書くだけでいいのかそれともリソースファイルの読み込み処理を初期化ス クリプトか何かに追加する必要があるのかは環境によって違います。Linux な ら、ディストリビューション毎に違っているのでしょう…たぶん。その辺りは 自分で調べてください。

XIM プロトコルの場合

日本語入力を ON にするキーは

の2ヶ所で決まっています。

XIM サーバーの設定

XIM サーバーの設定については、kinput2 を用いる場合、標準では Shift+SPACECtrl+半角/全角 で日本語入力が ON になるようになっています。これをカスタマイズするには、kinput2 のリソー スを記述するファイルの中で


Kinput2*ConversionStartKeys: \
	Ctrl<Key>Henkan_Mode \n\
	Alt<Key>Zenkaku_Hankaku

のように書いてください(これは、「Control+変 換」と「Alt+半角/全角」で ON にする例)。

上述のように、リソースを記述するファイルが .Xresources なのか .Xdefaults なのか、単に書くだけでいいのかそれともリソースファイルの読 み込み処理を初期化スクリプトか何かに追加する必要があるのかは環境によっ て違います。やはり、その辺りは自分で調べてください。

canna の設定

さらに、kinput2 で canna を使って日本語入力する場合は、 canna 側で日本語入力 ON に設定されているキー追 加されます。

これは、標準では「Control+o」と「Shift+半角/全角 」になっています(※注)。したがって、 Control+oで日本語入力が ON になってしまうのを解除するには、 ~/.canna


(global-unbind-key-function 'japanese-mode)

(set-key 'alpha-mode "\C-o" 'self-insert)
のようにする必要があります(前者なら Shift+半角/全角 も解除 される。後者なら Control+o だけが解除される)。

また、日本語入力 ON を Control+o から Control+\ に変更するには、上のように Control+o の設定を解除した上で、さらに ~/.canna


(global-set-key "\C-\" 'japanese-mode)

ないし


(set-key 'alpha-mode "\C-\" 'japanese-mode)

とすればいい………はずなのですが、kinput2 のバグのためこれは効きません。 他にいくつか見つけたバグとともに、バグ修正のパッチ を用意しましたのでそちらをどうぞ。

ただし、canna 側で日本語入力 ON に設定されているキーのうち、 2つ以上のキー列からなるものは kinput2 には伝わりません。 例えば


(set-key 'alpha-mode "\C-x\C-o" 'japanese-mode)

のようにした場合、自動では C-xC-o が日 本語入力の開始にはならないのです。日本語入力の ON がキー1発で実現でき ないのは不便でしょうから、そういう設定は普通はしないのでしょうが、何ら かの理由でどうしてもそのようにしたい方は、~/.canna ではな く上述の X Resource により指定してください。

日本語入力を OFF にするキー

OFF にする方のキーは、次の2つで決まります。 kinput2 プロトコルと XIM プロトコルの違いはありません。

canna の設定

canna の設定の方は、標準では、OFF のキーは ON のキーと同じく 「Control+o」と「Shift+全角/半角」に割り 当てられています。(これも※注参照)

これも、~/.canna で変更できます。解除するには


(global-unbind-key-function 'alpha-mode)


(set-key 'empty-mode "\C-o" 'undefined)

でよいでしょう。

Control+\ を OFF に割り当てるなら、さらに


(set-key 'empty-mode "\C-\" 'alpha-mode)
で OK です。こちらは、下のパッチを当てなくても効 きます。

kinput2 固有のキー

canna を使う場合、kinput2 には「Shift+SPACE で日本語 モード OFF」という設定が最初から組み込まれています。これは、kinput2 の プログラムを修正してコンパイルし直さない限り変更も解除もできませ ん。

この日本語モード終了のキーを X の Resource で設定できるようにするパッチを公開されている方もいます。 このパッチについての作者の方のコメントもどうぞ(04/01/20 部です)。

kinput2 のパッチ(2004,9/28 修正)

「XFER」「変換」「半角/全角」

canna の説明 の文書によれば、canna の標準の日本語 ON/OFF のキーは Control+oXFER ということになっています。とこ ろが、いわゆる日本語106キーボードには「XFER」というキーは見 当たりません。

106キーボード上で XFER に対応するキーはというと、まず 「変換」キーが思い当たります。ところが、kinput2 では「 変換」キーを押しても何も起こらず、代わりに「Shift+半角/全角 」が XFER キーとして振る舞います。

これは、もともと canna が NEC で開発されており、NEC キーボードを前提 とした作りになっていたことと関連しているのでしょう。 NEC キーボードの XFER キーは、X window 上では大雑 把に言うと「Kanji」というキーとして認識され、kinput2 も 「Kanji」というキーを XFER として扱うように 作られています。しかし、106 キーボードでは「Kanji」として認 識されるのは「Shift+半角/全角」なのです。「変換」 の方は、X window では「Henkan_Mode」というキーとして認識さ れるようになっています。

この辺りの事情については、Canna ML で今さんが説明してくださいました。

(今さんの説明その1) Keysym の XK_Kanji を xfer や「変換」に当たるものにしましょう、という のを X11 研究会というところで提言しておりましたので、xfer は XK_Kanji が正しいものと思います。
(今さんの説明その2) 「XK_Kanji はかな漢字変換をオン/オフするキーに割り当てよう」というのが オリジナルアイデアです。106 キーボードの「変換」キーは厳密にはそのよう な目的のキーではなくて、106 キーボードであれば「漢字」キー(つまり、Alt + 半角/全角)がその役割になりますね。 もっと X のキーの考え方に基づいて見ると、X の XK_Kanji に当たるキーは 106 キーボードには存在しないことになってしまいます。というのは、Alt + 半角/全角は 106 キーボード的には「漢字」キーかもしれませんが、X からみ ると Alt というモディファイアキーが押されつつ「半角/全角」が押された以 上の何者でもないですから。 ということで、「変換」が XK_Henkan_Mode はそれでもかまわないと思います。

とは言うものの、やっぱり「XFER」と「NFER」が「変換」と「無変換」に 対応しないのはすっきりしませんし、さらに canna の XFER には「日本語モー ド ON」だけでなく、「かな漢字変換の実行」の役割も割り当てられているの ですから、やはり「変換」キーが「XFER」に対応していてもおかしくはないよ うに思います。そこで、kinput2 が「Henkan_Mode」も 「XFER」として扱うようなパッチを用意しました。

パッチ本体

以下のパッチを kinput2 に当てて、コンパイルし直してください。 kinput2 が、「変換」キーを「XFER」として扱うようになります。 また、~/.cannaで「変換」キーの機能を「\Xfer」 としてカスタマイズすることも可能になります。

------->kinput2.patch.gz (kinput2-v3.1用)

なお、当然 Canna 3.7 用 wchar パッチXIM 用 kinput2 パッチも当てておくべきです。

([2004,7/6] ほぼ同時期に、同じようなこと を考えていた方が他にもいらしたんですね。 こちらでも、「変換」キーを「\Xfer」として認識させるパッチ が公開されています。

このパッチは同時に以下のようなバグ修正・機能追加も行います。

  1. PageUp キーと PageDown キーの割り当てが逆 になっていたのを直した(バグ修正)
  2. canna の設定で、日本語入力を ON にするキーとして Control+[, Control+\, Control+], Control+^, Control+_の5 つを選んだとき、XIM プロトコルでこれらが有効になるようにした(バグ 修正)
  3. [2004,9/28] 最近の canna とともに使 うとき、XK_kana_*の keysym を持つキーを入力しても落ちな いようにした(バグ修正)。この部分は Canna ML で相田さんに修正法を教 えていただきました。
  4. [2004,9/28] XIM プロトコル使用時 に、canna の設定で日本語モード ON に設定されていたキーが、対応する keysym を2つ持つ(例えば \BackspaceC-hbackspace の2つに対応する、など)場合、その個数の分だ け canna 上の key code が大きい方から順に日本語モード ON のキーとして 効かなくなるバグを修正した(バグ修正)。
  5. End, Zenkaku_Hankaku キーが効くようにした(機能追加)
  6. Hiragana, Katakana, 英数トグル キーが効くようにした (機能追加)。ただし、これらは xmodmap コマンドなどで適 当なキーに割り当ててやらなければ意味のないキーであることに注意。
  7. [2004,9/28] ~/.cannaで カスタマイズ可能なキーとして、\Pf1\Pf10F11F20に割り当てた(機能修正)。これまではプ ログラム中の記述がおかしくて、\Pf5\Pf10に対 応するキーはキーボード上に存在しませんでした。

設定例

ここでは、日本語入力の ON/OFF を「Control+\」と「変 換」に割り当て、他のキーは kinput2 に使われず素通しにする設定例 を挙げます(ただし、Shift+SPACEが日本語の OFF になってしま うことだけは避けられませんし、「Shift+半角/全角」が「 変換」と同じになってしまうことも避けられません。後者が嫌な方は、 xmodmap コマンドで「半角/全角」から「Kanji」の keysym を 剥ぎ取るか、上のパッチにさらに手を入れて「Kanji」を 「XFER」として扱う処理を削除してください)。

  1. 上のパッチを当てて、kinput2 を作り直す。
  2. .canna に、以下のような記述を追加する。
    
    ; 日本語モードへの移行は C-\ で。
    (set-key 'alpha-mode "\C-o" 'self-insert)
    (global-set-key "\C-\" 'japanese-mode)
    
    ; 読みがないときに C-\ で日本語モード終了。
    (set-key 'empty-mode "\C-o" 'undefined)
    (set-key 'empty-mode "\C-\" 'alpha-mode)
    
  3. kinput2 の起動オプションに +kinput を付け加えて、kinput2 プロト コルは使用しないようにする。
  4. kterm の起動オプションに -xim を付け加えるか、kterm のリソースに OpenIm: yes を付け加えて、kterm が XIM プロトコルを使う ようにする。

計算機関連のトップページへ
全体のトップページへ
井汲 景太 <ikumikeita@home.jcom.ne.jp.NOSPAM.>(迷惑メールお断り)
最終更新日: 2005年9月18日