]> git.gir.st - VimFx.git/blob - extension/packages/key-utils.coffee
Merge branch 'develop' of github.com:akhodakivskiy/VimFx into develop
[VimFx.git] / extension / packages / key-utils.coffee
1 { interfaces: Ci } = Components
2
3 KE = Ci.nsIDOMKeyEvent
4
5 # Extract keyChar from keyCode taking into account the shift modifier
6 keyCharFromCode = (keyCode, shiftKey = false) ->
7 keyChar = undefined
8 if keyCode >= KE.DOM_VK_A and keyCode <= KE.DOM_VK_Z
9 keyChar = String.fromCharCode(keyCode)
10 if shiftKey
11 keyChar = keyChar.toUpperCase()
12 else
13 keyChar = keyChar.toLowerCase()
14 else
15 fn = (code, codeWithShift, char, charWithShift) ->
16 if keyCode == code
17 return if shiftKey then charWithShift else char
18 else if keyCode == codeWithShift
19 return charWithShift
20
21 options = [
22 [KE.DOM_VK_ESCAPE, KE.DOM_VK_ESCAPE, 'Esc', 'Shift-Esc' ]
23 [KE.DOM_VK_BACK_SPACE, KE.DOM_VK_BACK_SPACE, 'Backspace', 'Shift-Backspace']
24 [KE.DOM_VK_SPACE, KE.DOM_VK_SPACE, 'Space', 'Shift-Space' ]
25 [KE.DOM_VK_TAB, KE.DOM_VK_TAB, 'Tab', 'Shift-Tab' ]
26 [KE.DOM_VK_RETURN, KE.DOM_VK_RETURN, 'Return', 'Shift-Return' ]
27 [KE.DOM_VK_LEFT, KE.DOM_VK_LEFT, 'Left', 'Shift-Left' ]
28 [KE.DOM_VK_RIGHT, KE.DOM_VK_RIGHT, 'Right', 'Shift-Right' ]
29 [KE.DOM_VK_UP, KE.DOM_VK_UP, 'Up', 'Shift-Up' ]
30 [KE.DOM_VK_DOWN, KE.DOM_VK_DOWN, 'Down', 'Shift-Down' ]
31
32 [KE.DOM_VK_1, KE.DOM_VK_EXCLAMATION, '1', '!']
33 [KE.DOM_VK_2, KE.DOM_VK_AT, '2', '@']
34 [KE.DOM_VK_3, KE.DOM_VK_HASH, '3', '#']
35 [KE.DOM_VK_4, KE.DOM_VK_DOLLAR, '4', '$']
36 [KE.DOM_VK_5, KE.DOM_VK_PERCENT, '5', '%']
37 [KE.DOM_VK_6, KE.DOM_VK_CIRCUMFLEX, '6', '^']
38 [KE.DOM_VK_7, KE.DOM_VK_AMPERSAND, '7', '&']
39 [KE.DOM_VK_8, KE.DOM_VK_ASTERISK, '8', '*']
40 [KE.DOM_VK_9, KE.DOM_VK_OPEN_PAREN, '9', '(']
41 [KE.DOM_VK_0, KE.DOM_VK_CLOSE_PAREN, '0', ')']
42
43 [KE.DOM_VK_OPEN_BRACKET, KE.DOM_VK_OPEN_CURLY_BRACKET, '[', '{']
44 [KE.DOM_VK_CLOSE_BRACKET, KE.DOM_VK_CLOSE_CURLY_BRACKET, ']', '}']
45 [KE.DOM_VK_SEMICOLON, KE.DOM_VK_COLON, ';', ':']
46 [KE.DOM_VK_QUOTE, KE.DOM_VK_DOUBLEQUOTE, "'", '"']
47 [KE.DOM_VK_BACK_QUOTE, KE.DOM_VK_TILDE, '`', '~']
48 [KE.DOM_VK_BACK_SLASH, KE.DOM_VK_PIPE, '\\','|']
49 [KE.DOM_VK_COMMA, KE.DOM_VK_LESS_THAN, ',', '<']
50 [KE.DOM_VK_PERIOD, KE.DOM_VK_GREATER_THAN, '.', '>']
51 [KE.DOM_VK_SLASH, KE.DOM_VK_QUESTION_MARK, '/', '?']
52 [KE.DOM_VK_HYPHEN_MINUS, KE.DOM_VK_UNDERSCORE, '-', '_']
53 [KE.DOM_VK_EQUALS, KE.DOM_VK_PLUS, '=', '+']
54 ]
55
56 for opt in options
57 if char = fn(opt...)
58 keyChar = char
59 break
60
61 return keyChar
62
63 # Format keyChar that arrives during `keypress` into keyStr.
64 applyModifiers = (keyChar, ctrlKey = false, altKey = false, metaKey = false) ->
65 if not keyChar
66 return keyChar
67
68 modifier = ''
69 modifier += 'c' if ctrlKey
70 modifier += 'm' if metaKey
71 modifier += 'a' if altKey
72
73 if modifier.length > 0
74 return "#{ modifier }-#{ keyChar }"
75 else
76 return keyChar
77
78 exports.keyCharFromCode = keyCharFromCode
79 exports.applyModifiers = applyModifiers
Imprint / Impressum