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