2 # Copyright Anton Khodakivskiy 2013, 2014.
3 # Copyright Simon Lydell 2013, 2014.
5 # This file is part of VimFx.
7 # VimFx is free software: you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation, either version 3 of the License, or
10 # (at your option) any later version.
12 # VimFx is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with VimFx. If not, see <http://www.gnu.org/licenses/>.
21 utils = require 'utils'
22 hints = require 'mode-hints/hints'
24 { isEscCommandKey } = require 'commands'
27 onEnter: (vim, storage, callback) ->
28 markers = hints.injectHints(vim.window)
29 if markers?.length > 0
30 storage.markers = markers
31 storage.callback = callback
33 vim.enterMode('normal')
35 onLeave: (vim, storage) ->
36 hints.removeHints(vim.window.document)
37 storage.markers = storage.callback = undefined
39 onInput: (vim, storage, keyStr, event) ->
40 if isEscCommandKey(keyStr)
41 vim.enterMode('normal')
44 { markers, callback } = storage
48 hints.rotateOverlappingMarkers(markers, true)
50 hints.rotateOverlappingMarkers(markers, false)
54 marker.deleteHintChar()
57 if keyStr not in utils.getHintChars() or event.ctrlKey or event.metaKey
60 marker.matchHintChar(keyStr)
63 marker.reward() # Add element features to the bloom filter.
64 dontEnterNormalMode = callback(marker, markers)
65 vim.enterMode('normal') unless dontEnterNormalMode