/// <summary> /// Try and convert the given insert command to an OleCommand. This should only be done /// for InsertCommand values which we want to custom process /// </summary> private bool TryGetOleCommandData(InsertCommand command, out OleCommandData commandData) { if (command.IsBack) { commandData = new OleCommandData(VSConstants.VSStd2KCmdID.BACKSPACE); return(true); } if (command.IsDelete) { commandData = new OleCommandData(VSConstants.VSStd2KCmdID.DELETE); return(true); } if (command.IsDirectInsert) { var directInsert = (InsertCommand.DirectInsert)command; commandData = OleCommandData.CreateTypeChar(directInsert.Item); return(true); } if (command.IsInsertTab) { commandData = new OleCommandData(VSConstants.VSStd2KCmdID.TAB); return(true); } if (command.IsInsertNewLine) { commandData = new OleCommandData(VSConstants.VSStd2KCmdID.RETURN); return(true); } commandData = OleCommandData.Empty; return(false); }
/// <summary> /// Try and convert the KeyInput value into an OleCommandData instance. If simulateStandardKeyBindings is set /// to true then "standard" Visual Studio key bindings will be assumed and this will be reflected in the /// resulting command information /// </summary> internal static bool TryConvert(KeyInput keyInput, bool simulateStandardKeyBindings, out OleCommandData oleCommandData) { var hasShift = 0 != (keyInput.KeyModifiers & KeyModifiers.Shift); VSConstants.VSStd2KCmdID?cmdId = null; switch (keyInput.Key) { case VimKey.Enter: cmdId = VSConstants.VSStd2KCmdID.RETURN; break; case VimKey.Escape: cmdId = VSConstants.VSStd2KCmdID.CANCEL; break; case VimKey.Delete: cmdId = VSConstants.VSStd2KCmdID.DELETE; break; case VimKey.Back: cmdId = VSConstants.VSStd2KCmdID.BACKSPACE; break; case VimKey.Up: cmdId = simulateStandardKeyBindings && hasShift ? VSConstants.VSStd2KCmdID.UP_EXT : VSConstants.VSStd2KCmdID.UP; break; case VimKey.Down: cmdId = simulateStandardKeyBindings && hasShift ? VSConstants.VSStd2KCmdID.DOWN_EXT : VSConstants.VSStd2KCmdID.DOWN; break; case VimKey.Left: cmdId = simulateStandardKeyBindings && hasShift ? VSConstants.VSStd2KCmdID.LEFT_EXT : VSConstants.VSStd2KCmdID.LEFT; break; case VimKey.Right: cmdId = simulateStandardKeyBindings && hasShift ? VSConstants.VSStd2KCmdID.RIGHT_EXT : VSConstants.VSStd2KCmdID.RIGHT; break; case VimKey.Tab: cmdId = simulateStandardKeyBindings && hasShift ? VSConstants.VSStd2KCmdID.BACKTAB : VSConstants.VSStd2KCmdID.TAB; break; case VimKey.PageUp: cmdId = simulateStandardKeyBindings && hasShift ? VSConstants.VSStd2KCmdID.PAGEUP_EXT : VSConstants.VSStd2KCmdID.PAGEUP; break; case VimKey.PageDown: cmdId = simulateStandardKeyBindings && hasShift ? VSConstants.VSStd2KCmdID.PAGEDN_EXT : VSConstants.VSStd2KCmdID.PAGEDN; break; case VimKey.Insert: cmdId = VSConstants.VSStd2KCmdID.TOGGLE_OVERTYPE_MODE; break; } if (cmdId.HasValue) { oleCommandData = new OleCommandData(cmdId.Value); return(true); } if (keyInput.RawChar.IsSome()) { oleCommandData = OleCommandData.CreateTypeChar(keyInput.Char); return(true); } else { oleCommandData = OleCommandData.Empty; return(false); } }