Changeset 18219 for lang/javascript/vimperator-plugins/trunk
- Timestamp:
- 08/25/08 22:39:03 (3 months ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
lang/javascript/vimperator-plugins/trunk/feedSomeKeys.js
r9460 r18219 20 20 * :fmapc 21 21 * :feedmapclear -> 全てを無に帰して元に戻す 22 * 23 * :f[eed]map! lhs -> "!" をつけると、仮想キーコードでイベントを送るように 22 24 * 23 25 * == LDR の場合 == … … 87 89 [ KeyEvent.DOM_VK_F22, ["F22"] ], 88 90 [ KeyEvent.DOM_VK_F23, ["F23"] ], 89 [ KeyEvent.DOM_VK_F24, ["F24"] ] 91 [ KeyEvent.DOM_VK_F24, ["F24"] ], 90 92 ]; 91 function getKeyCode(str) { 93 const vkeyTable = [ 94 [ KeyEvent.DOM_VK_0, ['0'] ], 95 [ KeyEvent.DOM_VK_1, ['1'] ], 96 [ KeyEvent.DOM_VK_2, ['2'] ], 97 [ KeyEvent.DOM_VK_3, ['3'] ], 98 [ KeyEvent.DOM_VK_4, ['4'] ], 99 [ KeyEvent.DOM_VK_5, ['5'] ], 100 [ KeyEvent.DOM_VK_6, ['6'] ], 101 [ KeyEvent.DOM_VK_7, ['7'] ], 102 [ KeyEvent.DOM_VK_8, ['8'] ], 103 [ KeyEvent.DOM_VK_9, ['9'] ], 104 [ KeyEvent.DOM_VK_SEMICOLON, [';'] ], 105 [ KeyEvent.DOM_VK_EQUALS, ['='] ], 106 [ KeyEvent.DOM_VK_A, ['a'] ], 107 [ KeyEvent.DOM_VK_B, ['b'] ], 108 [ KeyEvent.DOM_VK_C, ['c'] ], 109 [ KeyEvent.DOM_VK_D, ['d'] ], 110 [ KeyEvent.DOM_VK_E, ['e'] ], 111 [ KeyEvent.DOM_VK_F, ['f'] ], 112 [ KeyEvent.DOM_VK_G, ['g'] ], 113 [ KeyEvent.DOM_VK_H, ['h'] ], 114 [ KeyEvent.DOM_VK_I, ['i'] ], 115 [ KeyEvent.DOM_VK_J, ['j'] ], 116 [ KeyEvent.DOM_VK_K, ['k'] ], 117 [ KeyEvent.DOM_VK_L, ['l'] ], 118 [ KeyEvent.DOM_VK_M, ['m'] ], 119 [ KeyEvent.DOM_VK_N, ['n'] ], 120 [ KeyEvent.DOM_VK_O, ['o'] ], 121 [ KeyEvent.DOM_VK_P, ['p'] ], 122 [ KeyEvent.DOM_VK_Q, ['q'] ], 123 [ KeyEvent.DOM_VK_R, ['r'] ], 124 [ KeyEvent.DOM_VK_S, ['s'] ], 125 [ KeyEvent.DOM_VK_T, ['t'] ], 126 [ KeyEvent.DOM_VK_U, ['u'] ], 127 [ KeyEvent.DOM_VK_V, ['v'] ], 128 [ KeyEvent.DOM_VK_W, ['w'] ], 129 [ KeyEvent.DOM_VK_X, ['x'] ], 130 [ KeyEvent.DOM_VK_Y, ['y'] ], 131 [ KeyEvent.DOM_VK_Z, ['z'] ], 132 [ KeyEvent.DOM_VK_MULTIPLY, ['*'] ], 133 [ KeyEvent.DOM_VK_ADD, ['+'] ], 134 [ KeyEvent.DOM_VK_SUBTRACT, ['-'] ], 135 [ KeyEvent.DOM_VK_COMMA, [','] ], 136 [ KeyEvent.DOM_VK_PERIOD, ['.'] ], 137 [ KeyEvent.DOM_VK_SLASH, ['/'] ], 138 [ KeyEvent.DOM_VK_BACK_QUOTE, ['`'] ], 139 [ KeyEvent.DOM_VK_OPEN_BRACKET, ['{'] ], 140 [ KeyEvent.DOM_VK_BACK_SLASH, ['\\'] ], 141 [ KeyEvent.DOM_VK_CLOSE_BRACKET, ['}'] ], 142 [ KeyEvent.DOM_VK_QUOTE, ["'"] ], 143 ]; 144 145 function getKeyCode(str, vkey) { 92 146 str = str.toLowerCase(); 93 147 var ret = 0; 94 keyTable.some(function(i) i[1].some(function(k) k.toLowerCase() == str && (ret = i[0])));148 (vkey ? vkeyTable : keyTable).some(function(i) i[1].some(function(k) k.toLowerCase() == str && (ret = i[0]))); 95 149 return ret; 96 150 } 97 function init(keys ){151 function init(keys, useVkey){ 98 152 destroy(); 99 153 keys.forEach(function(key){ … … 104 158 [origKey, feedKey] = [key,key]; 105 159 } 106 replaceUserMap(origKey, feedKey );160 replaceUserMap(origKey, feedKey, useVkey); 107 161 }); 108 162 } 109 function replaceUserMap(origKey, feedKey ){163 function replaceUserMap(origKey, feedKey, useVkey){ 110 164 if (mappings.hasMap(modes.NORMAL, origKey)){ 111 165 var origMap = mappings.get(modes.NORMAL,origKey); … … 125 179 count = count > 1 ? count : 1; 126 180 for (var i=0; i<count; i++){ 127 feedKeyIntoContent(feedKey );181 feedKeyIntoContent(feedKey, useVkey); 128 182 } 129 183 }, { flags:liberator.Mappings.flags.COUNT, rhs:feedKey, noremap:true }); … … 179 233 return root; 180 234 } 181 function feedKeyIntoContent(keys ){235 function feedKeyIntoContent(keys, useVkey){ 182 236 var frameNum = 0; 183 237 [keys, frameNum] = parseKeys(keys); … … 187 241 modes.passNextKey = false; 188 242 for (var i=0; i<keys.length; i++){ 189 var charCode = keys.charCodeAt(i); 190 var keyCode = 0; 243 var keyCode; 191 244 var shift = false, ctrl = false, alt = false, meta = false; 192 if (charCode == 60){ // charCode:60 => "<" 245 if (useVkey && (keyCode = getKeyCode(keys[i], true))) { 246 var charCode = 0; 247 } else { 248 var charCode = keys.charCodeAt(i); 249 keyCode = 0; 250 } 251 if (keys[i] == '<'){ 193 252 var matches = keys.substr(i + 1).match(/^((?:[ACMSacms]-)*)([^>]+)/); 194 253 if (matches) { … … 201 260 if (matches[2].length == 1) { 202 261 if (!ctrl && !alt && !shift && !meta) return false; 203 charCode = matches[2].charCodeAt(0); 262 if (useVkey && (keyCode = getKeyCode(matches[2], true))) { 263 charCode = 0; 264 } else { 265 charCode = matches[2].charCodeAt(0); 266 } 204 267 } else if (matches[2].toLowerCase() == "space") { 205 charCode = KeyEvent.DOM_VK_SPACE; 268 if (useVkey) { 269 charCode = 0; 270 keyCode = KeyEvent.DOM_VK_SPACE; 271 } else { 272 charCode = KeyEvent.DOM_VK_SPACE; 273 } 206 274 } else if (keyCode = getKeyCode(matches[2])) { 207 275 charCode = 0; … … 215 283 } 216 284 285 //liberator.log({ctrl:ctrl, alt:alt, shift:shift, meta:meta, keyCode:keyCode, charCode:charCode, useVkey: useVkey}); 217 286 var evt = content.document.createEvent('KeyEvents'); 218 287 evt.initKeyEvent('keypress', true, true, content, ctrl, alt, shift, meta, keyCode, charCode); … … 226 295 // -------------------------- 227 296 commands.addUserCommand(['feedmap','fmap'],'Feed Map a key sequence', 228 function(args ){297 function(args, bang){ 229 298 if(!args){ 230 299 echo(feedMaps.map(function(map) map.description.replace(/</g,'<').replace(/>/g,'>')),true); … … 232 301 var [ ,lhs,rhs] = args.match(/(\S+)(?:\s+(.+))?/); 233 302 if (!rhs){ 234 replaceUserMap(lhs,lhs );303 replaceUserMap(lhs,lhs,bang); 235 304 } else { 236 replaceUserMap(lhs,rhs );305 replaceUserMap(lhs,rhs,bang); 237 306 } 238 307 }
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)