blechmusikの日記

いろいろなことを書いています。

日本語配列で [Shift] + 文字キーを打鍵したときの不具合を解消した

かな入力の日本語配列Shift + 文字キーを打鍵すると、文字が正常に出力されないとの報告を受けた*1。具体的には、かな入力時に、Shift + 文字キーを設定していない下駄配列で、Shift + 文字キーを入力しても英語配列の文字が正常に出力されないというものだ。これはつぎのような現象といえよう。すなわち、Shift + 文字キーを設定していない日本語配列では、かな入力で、Shift + 文字キーをすれば英語配列の文字が出力されると期待されているところ、これを打鍵しても英語配列の文字が出力されることはない。
本日公開した版では、この問題に対処した。以下で簡単に説明しよう。
今回の改訂のポイントは「かな入力」だ。かな入力は、ローマ字入力と異なり、Shift + 文字キーで出力することは原則としてできない。かな入力の設定を想起すれば気づくことだろうが、かな入力にとり、単独の文字キーのみならず、Shift + 文字キー日本語配列の一部なのだ。それでは、かな入力の日本語入力で英語配列をどのようにして出力すればよいのだろうか。
かな入力で英語配列の文字を出力する方法としては、大別して二種類ある。第一は IME を英数モードに切り替えて英語配列の文字を出力するものだ。第二は、英数文字を unicode 文字として出力するものだ。後者から説明しよう。AutoHotkey の派生である AutoHotkey_L には、 UTF-16unicode 文字を出力することができる。たとえば、半角アルファベット"A"については、{U+0041} と記述することにより、unicode 文字として出力出来る*2。前者については Caps Lock を出力することと、AutoHotkey 用ライブラリ IME.ahk を使用して、英数モードに移行するよう設定する手法がある*3
今回の改訂では、Caps Lock を出力し、英語配列の文字を出力して、再度 Caps Lock を出力することで、かな入力で英語配列の文字を出力するよう設定した。ここで注意することが一つある。日本語環境での AutoHotkey は、Caps Lock という情報を出力しようとすると、実際には、Caps Lock を押し下げたままにせよ、との情報を出力してしまうのだ*4。これを回避するために、Caps Lock のキーコードである vkf0sc03A を出力するようにした。これで、Caps Lock を押し下げて押し上げるという動作を正常に出力することができる。これらの処理を箇条書きであらわすと、以下のようになる。

  1. Caps Lock を出力(実際には vkf0sc03A を出力)することにより、日本語配列から英語配列に切り替え
  2. 英語配列Shift + 文字キーの設定に割り当てている文字を出力
  3. Caps Lock を出力(実際には vkf0sc03A を出力)することにより、英語配列から日本語配列に切り替え

今回の改訂により不具合が生じるときには、ご報告ください。

*1:2010-01-14 - blechmusik2の日記

*2:現在完成が近づいていると思われる AutoHotkey_L の Unicode 版たる AutoHotkeyUについても、同様のことが当てはまる。

*3:Index of /_pub/eamat/MyScript にて IME.ahk の最新版を入手できる。

*4:厳密には、Caps Lock を押し上げる処理を省いてしまう。