aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/Editor.cxx31
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--;