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