public virtual void KeyDown(VimKeyEventArgs args) { bool handled = true; if (_keyInputEvaluation == null) { _keyInputEvaluation = new VimKeyInputEvaluation(this.Host); } IVimAction action = null; string status_char = ""; VimKeyInputEvaluation.KeyEvalState eval_state = _keyInputEvaluation.Evaluate(args.KeyInput, out action, out status_char); if (eval_state == VimKeyInputEvaluation.KeyEvalState.InProcess) { Debug.Assert(status_char != null); if (status_char == VimKeyInputEvaluation.Status_Char_Backspace) { if (_statusText.Length > 0) { _statusText = _statusText.Substring(0, _statusText.Length - 1); } else { Debug.Assert(false); } } else { _statusText += status_char; } this.Host.UpdateStatus(_statusText); } else if (eval_state == VimKeyInputEvaluation.KeyEvalState.Success) { if (action != null) { // TODO live with some actions unimplemented if (action is IVimMotion) { (action as IVimMotion).Move(this.Host); } else if (action is IVimEdititon) { this.DoEdition(action as IVimEdititon); } else { Debug.Assert(false); } } this.ResetKeyValuationStatus(); } else if (eval_state == VimKeyInputEvaluation.KeyEvalState.Escape) { this.ResetKeyValuationStatus(); } else if (eval_state == VimKeyInputEvaluation.KeyEvalState.Error) { if (this.IsSpecialKeyInput(args.KeyInput.Value)) { handled = false; } this.ResetKeyValuationStatus(); } else { Debug.Assert(false); this.ResetKeyValuationStatus(); } args.Handled = handled; }
private void ResetKeyValuationStatus() { _keyInputEvaluation = null; _statusText = ""; this.Host.UpdateStatus(_statusText); }