]> git.gir.st - VimFx.git/blob - packages/event-handlers.coffee
files recovered from dead machine... from now on I will commit every day
[VimFx.git] / packages / event-handlers.coffee
1 utils = require 'utils'
2 { getCommand } = require 'commands'
3 { VimBucket } = require 'vim'
4
5 { interfaces: Ci } = Components
6
7 KeyboardEvent = Ci.nsIDOMKeyEvent
8
9 vimBucket = new VimBucket
10
11 class KeyInfo
12 constructor: (event) ->
13 if event.charCode > 0
14 @key = String.fromCharCode(event.charCode)
15 else
16 switch event.keyCode
17 when KeyboardEvent.DOM_VK_ESCAPE then @key = 'Esc'
18
19 @shift = event.shiftKey
20 @alt = event.altKey
21 @ctrl = event.ctrlKey
22 @meta = event.metaKey
23
24 toString: ->
25 k = (a, b) -> if a then b else ''
26 if @at or @ctrl or @meta
27 "<#{ k(@ctrl, 'c') }#{ k(@alt, 'a') }#{ k(@meta, 'm') }-#{ @key }>"
28 else
29 @key
30
31 suppressEvent = (event) ->
32 event.preventDefault()
33 event.stopPropagation()
34
35 handlers =
36 'keypress': (event) ->
37 isEditable = utils.isElementEditable event.originalTarget
38 if event.keyCode == KeyboardEvent.DOM_VK_ESCAPE or not isEditable
39 if window = utils.getEventTabWindow event
40 keyInfo = new KeyInfo event
41 console.log event.keyCode, event.which, event.charCode
42 if vimBucket.get(window)?.keypress keyInfo
43 suppressEvent event
44
45
46 'focus': (event) ->
47 if window = utils.getEventTabWindow event
48 vimBucket.get(window)?.focus event.originalTarget
49
50 'blur': (event) ->
51 if window = utils.getEventTabWindow event
52 vimBucket.get(window)?.blur event.originalTarget
53
54 'TabClose': (event) ->
55 if gBrowser = utils.getEventTabBrowser event
56 if browser = gBrowser.getBrowserForTab event.originalTarget
57 vimBucket.forget browser.contentWindow.wrappedJSObject
58
59 'DOMWindowClose': (event) ->
60 if gBrowser = event.originalTarget.gBrowser
61 for tab in gBrowser.tabs
62 if browser = gBrowser.getBrowserForTab tab
63 vimBucket.forget browser.contentWindow.wrappedJSObject
64
65 exports.handlers = handlers
Imprint / Impressum