1 utils = require 'utils'
2 { modes } = require 'modes'
3 { isEscCommandKey } = require 'commands'
6 constructor: (@window) ->
10 enterMode: (mode, args) ->
11 # `args` is an array of arguments to be passed to the mode's `onEnter` method
13 throw new Error("Not a valid VimFx mode to enter: #{ mode }")
17 modes[@mode].onLeave(@, @storage[@mode], args)
21 modes[@mode].onEnter(@, @storage[@mode] ?= {}, args)
23 onInput: (keyStr, event) ->
24 isEditable = utils.isElementEditable(event.originalTarget)
26 if isEditable and not isEscCommandKey(keyStr)
31 suppress = modes[@mode]?.onInput(@, @storage[@mode], keyStr, event)
33 # Esc key is not suppressed, and passed to the browser in `normal` mode.
34 # Here we compare against the mode that was active before the key was processed
35 # because processing the command may change the mode.
36 if oldMode == 'normal' and keyStr == 'Esc'