]> git.gir.st - VimFx.git/blob - extension/packages/modes.coffee
Make mode entering consistent with find mode enter
[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 commandStorage = storage.commands[command.name] ?= {}
27 command.func(vim, commandStorage, event)
28 storage.keys.length = 0
29 return true
30 else
31 storage.keys.length = 0
32
33 modes['insert'] =
34 onEnter: (vim) ->
35 return unless rootWindow = utils.getRootWindow(vim.window)
36 updateToolbarButton(rootWindow, {insertMode: true})
37 onLeave: (vim) ->
38 return unless rootWindow = utils.getRootWindow(vim.window)
39 updateToolbarButton(rootWindow, {insertMode: false})
40 utils.blurActiveElement(vim.window)
41 onInput: (vim, storage, keyStr) ->
42 if isEscCommandKey(keyStr)
43 vim.enterMode('normal')
44 return true
45
46 modes['find'] =
47 onEnter: (vim, storage, options) ->
48 return unless findBar = utils.getRootWindow(vim.window)?.gBrowser.getFindBar()
49
50 findBar.open()
51 findBar._findField.focus()
52 findBar._findField.select()
53
54 return unless highlightButton = findBar.getElement("highlight")
55 return unless highlightButton.checked != options.highlight
56 highlightButton.click()
57
58 onLeave: (vim) ->
59 return unless findBar = utils.getRootWindow(vim.window)?.gBrowser.getFindBar()
60 findStorage.lastSearchString = findBar._findField.value
61 findBar.close()
62
63 onInput: (vim, storage, keyStr) ->
64 return unless findBar = utils.getRootWindow(vim.window)?.gBrowser.getFindBar()
65 if isEscCommandKey(keyStr) or isReturnCommandKey(keyStr)
66 vim.enterMode('normal')
67 return true
68 else
69 findBar._findField.focus()
70
71 modes['hints'] = mode_hints
72
73 exports.modes = modes
Imprint / Impressum