private bool TryConvert(KeyInput keyInput, out Key key, out ModifierKeys modifierKeys) { if (AlternateKeyUtil.TrySpecialVimKeyToKey(keyInput.Key, out key)) { var keyModifiers = keyInput.KeyModifiers; modifierKeys = ModifierKeys.None; if (KeyModifiers.Control == (keyModifiers & KeyModifiers.Control)) { modifierKeys |= ModifierKeys.Control; } if (KeyModifiers.Shift == (keyModifiers & KeyModifiers.Shift)) { modifierKeys |= ModifierKeys.Shift; } if (KeyModifiers.Alt == (keyModifiers & KeyModifiers.Alt)) { modifierKeys |= ModifierKeys.Alt; } return(true); } if (keyInput.RawChar.IsSome()) { uint virtualKey; VirtualKeyModifiers virtualKeyModifiers; if (_virtualKeyboard.TryMapChar(keyInput.Char, out virtualKey, out virtualKeyModifiers)) { key = KeyInterop.KeyFromVirtualKey((int)virtualKey); modifierKeys = ModifierKeys.None; if (VirtualKeyModifiers.Control == (virtualKeyModifiers & VirtualKeyModifiers.Control)) { modifierKeys |= ModifierKeys.Control; } if (VirtualKeyModifiers.Shift == (virtualKeyModifiers & VirtualKeyModifiers.Shift)) { modifierKeys |= ModifierKeys.Shift; } if (VirtualKeyModifiers.Alt == (virtualKeyModifiers & VirtualKeyModifiers.Alt)) { modifierKeys |= ModifierKeys.Alt; } return(true); } } key = Key.None; modifierKeys = ModifierKeys.None; return(false); }
private bool TryConvert(KeyInput keyInput, out Key key, out ModifierKeys modifierKeys) { if (AlternateKeyUtil.TrySpecialVimKeyToKey(keyInput.Key, out key)) { var keyModifiers = keyInput.KeyModifiers; modifierKeys = ModifierKeys.None; if (VimKeyModifiers.Control == (keyModifiers & VimKeyModifiers.Control)) { modifierKeys |= ModifierKeys.Control; } if (VimKeyModifiers.Shift == (keyModifiers & VimKeyModifiers.Shift)) { modifierKeys |= ModifierKeys.Shift; } if (VimKeyModifiers.Alt == (keyModifiers & VimKeyModifiers.Alt)) { modifierKeys |= ModifierKeys.Alt; } return(true); } KeyData keyData; if (KeyDataMap.TryGetValue(keyInput, out keyData)) { key = keyData.Key; modifierKeys = keyData.ModifierKeys; return(true); } key = Key.None; modifierKeys = ModifierKeys.None; return(false); }