試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

「ろ」と「ー」が区別できる(JISかな配列に完全対応した)かな入力環境

SCIM+Anthyでもuim+Anthyでも、かな入力はできるのだが、半角英数の文字と仮名とを対応させて出力する形のためか、本来区別されるべき「ろ」と「ー」は、どちらも元の文字が「\」(backsplash)のため、「ー」を入力するときに毎回シフトキーを押すか、「ー」のキーに「|」(bar)のコードを割り当てたりしなくてはならなかった。

ところが最近、この問題が遂に解決した。SCIM+Anthy

  • scim-1.4.6以降
  • scim-anthy-1.2.3以降
  • scim-bridge-0.4.12以降(scim-bridgeを使用しない場合は不要)

のバージョンを使用すればよい。
バージョンアップ後SCIMを終了させて、設定([ホームディレクトリ]/.scim/config)を一度消してみたところ、手元の環境でも動作が確認できた。
開発者の皆様には心から感謝!

関連URL:

かな入力でJISかな配列に対応させる古い方法

「ろ」と「ー」の2つのバックスラッシュの内の片方を、識別可能にするために変える

SCIM+Anthyの最新版ではJISかな配列に完全対応しているが、それ以外のかな入力環境では、キーコードの割り当て変更が必要。それを自動的に行うためには、

  1. キーコード変更の設定ファイルを用意し、
  2. それを適用するための準備をする

という作業を行う。

[一部]ファイル名: ~/.Xmodmap

keycode 133 = bar backslash

(2010/4/10)環境(ディストリのバージョンや設定)によってはこの値は変わるので、後述の方法でキーのキーコードを調べて入れる。Mandriva Linux 2010.0では

keycode 132 = bar backslash

となる。
${HOME}/.Xmodmapというファイル名で保存すると、デスクトップ環境によっては自動的にキーマップ変更が適用される。ウインドウマネージャのみの環境では、起動時に実行されるスクリプト

xmodmap ~/.Xmodmap

と記述して実行させる必要がある。

制約: 変更したキー(「\」と「|」)の入力方法が変わる

当然のことながら、このキー割り当て変更を行った場合、日本語を入力していないときに「ー」のキーでバックスラッシュは入力できず、代わりに「|」が出力される。上の設定例では、シフトキーを使用時にバックスラッシュが入力できる。

補足: キーコードについて

xevというコマンドをX上の端末(ターミナル)のシェルから実行すると、イベントのテストができ、押されたマウスのボタン番号や、押されたキーに割り当てられたコード番号なども分かる。「ー」のキーを押すと

KeyPress event, serial 31, synthetic NO, window 0x3a00001,
    root 0x1a5, subw 0x0, time 89027614, (-137,383), root:(414,812),
    state 0x10, keycode 133 (keysym 0x5c, backslash), same_screen YES,
    XLookupString gives 1 bytes: (5c) "\"
    XmbLookupString gives 1 bytes: (5c) "\"
    XFilterEvent returns: False

と、133番でバックスラッシュに割り当てられていることが分かる。同様に「ろ」のキーは

KeyPress event, serial 31, synthetic NO, window 0x3a00001,
    root 0x1a5, subw 0x0, time 89133731, (251,-104), root:(802,325),
    state 0x10, keycode 211 (keysym 0x5c, backslash), same_screen YES,
    XKeysymToKeycode returns keycode: 133
    XLookupString gives 1 bytes: (5c) "\"
    XmbLookupString gives 1 bytes: (5c) "\"
    XFilterEvent returns: False

と、211番でバックスラッシュであることが分かる。キー割り当てを変更した後の「ー」キーは、

KeyPress event, serial 31, synthetic NO, window 0x3e00001,
    root 0x1a5, subw 0x0, time 90615829, (-128,-49), root:(423,380),
    state 0x10, keycode 133 (keysym 0x7c, bar), same_screen YES,
    XLookupString gives 1 bytes: (7c) "|"
    XmbLookupString gives 1 bytes: (7c) "|"
    XFilterEvent returns: False

と、バーに割り当てられていることが分かる。

関連記事: