[yamy]モディファイヤキーがおかしい


Windows7 64bitにしたら窓使いの憂鬱がドライバがどうのこうのというエラーダイアログが出てインストールに失敗しているようなのでyamyをインストールしてみましたがこちらも不具合が続出して苦労しました。

Ctrlキーが押しっぱなしになる

左CtrlキーとCapsLockキーを入れ替えてCapsLockキーを押すとCtrlキーが押されたままの状態となり文字入力がファイル操作がしづらくなったりできなくなったり深刻な事態に。

Ctrlキーを両方押したりいろいろなキーを押しまくっても解除できず厄介でした。

右Shiftキーが機能しない

yamyを起動すると右Shiftキーを押しながらキー入力しても大文字ではなく小文字のまま入力される現象が発生しました。しかし、現時点ではこの現象を再現できず、もしかしたらKeyswapというフリーソフトを試してみたのが影響を及ぼしたかもしれません。

右Shiftキーがが押しっぱなしになる

右ShiftキーはWindows内で特別扱い(LLフックした際もE0-が付いたりする)されているそうなので、右Shiftキーに左Shiftキーを割り当ててしまう(等価)ほかはないようです。なお、109.mayuには既にリンク先にあるような設定は記述済みで特に何もする必要はありませんでした。

readme.txtを読むべし

窓使いの憂鬱と同じような感覚でいましたが、キー入力置換がドライバベースからユーザモードフックベースに変更されたことに伴い問題があるのでyamyフォルダ内にあるreadme.txtをしっかり読んでおいたほうがいいです。

NLSキー

日本語環境の場合、日本語処理に使われるいくつかのキーに対してはWH_KEYBOARD_LLフック前に特殊処理が行われるため、yamyによって正常にフックできません。
以下、便宜上これらのキーをNLSキー(National Language Support Key)と呼びます。

キーボードレイアウトドライバとしてkbd106.dllを用いている場合はNLSキーは以下の4つです。
# []内はスキャンコード
* 半角・全角[0x29]
* 英数(CapsLock)[0x3a]
* ひらがな[0x70]
* 無変換[0x7b]

これらNLSキーを使用する場合はE0プレフィックスを付加することにより、別キーに変換するようにします。

workaround.mayu

E0プレフィックスを使用した具体例が記述されています。これを参考に設定を記述しました。

といってもE0をつけただけなんですが・・。

このファイルにいろいろ記述してありますが、ほとんどが109.mayuに書いてあることであり、なぜworkaround.mayuに再び書かれているのかよくわかりません。たとえば、

def key E0半角/全角 E0漢字 E0Kanji    = E0-0x29 # 半角/全角 漢字

という行は109.mayuの69行目に同じものが書かれています。よって、上のような定義の部分は使用せずNLCキーにE0をつける部分だけ自作の.mayuファイルに記述しました。

mod control += E0英数
key *E0英数  = *LControl
mod shift += !!!E0無変換
key *E0無変換 = *LShift
mod windows += E0ひらがな
key *E0ひらがな = *RWin

なお、このような変更を行った場合、.mayuを再読込するだけでは反映されず、yamy.exe自体を再起動またはOSの再起動またはログオフが必要なことがありました。今は普通に再読込で反映されているので何か操作がおかしかっただけかもしれませんが。

また、yamy.iniにおいてescapeNLSKeys=1としなければ反映されませんでした。よくわかってないなぁ。0のままでも動くはずだと思うんですけど。ちょっと試行錯誤で混乱している部分があります。鵜呑みにはしないでください。

workaround.reg

以上のような変更を行った場合、yamyが動作していない場合これらのキーが機能しなくなるという副作用があるとのことです。

その対策としてworkaround.regというファイルを使ってレジストリの書き換えをする機能が実験的に用意されています。

yamy起動時にレジストリをworkaround.reg相当に書き換えてから(ログアウトすることなく)OSにScancode Map読み込ませた後、すぐにレジストリを元に戻します。yamy終了時には(レジストリは既に元に戻っているので)単にOSに再読み込みのみを指示します。これにより、yamyの動作中のみNLSのエスケープを実現します。

この機能はデフォルトでは無効であり、有効にはyamy.ini内のescapeNLSKeys=0という部分をescapeNLSKeys=1に変更します。

管理者として実行する

yamy.exeは管理者として実行しないとエラーが発生するようです。また、管理者権限が必要な常駐アプリはスタートアップフォルダに追加するのではなくタスクスケジューラに登録してスタートアップさせるべきとの事。

Windows 7 への yamy のインストール – kskメモ置き場

まとめ

  • 不具合はE0をつけずにNLSキーをいじったことによるもののようでした
  • yamy.iniにおいてescapeNLSKeys=1とする
  • 管理者として実行する

よくわかってないのであくまでも参考にする程度にしてください。