]> git.gir.st - VimFx.git/blob - packages/event-handlers.coffee
Merge branch 'hints-and-markers' into develop
[VimFx.git] / packages / event-handlers.coffee
1 utils = require 'utils'
2 { getCommand } = require 'commands'
3 { Vim } = require 'vim'
4
5 { interfaces: Ci } = Components
6
7 vimBucket = new utils.Bucket utils.getWindowId, (obj) -> new Vim obj
8
9 suppressEvent = (event) ->
10 event.preventDefault()
11 event.stopPropagation()
12
13 # The following handlers are installed on every top level DOM window
14 handlers =
15 'keypress': (event) ->
16 try
17 isEditable = utils.isElementEditable event.originalTarget
18 key = utils.keyboardEventKey event
19
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
26 suppressEvent event
27 catch err
28 console.log err
29
30 'TabClose': (event) ->
31 if gBrowser = utils.getEventTabBrowser event
32 if browser = gBrowser.getBrowserForTab event.originalTarget
33 vimBucket.forget browser.contentWindow.wrappedJSObject
34
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
40
41 exports.handlers = handlers
Imprint / Impressum