親指シフト実現のためのAutoHotKeyの設定

ErgoDox EZでNICOLA配列の親指シフトで日本語を入力する環境をAutoHotKeyで実装することまで決まりました。ではその環境をどうやって実現するのでしょうか?答えはAutoHotKeyの書式に従ってべたべたに書くです。現在はこんな感じです。

a::
  InputLocaleID:=GetInputLocaleID()
  if (IME_GET() && (InputLocaleID == "0x4110411")) {
    Send u
  } else {
    Send {Blind}a
  }
  Return

F23 & a::
  InputLocaleID:=GetInputLocaleID()
  if (IME_GET() && (InputLocaleID == "0x4110411")) {
    Send wo
  } else {
    Send {Blind}a
  }
  Return

F24 & a::
  InputLocaleID:=GetInputLocaleID()
  if (IME_GET() && (InputLocaleID == "0x4110411")) {
    Send vu
  } else {
    Send ^!a
  }
  Return

基本的に拾ってきたIME.ahkのIME_GET関数で現在のIMEの状態を確認して、その状態で適切なキーを送出しておしまいです。GetInputLocaleIDは自分で定義した関数で名前のまんまです。IMEがオンでも中国語のときに日本語用の親指シフトマップに従って変換してはだめなので、日本語のロケールである"0x4110411"かどうか確認しています。

例えばaのキーはIMEがオンで日本語のときに単体で押せば「う」なので"u"をSend、左の親指シフトキーと押せば「を」なので"wo"をSend、右の親指シフトキーと押せば「ゔ」なので"vu"をSendです。

最初は普段かな打ちモードだったので、そのモードでマップしていたのですが、"「"とかの記号を"Send 300d{F5}"で出せることに気がついたのでローマ字入力にしました。ただ、この方法だとIMEの入力中に混ぜられなくて、いったん確定してから打つ必要があるんですよね。まあでも直接指定できるから便利。

親指シフト用のキーは最初alt-ime-ahkを使っていたのでAltを使っていたのですが、欠点である「Altの空押しでウィンドウのメニューが開けなくなる」のを別のキーにすれば回避できることに気がついて、ファンクションキーの使わなそうな最後のほうのF23、F24にしました。ErgoDox EZを買うまで知らなかったのですが、ファンクションキーって24番まであるんですね。

IMEがオフのときにも親指シフトは使えるので、右の親指シフトとaを押したときにはCtrl-Alt-aを送っています。これはtmuxのprefix keyになっていて、Ctrl-aとかだとEmacsなどのときに困りますし、かと言ってCtrl-Alt-aは頻繁に押すのにめんどくさいという欠点がなくなります。とても便利。

当然、こんなコードを手で打つのはめんどうなのでマップを書いたcsvファイルを元にスクリプトで自動生成です。

あと、本当の親指シフトは同時押しらしくて、aを押した直後に右の親指シフトキーが押されたら「ゔ」が出るはずなのですが、この定義ファイルでは「う」が出てしまいます。これを実現しようとすると定義が複雑になってしまうので「まあいっか」という感じです。そもそも、まだ慣れてないのでそんなに早く打てませんし。

コメント

このブログの人気の投稿

五十音配列付き新下駄配列

WSLでの親指シフトはどうやらMozcで実現可能と気がつくまで

親指シフト新下駄配列の可能性