diff options
-rw-r--r-- | feedSomeKeys_3.js | 49 | ||||
-rw-r--r-- | happy_hacking_vimperator.js | 5 |
2 files changed, 36 insertions, 18 deletions
diff --git a/feedSomeKeys_3.js b/feedSomeKeys_3.js index 328ed34..82d15ba 100644 --- a/feedSomeKeys_3.js +++ b/feedSomeKeys_3.js @@ -34,7 +34,7 @@ THE POSSIBILITY OF SUCH DAMAGE. // INFO {{{ let INFO = <> - <plugin name="feedSomeKeys" version="1.9.2" + <plugin name="feedSomeKeys" version="1.9.3" href="http://github.com/vimpr/vimperator-plugins/blob/master/feedSomeKeys_3.js" summary="Feed some defined key events into the Web content" lang="en-US" @@ -140,7 +140,7 @@ let INFO = <> :lazy fmaps -u='http://code.google.com/p/vimperator-labs/issues/detail' u </ex></code> </plugin> - <plugin name="feedSomeKeys" version="1.9.2" + <plugin name="feedSomeKeys" version="1.9.3" href="http://github.com/vimpr/vimperator-plugins/blob/master/feedSomeKeys_3.js" summary="Web コンテンツに直接キーイベントを送ります。" lang="ja" @@ -309,6 +309,10 @@ let INFO = <> '\'': KeyEvent.DOM_VK_QUOTE }; + const State = { + feeding: false + }; + function id (v) v; @@ -359,22 +363,35 @@ let INFO = <> } function feed (keys, eventNames, target) { + function finalize (){ + modes.passAllKeys = _passAllKeys; + State.feeding = false; + } + + State.feeding = true; + let _passAllKeys = modes.passAllKeys; - modes.passAllKeys = true; - modes.passNextKey = false; - - for (let [, keyEvent] in Iterator(events.fromString(keys))) { - eventNames.forEach(function (eventName) { - let ke = util.cloneObject(keyEvent); - let [, vkey, name] = eventName.match(/^(v)?(.+)$/); - if (vkey) - virtualize(ke); - let event = createEvent(name, ke); - target.dispatchEvent(event); - }); + + try { + modes.passAllKeys = true; + modes.passNextKey = false; + + for (let [, keyEvent] in Iterator(events.fromString(keys))) { + eventNames.forEach(function (eventName) { + let ke = util.cloneObject(keyEvent); + let [, vkey, name] = eventName.match(/^(v)?(.+)$/); + if (vkey) + virtualize(ke); + let event = createEvent(name, ke); + target.dispatchEvent(event); + }); + } + } catch (e) { + finalize(); + throw e; } - modes.passAllKeys = _passAllKeys; + finalize(); } function makeTryValidator (func) @@ -696,7 +713,7 @@ let INFO = <> ); __context__.API = - 'VKeys feed getFrames fromXPath virtualize unmap findMappings list'.split(/\s+/).reduce( + 'State VKeys feed getFrames fromXPath virtualize unmap findMappings list'.split(/\s+/).reduce( function (result, name) (result[name] = eval(name), result), {} diff --git a/happy_hacking_vimperator.js b/happy_hacking_vimperator.js index efa618b..94e2fd6 100644 --- a/happy_hacking_vimperator.js +++ b/happy_hacking_vimperator.js @@ -36,7 +36,7 @@ let PLUGIN_INFO = <VimperatorPlugin> <name>Happy Happy Vimperator</name> <description>This plugin makes you to True Vimperatorer</description> - <version>2.5.1</version> + <version>2.5.2</version> <author mail="anekos@snca.net" homepage="http://d.hatena.ne.jp/nokturnalmortum/">anekos</author> <minVersion>3.0</minVersion> <maxVersion>3.1</maxVersion> @@ -3322,7 +3322,8 @@ let PLUGIN_INFO = around(events, 'onKeyPress', function (next, [event]) { let keyStr = events.toString(event); - if (!events.feedingKeys && uncleanKeys.some(function(v) v == keyStr)) { + let fmaping = let (fmap = liberator.plugins.feedSomeKeys_3) (fmap && fmap.API.State.feeding); + if (!fmaping && !modes.passAllKeys && !events.feedingKeys && uncleanKeys.some(function(v) v == keyStr)) { return kill('key')(event); } next(); |