]> git.gir.st - VimFx.git/blob - extension/packages/mode-hints/mode-hints.coffee
Make mode entering consistent with find mode enter
[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 vim.enterMode('normal')
11 else
12 storage.markers = markers
13 storage.callback = callback
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