private void MoveCaretToNextTabStop() { while (CaretColumn % IndentSize != 0 && CaretCharIsASpace) { Caret.MoveToNextCaretPosition(); } Caret.EnsureVisible(); }
private void MoveCaretToPreviousTabStop() { Caret.MoveToPreviousCaretPosition(); while (CaretColumn % IndentSize != (IndentSize - 1) && CaretCharIsASpace) { Caret.MoveToPreviousCaretPosition(); } Caret.MoveToNextCaretPosition(); Caret.EnsureVisible(); }
private void MoveCaretToPreviousTabStop() { var caretStartingPosition = Caret.Position.VirtualBufferPosition; var caretStartingColumn = CaretColumn; Caret.MoveToPreviousCaretPosition(); var lastCaretColumn = -1; while (CaretColumn % IndentSize != (IndentSize - 1) && CaretCharIsASpace) { if (CaretColumn >= lastCaretColumn && lastCaretColumn != -1) { break; // Prevent infinite loop on first char of first line or in box selection } lastCaretColumn = CaretColumn; Caret.MoveToPreviousCaretPosition(); } if (Caret.Position.BufferPosition.Position != 0) { // Do this for all cases except the first char of the document Caret.MoveToNextCaretPosition(); } VirtualSnapshotPoint?caretNewPosition = Caret.Position.VirtualBufferPosition; int movedBy = caretStartingColumn - CaretColumn; if (movedBy % IndentSize != 0) { // We moved less than a full tab stop length. Only allow this if the cursor started in the middle of a full tab for (int i = 0; i < IndentSize; i++) { if (Caret.Position.BufferPosition.Add(i).GetChar() != ' ') { caretNewPosition = null; Caret.MoveTo(caretStartingPosition); // Do not align on non-exact tab stops break; } } if (caretNewPosition != null) { Caret.MoveTo(caretNewPosition.Value); // Go back to original new position } } Caret.EnsureVisible(); }
private void MoveCaretToNextTabStop() { var caretStartingPosition = Caret.Position.VirtualBufferPosition; var caretStartingColumn = CaretColumn; var lastCaretColumn = -1; while (CaretColumn % IndentSize != 0 && CaretCharIsASpace) { if (CaretColumn <= lastCaretColumn) { break; // Prevent infinite loop in box selection } lastCaretColumn = CaretColumn; Caret.MoveToNextCaretPosition(); } if (CaretColumn % IndentSize != 0) { Caret.MoveTo(caretStartingPosition); // Do not align on non-exact tab stops } Caret.EnsureVisible(); }
private void MoveCaretToVirtualPosition(int pos) { Caret.MoveTo(new VirtualSnapshotPoint(_snapshotLine, pos)); Caret.EnsureVisible(); }