1 utils = require 'utils'
2 { getCommand } = require 'commands'
3 { Vim } = require 'vim'
5 { interfaces: Ci } = Components
7 vimBucket = new utils.Bucket utils.getWindowId, (obj) -> new Vim obj
9 suppressEvent = (event) ->
10 event.preventDefault()
11 event.stopPropagation()
13 # The following handlers are installed on every top level DOM window
15 'keypress': (event) ->
17 isEditable = utils.isElementEditable event.originalTarget
18 key = utils.keyboardEventKey event
20 # We only handle the key if there is no focused editable element
21 # or if it's the *Esc* key, which will remote the focus from
22 # the currently focused element
23 if key and (key == 'Esc' or not isEditable)
24 if window = utils.getEventTabWindow event
25 if vimBucket.get(window)?.keypress key
30 'TabClose': (event) ->
31 if gBrowser = utils.getEventTabBrowser event
32 if browser = gBrowser.getBrowserForTab event.originalTarget
33 vimBucket.forget browser.contentWindow.wrappedJSObject
35 'DOMWindowClose': (event) ->
36 if gBrowser = event.originalTarget.gBrowser
37 for tab in gBrowser.tabs
38 if browser = gBrowser.getBrowserForTab tab
39 vimBucket.forget browser.contentWindow.wrappedJSObject
41 exports.handlers = handlers