]> git.gir.st - VimFx.git/blob - extension/packages/mode-hints/mode-hints.coffee
Merge branch 'release-0.5.9'
[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.document)
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 return false if keyStr not in utils.getHintChars() or event.ctrlKey or event.metaKey
38 for marker in markers
39 marker.matchHintChar(keyStr)
40
41 if marker.isMatched()
42 marker.reward() # Add element features to the bloom filter
43 dontEnterNormalMode = callback(marker, markers)
44 vim.enterMode('normal') unless dontEnterNormalMode
45 break
46
47 return true
Imprint / Impressum