1 utils = require 'utils'
18 constructor: (@window) ->
29 enterHintsMode: (@markers, @cb) ->
34 @markers = @cb = undefined
36 handleKeyDown: (keyboardEvent, keyStr) ->
37 if @mode == MODE_NORMAL || keyStr == 'Esc'
38 result = maybeCommand @keys.concat([keyStr])
39 else if !keyboardEvent.ctrlKey and !keyboardEvent.metaKey
40 if @mode == MODE_HINTS
41 hintChars = getPref('hint_chars').toLowerCase()
42 result = hintChars.search(regexpEscape(keyStr)) > -1
43 else if @mode == MODE_FIND
52 handleKeyPress: (keyboardEvent) ->
53 lastKeyStr = if @keys.length > 0 then @keys[@keys.length - 1] else undefined
54 if @mode == MODE_NORMAL or lastKeyStr == 'Esc'
55 if command = findCommand @keys
59 else if !keyboardEvent.ctrlKey and !keyboardEvent.metaKey
61 if @mode == MODE_HINTS
62 hintCharHandler @, lastKeyStr, keyboardEvent.charCode
64 else if @mode == MODE_FIND
65 findCharHandler @, lastKeyStr, keyboardEvent.charCode
70 findCommand = (keys) ->
71 for i in [0...keys.length]
72 seq = keys.slice(i).join(',')
73 if com = commands[seq]
74 if not isCommandDisabled(seq)
79 maybeCommand = (keys) ->
80 for i in [0...keys.length]
81 sequence = keys.slice(i).join(',')
82 for seq, com of commands
83 if seq.indexOf(sequence) == 0
84 return not isCommandDisabled(seq)