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();
                }
            }
        }