From d3b3936580f269b9cc9c4f9b634aa3edc426ff8d Mon Sep 17 00:00:00 2001 From: anekos Date: Mon, 25 Aug 2008 13:39:03 +0000 Subject: setup の第2引数に true、 もしくは:fmap! で仮想キーコードでのイベント送信をできるようにした。 git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@18219 d0d07461-0603-4401-acd4-de1884942a52 --- feedSomeKeys.js | 101 +++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 85 insertions(+), 16 deletions(-) diff --git a/feedSomeKeys.js b/feedSomeKeys.js index f3058f0..d582148 100644 --- a/feedSomeKeys.js +++ b/feedSomeKeys.js @@ -20,6 +20,8 @@ * :fmapc * :feedmapclear -> 全てを無に帰して元に戻す * + * :f[eed]map! lhs -> "!" をつけると、仮想キーコードでイベントを送るように + * * == LDR の場合 == js < ') != 0) { @@ -124,7 +178,7 @@ function replaceUserMap(origKey, feedKey){ function(count){ count = count > 1 ? count : 1; for (var i=0; i "<" + if (useVkey && (keyCode = getKeyCode(keys[i], true))) { + var charCode = 0; + } else { + var charCode = keys.charCodeAt(i); + keyCode = 0; + } + if (keys[i] == '<'){ var matches = keys.substr(i + 1).match(/^((?:[ACMSacms]-)*)([^>]+)/); if (matches) { if (matches[1]) { @@ -200,9 +259,18 @@ function feedKeyIntoContent(keys){ } if (matches[2].length == 1) { if (!ctrl && !alt && !shift && !meta) return false; - charCode = matches[2].charCodeAt(0); + if (useVkey && (keyCode = getKeyCode(matches[2], true))) { + charCode = 0; + } else { + charCode = matches[2].charCodeAt(0); + } } else if (matches[2].toLowerCase() == "space") { - charCode = KeyEvent.DOM_VK_SPACE; + if (useVkey) { + charCode = 0; + keyCode = KeyEvent.DOM_VK_SPACE; + } else { + charCode = KeyEvent.DOM_VK_SPACE; + } } else if (keyCode = getKeyCode(matches[2])) { charCode = 0; } else { @@ -214,6 +282,7 @@ function feedKeyIntoContent(keys){ shift = (keys[i] >= "A" && keys[i] <= "Z"); } + //liberator.log({ctrl:ctrl, alt:alt, shift:shift, meta:meta, keyCode:keyCode, charCode:charCode, useVkey: useVkey}); var evt = content.document.createEvent('KeyEvents'); evt.initKeyEvent('keypress', true, true, content, ctrl, alt, shift, meta, keyCode, charCode); destElem.document.dispatchEvent(evt); @@ -225,15 +294,15 @@ function feedKeyIntoContent(keys){ // Command // -------------------------- commands.addUserCommand(['feedmap','fmap'],'Feed Map a key sequence', - function(args){ + function(args, bang){ if(!args){ echo(feedMaps.map(function(map) map.description.replace(//g,'>')),true); } var [ ,lhs,rhs] = args.match(/(\S+)(?:\s+(.+))?/); if (!rhs){ - replaceUserMap(lhs,lhs); + replaceUserMap(lhs,lhs,bang); } else { - replaceUserMap(lhs,rhs); + replaceUserMap(lhs,rhs,bang); } } ); -- cgit v1.2.3