2014/10/13

Vimperator in Mac で C-[ とかが効かなかくなっていたので修正してみた

普段のブラウジングは Vimperator を使っているのですが、いつからか C-[ で Escape できなくなってました。
なんか面倒臭いなー、と思ったらソースが Github で公開されているっぽいので修正して Pull Reqest を投げてみたら merge されたやったー、というお話。

環境

Mac OSX 10.9.5
Firefox 32.0.3
Vimperator(22faadf35b32fb7d31cac323a5206c104efc4b6f)

Vimperator の key handling

ソース読んでたら、打たれたキーは最終的に toSttring される みたいで、 ctrlKey は押されているかー、とかkeyCode は何かー、とかチェックしている様子。
それで整形されて String になって処理が続いていく様子。たぶん map とかを replce するために文字列化とかしているのかな。

それはさておき、Mac の Firefox にはバグがあるっぽくて、コントロールを押すと keyCode が変わってしまうので、その場で対処している、とのこと

Firefox in Mac での KeyCode 調べと修正

window.addEventListener('keypress', function(e) { window.hoge = e; }, false);
とかして今の Mac の keyCode を見るとこんなんだった。

] keypress Control { target: <body#gsr.hp>, key: "[", charCode: 0, keyCode: 219 }
- keypress Control { target: <body#gsr.hp>, key: "-", charCode: 0, keyCode: 173 }
_ keypress Control-Shift { target: <body#gsr.hp>, key: "_", charCode: 0, keyCode: 173 }
\ keypress Control-Shift { target: <body#gsr.hp>, key: "_", charCode: 0, keyCode: 173 }
^ keypress Control-Shift { target: <body#gsr.hp>, key: "^", charCode: 0, keyCode: 54 }
全然違ったのでそれぞれで動くように ad-hoc な if 修正やら switch を追加やら
んで C-[ でちゃんと insert も抜けるようになったし

inoremap <C-]> ]]]
inoremap <C--> ---
inoremap <C-_> ___
inoremap <C-\\> \\\
inoremap <C-^> ^^^
とかも動くようになたので、C- 付きの記号5つの対応はできたっぽい。

オチ

どうせなので Pull Reqest にすっかー、ってなことで投げたら merge された。やったー。

C-[ が使えなくて困ってる Mac User の方、直りましたよー、って言おうとしたけれど build がコケる。
一応それも原因は分かったのでまた Pull Reqest 投げてます。merge されたらまた記事を書くはずなので解説はその時

0 件のコメント:

コメントを投稿