1 utils = require 'utils'
2 { getCommand } = require 'commands'
3 { VimBucket } = require 'vim'
5 { interfaces: Ci } = Components
7 KeyboardEvent = Ci.nsIDOMKeyEvent
9 vimBucket = new VimBucket
12 constructor: (event) ->
14 @key = String.fromCharCode(event.charCode)
17 when KeyboardEvent.DOM_VK_ESCAPE then @key = 'Esc'
18 when KeyboardEvent.DOM_VK_TAB then @key = 'Tab'
20 @shift = event.shiftKey
28 k = (a, b) -> if a then b else ''
29 if @at or @ctrl or @meta
30 "<#{ k(@ctrl, 'c') }#{ k(@alt, 'a') }#{ k(@meta, 'm') }-#{ @key }>"
34 suppressEvent = (event) ->
35 event.preventDefault()
36 event.stopPropagation()
39 'keypress': (event) ->
40 isEditable = utils.isElementEditable event.originalTarget
41 if event.keyCode == KeyboardEvent.DOM_VK_ESCAPE or not isEditable
42 if window = utils.getEventTabWindow event
43 keyInfo = new KeyInfo event
45 console.log event.keyCode, event.which, event.charCode, keyInfo.toString()
46 if vimBucket.get(window)?.keypress keyInfo
51 if window = utils.getEventTabWindow event
52 vimBucket.get(window)?.focus event.originalTarget
55 if window = utils.getEventTabWindow event
56 vimBucket.get(window)?.blur event.originalTarget
58 'TabClose': (event) ->
59 if gBrowser = utils.getEventTabBrowser event
60 if browser = gBrowser.getBrowserForTab event.originalTarget
61 vimBucket.forget browser.contentWindow.wrappedJSObject
63 'DOMWindowClose': (event) ->
64 if gBrowser = event.originalTarget.gBrowser
65 for tab in gBrowser.tabs
66 if browser = gBrowser.getBrowserForTab tab
67 vimBucket.forget browser.contentWindow.wrappedJSObject
69 exports.handlers = handlers