1 utils = require 'utils'
2 { getCommand } = require 'commands'
3 { Vim } = require 'vim'
5 isBrowserWindow } = require 'window-utils'
7 { interfaces: Ci } = Components
9 vimBucket = new utils.Bucket utils.getWindowId, (obj) -> new Vim obj
11 suppressEvent = (event) ->
12 event.preventDefault()
13 event.stopPropagation()
15 # The following handlers are installed on every top level DOM window
17 'keypress': (event) ->
19 isEditable = utils.isElementEditable event.originalTarget
20 key = utils.keyboardEventKey event
22 # We only handle the key if there is no focused editable element
23 # or if it's the *Esc* key, which will remote the focus from
24 # the currently focused element
25 if key and (key == 'Esc' or not isEditable)
26 if window = utils.getEventTabWindow event
27 if vimBucket.get(window)?.keypress key
32 'TabClose': (event) ->
33 if gBrowser = utils.getEventTabBrowser event
34 if browser = gBrowser.getBrowserForTab event.originalTarget
35 vimBucket.forget browser.contentWindow.wrappedJSObject
37 'DOMWindowClose': (event) ->
38 if gBrowser = event.originalTarget.gBrowser
39 for tab in gBrowser.tabs
40 if browser = gBrowser.getBrowserForTab tab
41 vimBucket.forget browser.contentWindow.wrappedJSObject
43 # Delegate for WindowTracker that will add and remove event handlers
44 # to the each window that goes through the tracker
47 if isBrowserWindow window
48 for name, handler of handlers
49 window.addEventListener name, handler, true
52 if isBrowserWindow window
53 for name, handler of handlers
54 window.removeEventListener name, handler, true
56 # Creates and returns an instance of WindowTracker
57 # that will attach the passed event handlers to
58 # each opened top level window.
59 createWindowEventTracker = -> new WindowTracker delegate
61 exports.createWindowEventTracker = createWindowEventTracker