1 utils = require 'utils'
15 constructor: (@window) ->
24 enterHintsMode: (@markers, @cb) ->
27 # TODO: This function should probably remove
28 # hint markers (if they are present) as well
31 @markers = @cb = undefined
33 handleKeyDown: (keyboardEvent, keyStr) ->
34 if @mode == MODE_NORMAL || keyStr == 'Esc'
35 result = maybeCommand(@keys.concat([keyStr]))
36 else if !keyboardEvent.ctrlKey and !keyboardEvent.metaKey
37 if @mode == MODE_HINTS
38 result = utils.getHintChars().search(utils.regexpEscape(keyStr)) > -1
46 handleKeyPress: (keyboardEvent) ->
47 lastKeyStr = if @keys.length > 0 then @keys[@keys.length - 1] else undefined
48 if @mode == MODE_NORMAL or lastKeyStr == 'Esc'
49 if command = findCommand(@keys)
53 else if !keyboardEvent.ctrlKey and !keyboardEvent.metaKey
55 if @mode == MODE_HINTS
56 hintCharHandler(@, lastKeyStr, keyboardEvent.charCode)
61 findCommand = (keys) ->
62 for i in [0...keys.length]
63 seq = keys[i..].join(',')
64 if com = commands[seq]
65 if not isCommandDisabled(seq)
70 maybeCommand = (keys) ->
71 for i in [0...keys.length]
72 sequence = keys[i..].join(',')
73 for seq, com of commands
74 if seq.indexOf(sequence) == 0
75 return not isCommandDisabled(seq)