public void Less() { var left = KeyInputUtil.CharWithControlToKeyInput('c'); var right = KeyInputUtil.ApplyModifiers(left, KeyModifiers.None); Assert.Equal(left, right); }
public void Tab_WithShift() { var keyInput = KeyInputUtil.ApplyModifiers(KeyInputUtil.TabKey, KeyModifiers.Shift); Assert.Equal(keyInput.KeyModifiers, KeyModifiers.Shift); VerifyConvert(VSConstants.VSStd2KCmdID.TAB, KeyModifiers.Shift, keyInput, EditCommandKind.UserInput); }
public void ApplyModifiers_UpperCase() { var keyInput = KeyInputUtil.CharToKeyInput('A'); Assert.Equal(keyInput, KeyInputUtil.ApplyModifiers(KeyInputUtil.CharToKeyInput('a'), KeyModifiers.Shift)); Assert.Equal(keyInput, KeyInputUtil.ApplyModifiers(KeyInputUtil.CharToKeyInput('A'), KeyModifiers.Shift)); }
public void DoubleApplyControl() { var keyInput1 = KeyInputUtil.CharWithControlToKeyInput(';'); var keyInput2 = KeyInputUtil.ApplyModifiers(keyInput1, KeyModifiers.Control); Assert.Equal(keyInput1, keyInput2); }
private bool TryGetKeyInput(Key key, ModifierKeys modifierKeys, out VimKeyData vimKeyData) { // First just check and see if there is a direct mapping var keyState = new KeyState(key, modifierKeys); if (_keyStateToVimKeyDataMap.TryGetValue(keyState, out vimKeyData)) { return(true); } // Next consider only the shift key part of the requested modifier. We can // re-apply the original modifiers later keyState = new KeyState(key, modifierKeys & ModifierKeys.Shift); if (_keyStateToVimKeyDataMap.TryGetValue(keyState, out vimKeyData) && vimKeyData.KeyInputOptional != null) { // Reapply the modifiers var keyInput = KeyInputUtil.ApplyModifiers(vimKeyData.KeyInputOptional, ConvertToKeyModifiers(modifierKeys)); vimKeyData = new VimKeyData(keyInput, vimKeyData.TextOptional); return(true); } // Last consider it without any modifiers and reapply keyState = new KeyState(key, ModifierKeys.None); if (_keyStateToVimKeyDataMap.TryGetValue(keyState, out vimKeyData) && vimKeyData.KeyInputOptional != null) { // Reapply the modifiers var keyInput = KeyInputUtil.ApplyModifiers(vimKeyData.KeyInputOptional, ConvertToKeyModifiers(modifierKeys)); vimKeyData = new VimKeyData(keyInput, vimKeyData.TextOptional); return(true); } return(false); }
public void ApplyModifiers_ShiftToNonAlpha() { var keyInput = KeyInputUtil.ApplyModifiers(KeyInputUtil.TabKey, KeyModifiers.Shift); Assert.Equal(KeyModifiers.Shift, keyInput.KeyModifiers); Assert.Equal(VimKey.Tab, keyInput.Key); }
/// <summary> /// Get the KeyInput for the specified character and Modifier keys. This will properly /// unify the WPF modifiers with the expected Vim ones /// </summary> internal KeyInput GetKeyInput(char c, ModifierKeys modifierKeys) { var keyInput = KeyInputUtil.CharToKeyInput(c); var keyModifiers = ConvertToKeyModifiers(modifierKeys); return(KeyInputUtil.ApplyModifiers(keyInput, keyModifiers)); }
public void ShiftToTab() { var keyInput = KeyInputUtil.ApplyModifiers(KeyInputUtil.TabKey, KeyModifiers.Shift); Assert.Equal(KeyModifiers.Shift, keyInput.KeyModifiers); Assert.Equal(VimKey.Tab, keyInput.Key); Assert.Equal('\t', keyInput.Char); }
public void CharWithControlToKeyInput_Alpha() { foreach (var cur in CharLettersLower) { var left = KeyInputUtil.CharWithControlToKeyInput(cur); var right = KeyInputUtil.ApplyModifiers(KeyInputUtil.CharToKeyInput(cur), KeyModifiers.Control); Assert.Equal(right, left); } }
public void ApplyModifiers_ShiftToNonSpecialChar() { var list = new[] { VimKey.Back, VimKey.Escape, VimKey.Tab }; foreach (var cur in list) { var keyInput = KeyInputUtil.VimKeyToKeyInput(cur); keyInput = KeyInputUtil.ApplyModifiers(keyInput, KeyModifiers.Shift); Assert.Equal(KeyModifiers.Shift, keyInput.KeyModifiers); } }
public void ApplyModifiers_ShiftToSpecialChar() { var list = new[] { '<', '>', '(', '}' }; foreach (var cur in list) { var keyInput = KeyInputUtil.CharToKeyInput(cur); keyInput = KeyInputUtil.ApplyModifiers(keyInput, KeyModifiers.Shift); Assert.Equal(KeyModifiers.None, keyInput.KeyModifiers); } }
bool IKeyUtil.TryConvertSpecialToKeyInput(Key key, ModifierKeys modifierKeys, out KeyInput keyInput) { if (WpfKeyToKeyInputMap.TryGetValue(key, out keyInput)) { var keyModifiers = ConvertToKeyModifiers(modifierKeys); keyInput = KeyInputUtil.ApplyModifiers(keyInput, keyModifiers); return(true); } keyInput = null; return(false); }
public void AltMirror() { const string expected = "Á°±²³´µ¶·¸¹"; const string source = "A0123456789"; for (var i = 0; i < source.Length; i++) { var left = KeyInputUtil.CharToKeyInput(expected[i]); var right = KeyInputUtil.ApplyModifiers(KeyInputUtil.CharToKeyInput(source[i]), KeyModifiers.Alt); Assert.Equal(left, right); } }
public void ControlToAlpha() { var baseCharCode = 0x1; for (var i = 0; i < CharLettersLower.Length; i++) { var target = (char)(baseCharCode + i); var keyInput = KeyInputUtil.CharToKeyInput(CharLettersLower[i]); var found = KeyInputUtil.ApplyModifiers(keyInput, KeyModifiers.Control); Assert.Equal(target, found.Char); Assert.Equal(KeyModifiers.None, found.KeyModifiers); } }
public void ShiftToNonSpecialChar() { var list = new[] { KeyInputUtil.VimKeyToKeyInput(VimKey.Back), KeyInputUtil.VimKeyToKeyInput(VimKey.Escape), KeyInputUtil.TabKey }; foreach (var current in list) { var keyInput = KeyInputUtil.ApplyModifiers(current, KeyModifiers.Shift); Assert.Equal(KeyModifiers.Shift, keyInput.KeyModifiers); } }
internal static bool TryConvert(Guid commandGroup, uint commandId, IntPtr pVariableIn, KeyModifiers modifiers, out EditCommand command) { KeyInput keyInput; EditCommandKind kind; if (!TryConvert(commandGroup, commandId, pVariableIn, out keyInput, out kind)) { command = null; return(false); } keyInput = KeyInputUtil.ApplyModifiers(keyInput, modifiers); command = new EditCommand(keyInput, kind, commandGroup, commandId); return(true); }
/// <summary> /// Last chance at custom handling of user input. At this point we have the /// advantage that WPF has properly converted the user input into a char which /// can be effeciently mapped to a KeyInput value. /// </summary> public override void TextInput(TextCompositionEventArgs args) { VimTrace.TraceInfo("VimKeyProcessor::TextInput Text={0} ControlText={1} SystemText={2}", args.Text, args.ControlText, args.SystemText); bool handled = false; var text = args.Text; if (String.IsNullOrEmpty(text)) { text = args.ControlText; } if (!String.IsNullOrEmpty(text)) { // In the case of a failed dead key mapping (pressing the accent key twice for // example) we will recieve a multi-length string here. One character for every // one of the mappings. Make sure to handle each of them for (var i = 0; i < text.Length; i++) { var keyInput = KeyInputUtil.CharToKeyInput(text[i]); handled = TryProcess(keyInput); } } else if (!String.IsNullOrEmpty(args.SystemText)) { // The system text needs to be processed differently than normal text. When 'a' // is pressed with control it will come in as control text as the proper control // character. When 'a' is pressed with Alt it will come in as simply 'a' and we // have to rely on the currently pressed key modifiers to determine the appropriate // character var keyboardDevice = args.Device as KeyboardDevice; var keyModifiers = keyboardDevice != null ? _keyUtil.GetKeyModifiers(keyboardDevice.Modifiers) : KeyModifiers.Alt; text = args.SystemText; for (var i = 0; i < text.Length; i++) { var keyInput = KeyInputUtil.ApplyModifiers(KeyInputUtil.CharToKeyInput(text[i]), keyModifiers); handled = TryProcess(keyInput); } } VimTrace.TraceInfo("VimKeyProcessor::TextInput Handled={0}", handled); args.Handled = handled; base.TextInput(args); }
internal static bool TryConvert(Guid commandGroup, uint commandId, IntPtr pVariableIn, KeyModifiers modifiers, out EditCommand command) { KeyInput keyInput; EditCommandKind kind; bool isRawText; if (!TryConvert(commandGroup, commandId, pVariableIn, out keyInput, out kind, out isRawText)) { command = null; return(false); } // When raw text is provided it already includes the active keyboard modifiers. Don't reapply them // here else it can incorrectly modify the provided character. if (!isRawText && keyInput != KeyInput.DefaultValue) { keyInput = KeyInputUtil.ApplyModifiers(keyInput, modifiers); } command = new EditCommand(keyInput, kind, commandGroup, commandId); return(true); }
public void BackTab() { VerifyConvert(VSConstants.VSStd2KCmdID.BACKTAB, KeyInputUtil.ApplyModifiers(KeyInputUtil.TabKey, KeyModifiers.Shift), EditCommandKind.UserInput); }
private static KeyInput ApplyModifiers(char c, KeyModifiers keyModifiers) { var keyInput = KeyInputUtil.CharToKeyInput(c); return(KeyInputUtil.ApplyModifiers(keyInput, keyModifiers)); }
public void GetKeyInput_PoundWithShift() { var keyInput = KeyInputUtil.CharToKeyInput('#'); Assert.Equal(keyInput, KeyInputUtil.ApplyModifiers(keyInput, KeyModifiers.Shift)); }
private void VerifyConvertWithShift(VSConstants.VSStd2KCmdID cmd, VimKey vimKey, EditCommandKind kind) { var keyInput = KeyInputUtil.ApplyModifiers(KeyInputUtil.VimKeyToKeyInput(vimKey), KeyModifiers.Shift); VerifyConvert(cmd, keyInput, kind); }