Ejemplo n.º 1
0
        private void MovePrevious(bool extendSelection)
        {
            if (!extendSelection && !textView.Selection.IsEmpty)
            {
                textView.Selection.Select(textView.Selection.ActivePoint, textView.Selection.ActivePoint);
            }

            var caret = textView.Caret;

            if (caret.InVirtualSpace)
            {
                operations.MoveToEndOfLine(extendSelection);
                return;
            }

            var point = caret.Position.BufferPosition;

            if (point.Position == 0)
            {
                return;
            }

            if (point == caret.ContainingTextViewLine.Start)
            {
                operations.MoveLineUp(extendSelection);
                operations.MoveToLastNonWhiteSpaceCharacter(extendSelection);
                if (navigator.GetExtentOfWord(caret.Position.BufferPosition).IsSignificant)
                {
                    operations.MoveToNextCharacter(extendSelection);
                }
                return;
            }

            var extent = navigator.GetExtentOfSubword(point - 1);

            if (extent == null)
            {
                return;
            }

            for (int i = point; i > extent.Value.Span.Start; i--)
            {
                operations.MoveToPreviousCharacter(extendSelection);
            }
        }