public void KeyPressed(KeyEventArgs e, Buffer buffer) { Hotkey hk = null; foreach (var hotkey in Hotkeys) { if (e.KeyCode != hotkey.KeyCode) { continue; } var pass = true; if (hotkey.Modifiers.HasFlag(KeyModifiers.Control)) { if (!e.Modifiers.HasFlag(KeyModifiers.LeftControl) && !e.Modifiers.HasFlag(KeyModifiers.RightControl)) { pass = false; } } if (hotkey.Modifiers.HasFlag(KeyModifiers.Shift)) { if (!e.Modifiers.HasFlag(KeyModifiers.LeftShift) && !e.Modifiers.HasFlag(KeyModifiers.RightShift)) { pass = false; } } if (hotkey.Modifiers.HasFlag(KeyModifiers.Alt)) { if (!e.Modifiers.HasFlag(KeyModifiers.LeftAlt) && !e.Modifiers.HasFlag(KeyModifiers.RightAlt)) { pass = false; } } if (pass) { hk = hotkey; break; } } if (hk != null) { if (hk.RequiresBuffer && Owner.CurrentBuffer == null) { return; } if (Owner.ShiftDown) { buffer.UpdateSelection(); } hk.Action(buffer); if (hk.ClearsSelection && !Owner.ShiftDown) { buffer.ClearSelection(); } } }