modes.EMBED から で抜けるっぽくする

windows 限定 です。Firefox 4 推奨ですが、3.6でも そこそこ動いてます。
(動作確認を取ったのは、
Firefox 3.6.15(32bit) vimperator 2.4pre (created: 2010/09/22 19:04:22)
Firefox 4.0b13pre(32bit) vimperator 3.0
windows XP 32bit / 64bit)


仕組みは微妙ですが、
200msec 毎に Esc キーが 押されていないか監視するとこによって実現してます。
従って、実際には、Esc 長押しで 抜けることになります。


vimperator/embed-esc.js at master · caisui/vimperator · GitHub


監視キーコードや監視間隔は 任意に変更できます。
(指定方法は、Help に 記載しています。)


以下問題点(仕様)

Esc が 押されているか否かのみ判定しているので、だろうとだろうと反応します。
Firefox3 で inactive な 状態でも Esc に 反応する

例) modes.EMBED の 状態のまま vim に window を 切り替えて を 押しても modes.NORMAL に 戻る

Firefox4 は inactive な状態 は 無視できるが inactive な状態から embed object(flash等)を 直接クリックすると active に なったことが認識できない。

以下のコードで window が acitive か 判定を行っています。

document.documentElement.mozMatchesSelector(":-moz-window-inactive")

しかし、上記の切り替え方をすると active になっているのに、inactive を 返し続けます。
(使い方が誤っているのかもしれません)
そこで、誤認識が 分かるように inactive と 判定 時は "embed --(menu)--" と 表示されるようにしています。


上手く認識していないときは、alt+tab 等で active 化しなおす必要があります。
(inactive でも 反応して良いなら embed_esc_disabled_inactive_check=true)



最後に、監視キーコードは都度確認していますので、通常 は Esc で良いけど
特定 の flash では困るときは、autocmd で 監視キーコードを切り替え(例えば RCONTROL) れば 回避できるんじゃないかなぁ と 妄想しています。