diff options
| -rw-r--r-- | src/Editor.cxx | 31 |
1 files changed, 13 insertions, 18 deletions
diff --git a/src/Editor.cxx b/src/Editor.cxx index 37e0a2736..5b42407e3 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -4168,42 +4168,37 @@ void Editor::Indent(bool forwards, bool lineIndent) { Sci::Position caretPosition = sel.Range(r).caret.Position(); const Sci::Line lineCurrentPos = pdoc->SciLineFromPosition(caretPosition); if (lineOfAnchor == lineCurrentPos && !lineIndent) { + const int indentationStep = pdoc->IndentSize(); if (forwards) { pdoc->DeleteChars(sel.Range(r).Start().Position(), sel.Range(r).Length()); caretPosition = sel.Range(r).caret.Position(); - if (pdoc->GetColumn(caretPosition) <= pdoc->GetColumn(pdoc->GetLineIndentPosition(lineCurrentPos)) && - pdoc->tabIndents) { - const int indentation = pdoc->GetLineIndentation(lineCurrentPos); - const int indentationStep = pdoc->IndentSize(); + const int indentation = pdoc->GetLineIndentation(lineCurrentPos); + const Sci::Position column = pdoc->GetColumn(caretPosition); + if (column <= indentation && pdoc->tabIndents) { + // Inside initial whitespace const Sci::Position posSelect = pdoc->SetLineIndentation( - lineCurrentPos, indentation + indentationStep - indentation % indentationStep); + lineCurrentPos, indentation + indentationStep - (indentation % indentationStep)); sel.Range(r) = SelectionRange(posSelect); } else { if (pdoc->useTabs) { - const Sci::Position lengthInserted = pdoc->InsertString(caretPosition, "\t", 1); + const Sci::Position lengthInserted = pdoc->InsertString(caretPosition, "\t"); sel.Range(r) = SelectionRange(caretPosition + lengthInserted); } else { - int numSpaces = (pdoc->tabInChars) - - static_cast<int>((pdoc->GetColumn(caretPosition) % (pdoc->tabInChars))); - if (numSpaces < 1) - numSpaces = pdoc->tabInChars; + const Sci::Position numSpaces = pdoc->tabInChars - (column % pdoc->tabInChars); const std::string spaceText(numSpaces, ' '); const Sci::Position lengthInserted = pdoc->InsertString(caretPosition, spaceText); sel.Range(r) = SelectionRange(caretPosition + lengthInserted); } } } else { - if (pdoc->GetColumn(caretPosition) <= pdoc->GetLineIndentation(lineCurrentPos) && - pdoc->tabIndents) { - const int indentation = pdoc->GetLineIndentation(lineCurrentPos); - const int indentationStep = pdoc->IndentSize(); + const int indentation = pdoc->GetLineIndentation(lineCurrentPos); + const Sci::Position column = pdoc->GetColumn(caretPosition); + if (column <= indentation && pdoc->tabIndents) { const Sci::Position posSelect = pdoc->SetLineIndentation(lineCurrentPos, indentation - indentationStep); sel.Range(r) = SelectionRange(posSelect); } else { - Sci::Position newColumn = ((pdoc->GetColumn(caretPosition) - 1) / pdoc->tabInChars) * - pdoc->tabInChars; - if (newColumn < 0) - newColumn = 0; + const Sci::Position newColumn = std::max<Sci::Position>(0, + ((column - 1) / pdoc->tabInChars) * pdoc->tabInChars); Sci::Position newPos = caretPosition; while (pdoc->GetColumn(newPos) > newColumn) newPos--; |
