]> git.gir.st - VimFx.git/blob - extension/packages/mode-hints/mode-hints.coffee
Make command_Esc in charge of all "escaping"
[VimFx.git] / extension / packages / mode-hints / mode-hints.coffee
1 utils = require 'utils'
2 hints = require 'mode-hints/hints'
3
4 exports.mode_hints =
5 onEnter: (vim, storage, [ callback ]) ->
6 markers = hints.injectHints(vim.window.document)
7 if markers.length == 0
8 vim.enterNormalMode()
9 return
10 storage.markers = markers
11 storage.callback = callback
12
13 onInput: (vim, storage, keyStr, event) ->
14 { markers, callback } = storage
15
16 switch keyStr
17 when 'Space'
18 hints.rotateOverlappingMarkers(markers, true)
19 when 'Shift-Space'
20 hints.rotateOverlappingMarkers(markers, false)
21
22 when 'Backspace'
23 for marker in markers
24 marker.deleteHintChar()
25
26 else
27 return false if keyStr not in utils.getHintChars() or event.ctrlKey or event.metaKey
28 for marker in markers
29 marker.matchHintChar(keyStr)
30
31 if marker.isMatched()
32 marker.reward() # Add element features to the bloom filter
33 dontEnterNormalMode = callback(marker, markers)
34 vim.enterNormalMode() unless dontEnterNormalMode
35 break
36
37 return true
38
39 onEnterNormalMode: (vim, storage) ->
40 hints.removeHints(vim.window.document)
41 storage.markers = storage.callback = undefined
Imprint / Impressum