]> git.gir.st - VimFx.git/blob - extension/packages/key-utils.coffee
Fixed default properties
[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