Mona で CapsLock と LCtrl を入れ替えたい
エディタに Emacs キーバインディングを少しずつ追加しているので Mona で CapsLock と LCtrl を入れ替えたい。
キーボードドライバで keymap を入れ替えれば OK かと思いきや上手くいかない。
Ctrl-a のつもりで CapsLock-a をすると、CapsLock を押しつづけているのにもかかわらず a を down する前に CapsLock の up がやってくる。何度も確かめたが挙動は変わらない。
Linux 上で xev を起動して試してみるとそんな挙動は見られない。QEMU のバグか?と思いぐぐっても見つからない。念のため QEMU のソースコード見たら仕様だった。
case 0x3a: /* caps lock */ /* SDL does not send the key up event, so we generate it */ kbd_put_keycode(keycode); kbd_put_keycode(keycode | 0x80); return;
「SDL は CapsLock の up イベントを通知してくれないので down された直後に up も送っちゃうよ」だそうだ。CapsLock を元の用途通りに使うなら確かにこれで問題ないのだが困ったな。
SDL にがんばって欲しいところ。
追記
"-k ja " オプションで起動すると回避できる。理由は調べてない