Exemple #1
0
        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;
        }
Exemple #2
0
 private void ResetKeyValuationStatus()
 {
     _keyInputEvaluation = null;
     _statusText = "";
     this.Host.UpdateStatus(_statusText);
 }