public void CopyEntireCurrentLine()
        {
            SelectEntireCurrentLine();
            string newLineText = SelectedText;

            CaretIndex = Text.LastIndexOf(Environment.NewLine, CaretIndex) + 1;
            CustomClipboard.SetObject(newLineText);
        }
        protected override void OnPreviewKeyDown(KeyEventArgs e)
        {
            if (Keyboard.IsKeyDown(Key.LeftCtrl))
            {
                if (Keyboard.IsKeyDown(Key.LeftShift))
                {
                    switch (e.Key)
                    {
                    case Key.A:
                        if (!PreferencesG.CAN_SELECT_ENTIRE_LINE_CTRL_SHIFT_A)
                        {
                            break;
                        }
                        int start      = Text.LastIndexOf(Environment.NewLine, CaretIndex) + 1;
                        int lineIdx    = GetLineIndexFromCharacterIndex(CaretIndex);
                        int lineLength = GetLineLength(lineIdx);
                        SelectionStart  = start;
                        SelectionLength = lineLength;
                        break;
                    }
                }
                switch (e.Key)
                {
                case Key.X:
                    if (!PreferencesG.CAN_CUT_ENTIRE_LINE_CTRL_X)
                    {
                        break;
                    }
                    if (SelectedText == "")
                    {
                        int start      = Text.LastIndexOf(Environment.NewLine, CaretIndex) + 1;
                        int lineIdx    = GetLineIndexFromCharacterIndex(CaretIndex);
                        int lineLength = GetLineLength(lineIdx);
                        SelectionStart  = start;
                        SelectionLength = lineLength;
                    }
                    break;

                case Key.C:
                    if (!PreferencesG.CAN_COPY_ENTIRE_LINE_CTRL_C)
                    {
                        break;
                    }
                    if (SelectedText == "")
                    {
                        int prevCaretIndex = CaretIndex;
                        int start          = Text.LastIndexOf(Environment.NewLine, CaretIndex) + 1;
                        int lineIdx        = GetLineIndexFromCharacterIndex(CaretIndex);
                        int lineLength     = GetLineLength(lineIdx);
                        SelectionStart  = start;
                        SelectionLength = lineLength;
                        CustomClipboard.SetObject(SelectedText);
                        CaretIndex = prevCaretIndex;
                        e.Handled  = true;
                    }
                    break;

                case Key.Up:
                    if (!PreferencesG.SCROLL_VERTICAL_WITH_CTRL_ARROWKEYS)
                    {
                        break;
                    }
                    LineUp(); e.Handled = true;
                    break;

                case Key.Down:
                    if (!PreferencesG.SCROLL_VERTICAL_WITH_CTRL_ARROWKEYS)
                    {
                        break;
                    }
                    LineDown(); e.Handled = true;
                    break;

                case Key.Left:
                    if (!PreferencesG.SCROLL_HORIZONTAL_WITH_CTRL_ARROWKEYS)
                    {
                        break;
                    }
                    LineLeft(); e.Handled = true;
                    break;

                case Key.Right:
                    if (!PreferencesG.SCROLL_HORIZONTAL_WITH_CTRL_ARROWKEYS)
                    {
                        break;
                    }
                    LineRight(); e.Handled = true;
                    break;
                }
            }
            // Cant do because holding alt apparently blocks the keydown events...
            //if (Keyboard.Modifiers == ModifierKeys.Alt)
            //{
            //    switch (e.Key)
            //    {
            //        case Key.Left: LineLeft(); e.Handled = true; break;
            //        case Key.Right: LineRight(); e.Handled = true; break;
            //    }
            //}
        }