]> git.gir.st - VimFx.git/blob - extension/packages/modes.coffee
Find refactoring
[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 } = require 'commands'
7
8 modes = {}
9
10 modes['normal'] =
11 onEnter: (vim, storage, args) ->
12 storage.keys ?= []
13 storage.commands ?= {}
14
15 onLeave: (vim, storage, args) ->
16 storage.keys.length = 0
17
18 onInput: (vim, storage, keyStr, event) ->
19 storage.keys.push(keyStr)
20
21 { match, exact, command } = searchForMatchingCommand(storage.keys)
22
23 if match
24 if exact
25 commandStorage = storage.commands[command.name] ?= {}
26 command.func(vim, commandStorage, event)
27 storage.keys.length = 0
28 return true
29 else
30 storage.keys.length = 0
31
32 modes['insert'] =
33 onEnter: (vim) ->
34 return unless rootWindow = utils.getRootWindow(vim.window)
35 updateToolbarButton(rootWindow, {insertMode: true})
36 onLeave: (vim) ->
37 return unless rootWindow = utils.getRootWindow(vim.window)
38 updateToolbarButton(rootWindow, {insertMode: false})
39 utils.blurActiveElement(vim.window)
40 onInput: (vim, storage, keyStr) ->
41 if isEscCommandKey(keyStr)
42 vim.enterMode('normal')
43 return true
44
45 modes['find'] =
46 onEnter: (vim) ->
47 if findBar = utils.getRootWindow(vim.window)?.gBrowser.getFindBar()
48 findBar.open()
49 findBar._findField.focus()
50 findBar._findField.select()
51 onLeave: (vim) ->
52 if findBar = utils.getRootWindow(vim.window)?.gBrowser.getFindBar()
53 findBar.close()
54 onInput: (vim, storage, keyStr) ->
55 if isEscCommandKey(keyStr) or isReturnCommandKey(keyStr) > -1
56 vim.enterMode('normal')
57 return true
58
59 modes['hints'] = mode_hints
60
61 exports.modes = modes
Imprint / Impressum