aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--feedSomeKeys_3.js49
-rw-r--r--happy_hacking_vimperator.js5
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();