Show
Ignore:
Timestamp:
08/25/08 22:39:03 (3 months ago)
Author:
anekos
Message:

setup の第2引数に true、 もしくは:fmap! で仮想キーコードでのイベント送信をできるようにした。

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/javascript/vimperator-plugins/trunk/feedSomeKeys.js

    r9460 r18219  
    2020 * :fmapc 
    2121 * :feedmapclear            -> 全てを無に帰して元に戻す 
     22 * 
     23 * :f[eed]map! lhs          -> "!" をつけると、仮想キーコードでイベントを送るように 
    2224 * 
    2325 * == LDR の場合 == 
     
    8789    [ KeyEvent.DOM_VK_F22, ["F22"] ], 
    8890    [ KeyEvent.DOM_VK_F23, ["F23"] ], 
    89     [ KeyEvent.DOM_VK_F24, ["F24"] ] 
     91    [ KeyEvent.DOM_VK_F24, ["F24"] ], 
    9092]; 
    91 function getKeyCode(str) { 
     93const 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 
     145function getKeyCode(str, vkey) { 
    92146    str = str.toLowerCase(); 
    93147    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]))); 
    95149    return ret; 
    96150} 
    97 function init(keys){ 
     151function init(keys, useVkey){ 
    98152    destroy(); 
    99153    keys.forEach(function(key){ 
     
    104158            [origKey, feedKey] = [key,key]; 
    105159        } 
    106         replaceUserMap(origKey, feedKey); 
     160        replaceUserMap(origKey, feedKey, useVkey); 
    107161    }); 
    108162} 
    109 function replaceUserMap(origKey, feedKey){ 
     163function replaceUserMap(origKey, feedKey, useVkey){ 
    110164    if (mappings.hasMap(modes.NORMAL, origKey)){ 
    111165        var origMap = mappings.get(modes.NORMAL,origKey); 
     
    125179            count = count > 1 ? count : 1; 
    126180            for (var i=0; i<count; i++){ 
    127                 feedKeyIntoContent(feedKey); 
     181                feedKeyIntoContent(feedKey, useVkey); 
    128182            } 
    129183        }, { flags:liberator.Mappings.flags.COUNT, rhs:feedKey, noremap:true }); 
     
    179233    return root; 
    180234} 
    181 function feedKeyIntoContent(keys){ 
     235function feedKeyIntoContent(keys, useVkey){ 
    182236    var frameNum = 0; 
    183237    [keys, frameNum] = parseKeys(keys); 
     
    187241    modes.passNextKey = false; 
    188242    for (var i=0; i<keys.length; i++){ 
    189         var charCode = keys.charCodeAt(i); 
    190         var keyCode = 0; 
     243        var keyCode; 
    191244        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] == '<'){  
    193252            var matches = keys.substr(i + 1).match(/^((?:[ACMSacms]-)*)([^>]+)/); 
    194253            if (matches) { 
     
    201260                if (matches[2].length == 1) { 
    202261                    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                    } 
    204267                } 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                    } 
    206274                } else if (keyCode = getKeyCode(matches[2])) { 
    207275                    charCode = 0; 
     
    215283        } 
    216284 
     285        //liberator.log({ctrl:ctrl, alt:alt, shift:shift, meta:meta, keyCode:keyCode, charCode:charCode, useVkey: useVkey}); 
    217286        var evt = content.document.createEvent('KeyEvents'); 
    218287        evt.initKeyEvent('keypress', true, true, content, ctrl, alt, shift, meta, keyCode, charCode); 
     
    226295// -------------------------- 
    227296commands.addUserCommand(['feedmap','fmap'],'Feed Map a key sequence', 
    228     function(args){ 
     297    function(args, bang){ 
    229298        if(!args){ 
    230299            echo(feedMaps.map(function(map) map.description.replace(/</g,'&lt;').replace(/>/g,'&gt;')),true); 
     
    232301        var [ ,lhs,rhs] = args.match(/(\S+)(?:\s+(.+))?/); 
    233302        if (!rhs){ 
    234             replaceUserMap(lhs,lhs); 
     303            replaceUserMap(lhs,lhs,bang); 
    235304        } else { 
    236             replaceUserMap(lhs,rhs); 
     305            replaceUserMap(lhs,rhs,bang); 
    237306        } 
    238307    }