]> git.gir.st - VimFx.git/blob - extension/packages/modes.coffee
Merge branch 'develop' of github.com:akhodakivskiy/VimFx into develop
[VimFx.git] / extension / packages / modes.coffee
1 utils = require 'utils'
2 { mode_hints } = require 'mode-hints/mode-hints'
3 { updateToolbarButton } = require 'button'
4 { searchForMatchingCommand
5 , isEscCommandKey
6 , isReturnCommandKey
7 , findStorage } = require 'commands'
8
9 modes = {}
10
11 modes['normal'] =
12 onEnter: (vim, storage) ->
13 storage.keys ?= []
14 storage.commands ?= {}
15
16 onLeave: (vim, storage) ->
17 storage.keys.length = 0
18
19 onInput: (vim, storage, keyStr, event) ->
20 storage.keys.push(keyStr)
21
22 { match, exact, command } = searchForMatchingCommand(storage.keys)
23
24 if match
25 if exact
26 command.func(vim, event)
27 storage.keys.length = 0
28 return true
29 else
30 storage.keys.length = 0
31
32 modes['insert'] =
33 onEnter: (vim) ->
34 updateToolbarButton(vim.rootWindow, {insertMode: true})
35 onLeave: (vim) ->
36 updateToolbarButton(vim.rootWindow, {insertMode: false})
37 utils.blurActiveElement(vim.window)
38 onInput: (vim, storage, keyStr) ->
39 if isEscCommandKey(keyStr)
40 vim.enterMode('normal')
41 return true
42
43 modes['find'] =
44 onEnter: (vim, storage, options) ->
45 return unless findBar = utils.getRootWindow(vim.window)?.gBrowser.getFindBar()
46
47 findBar.onFindCommand()
48 findBar._findField.focus()
49 findBar._findField.select()
50
51 return unless highlightButton = findBar.getElement("highlight")
52 return unless highlightButton.checked != options.highlight
53 highlightButton.click()
54
55 onLeave: (vim) ->
56 return unless findBar = utils.getRootWindow(vim.window)?.gBrowser.getFindBar()
57 findStorage.lastSearchString = findBar._findField.value
58 findBar.close()
59
60 onInput: (vim, storage, keyStr) ->
61 return unless findBar = utils.getRootWindow(vim.window)?.gBrowser.getFindBar()
62 if isEscCommandKey(keyStr) or isReturnCommandKey(keyStr)
63 vim.enterMode('normal')
64 return true
65 else
66 findBar._findField.focus()
67
68 modes['hints'] = mode_hints
69
70 exports.modes = modes
Imprint / Impressum