1 { getWindowId, Bucket } = require 'utils'
11 constructor: (@window) ->
18 if _maybeCommand(@mode, @keys, keyStr)
25 if command = _getCommand(@mode, @keys)
26 lastKey = @keys[@keys.length - 1]
29 return lastKey != 'Esc'
34 enterNormalMode: () ->
35 @markers = @cb = undefined
39 _getCommand = (mode, keys) ->
40 lastKey = keys[keys.length - 1]
42 if mode == MODE_NORMAL or lastKey == 'Esc'
43 sequence = keys.join(',')
44 if command = commands[sequence]
46 else if keys.length > 0
47 return _getCommand mode, keys.slice(1)
49 else if mode == MODE_HINTS and keys.length > 0
50 # `lastKey` should be one hint chars or `Backspace`
51 hintChars = getPref('hint_chars') + 'backspace'
52 if hintChars.search(lastKey.toLowerCase()) > -1
54 return hintCharHandler(vim, lastKey.toLowerCase())
58 _maybeCommand = (mode, keys, keyStr) ->
59 if mode == MODE_NORMAL || keyStr == 'Esc'
60 sequence = keys.concat([keyStr]).join(',')
61 for commandSequence in Object.keys(commands)
62 if commandSequence.indexOf(sequence) == 0
66 return _maybeCommand mode, keys.slice(1), keyStr
68 else if mode == MODE_HINTS