]> git.gir.st - VimFx.git/blob - extension/packages/modes.coffee
Let hint commands take advantage of the new modes
[VimFx.git] / extension / packages / modes.coffee
1 utils = require 'utils'
2 hints = require 'hints'
3
4 mode_hints =
5 enter: (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 handleKeyDown: (vim, storage, event, keyStr) ->
14 if utils.getHintChars().search(utils.regexpEscape(keyStr)) > -1
15 @hintCharHandler(vim, storage, keyStr)
16 return true
17
18 onEnterNormalMode: (vim, storage) ->
19 hints.removeHints(vim.window.document)
20 storage.markers = storage.callback = undefined
21
22 # Processes the char, updates and hides/shows markers
23 hintCharHandler: (vim, storage, keyStr) ->
24 if keyStr
25 # Get char and escape it to avoid problems with String.search
26 key = utils.regexpEscape(keyStr)
27
28 { markers, callback } = storage
29
30 # First do a pre match - count how many markers will match with the new character entered
31 if markers.reduce(((v, marker) -> v or marker.willMatch(key)), false)
32 for marker in markers
33 marker.matchHintChar(key)
34
35 if marker.isMatched()
36 # Add element features to the bloom filter
37 marker.reward()
38 callback(marker)
39 vim.enterNormalMode()
40 break
41
42 modes =
43 hints: mode_hints
44
45 exports.modes = modes
Imprint / Impressum