]> git.gir.st - VimFx.git/blob - extension/packages/vim.coffee
Refactored commands related machinery
[VimFx.git] / extension / packages / vim.coffee
1 utils = require 'utils'
2
3 commands = require 'commands'
4
5 { getPref
6 , isCommandDisabled
7 } = require 'prefs'
8
9 MODE_NORMAL = 1
10 MODE_HINTS = 2
11
12 class Vim
13 @findStr = ''
14
15 constructor: (@window) ->
16 @mode = MODE_NORMAL
17 @keys = []
18 @lastKeyStr = null
19 @markers = undefined
20 @cb = undefined
21 @findRng = null
22
23 Object.defineProperty(this, 'findStr',
24 get: -> return Vim.findStr
25 set: (value) -> Vim.findStr = value
26 )
27
28 enterHintsMode: (@markers, @cb) ->
29 @mode = MODE_HINTS
30
31 # TODO: This function should probably remove
32 # hint markers (if they are present) as well
33 enterNormalMode: ->
34 @mode = MODE_NORMAL
35 @markers = @cb = undefined
36
37 handleKeyDown: (keyboardEvent, keyStr) ->
38 if @mode == MODE_NORMAL || keyStr == 'Esc'
39 result = commands.maybeCommand(@keys.concat([keyStr]))
40 else if !keyboardEvent.ctrlKey and !keyboardEvent.metaKey
41 if @mode == MODE_HINTS
42 result = utils.getHintChars().search(utils.regexpEscape(keyStr)) > -1
43
44 if result
45 @lastKeyStr = keyStr
46 @keys.push keyStr
47
48 return result
49
50 handleKeyPress: (keyboardEvent) ->
51 lastKeyStr = if @keys.length > 0 then @keys[@keys.length - 1] else undefined
52 if @mode == MODE_NORMAL or lastKeyStr == 'Esc'
53 if command = commands.findCommand(@keys)
54 command.func(@)
55 @keys.length = 0
56 result = true
57 else if !keyboardEvent.ctrlKey and !keyboardEvent.metaKey
58 @keys.length = 0
59 if @mode == MODE_HINTS
60 commands.hintCharHandler(@, lastKeyStr, keyboardEvent.charCode)
61 result = true
62
63 return result
64
65 exports.Vim = Vim
Imprint / Impressum