diff options
Diffstat (limited to 'src/Editor.cxx')
-rw-r--r-- | src/Editor.cxx | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/Editor.cxx b/src/Editor.cxx index 0561b42f8..588f22e4d 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -2934,7 +2934,9 @@ void Editor::NotifyMacroRecord(Message iMessage, uptr_t wParam, sptr_t lParam) { case Message::Cancel: case Message::DeleteBack: case Message::Tab: + case Message::LineIndent: case Message::BackTab: + case Message::LineDedent: case Message::FormFeed: case Message::VCHome: case Message::VCHomeExtend: @@ -3954,7 +3956,8 @@ int Editor::KeyCommand(Message iMessage) { EnsureCaretVisible(); break; case Message::Tab: - Indent(true); + case Message::LineIndent: + Indent(true, iMessage == Message::LineIndent); if (caretSticky == CaretSticky::Off) { SetLastXChosen(); } @@ -3962,7 +3965,8 @@ int Editor::KeyCommand(Message iMessage) { ShowCaretAtCurrentPosition(); // Avoid blinking break; case Message::BackTab: - Indent(false); + case Message::LineDedent: + Indent(false, iMessage == Message::LineDedent); if ((caretSticky == CaretSticky::Off) || (caretSticky == CaretSticky::WhiteSpace)) { SetLastXChosen(); } @@ -4065,14 +4069,14 @@ int Editor::KeyDownWithModifiers(Keys key, KeyMod modifiers, bool *consumed) { } } -void Editor::Indent(bool forwards) { +void Editor::Indent(bool forwards, bool lineIndent) { UndoGroup ug(pdoc); for (size_t r=0; r<sel.Count(); r++) { const Sci::Line lineOfAnchor = pdoc->SciLineFromPosition(sel.Range(r).anchor.Position()); Sci::Position caretPosition = sel.Range(r).caret.Position(); const Sci::Line lineCurrentPos = pdoc->SciLineFromPosition(caretPosition); - if (lineOfAnchor == lineCurrentPos) { + if (lineOfAnchor == lineCurrentPos && !lineIndent) { if (forwards) { pdoc->DeleteChars(sel.Range(r).Start().Position(), sel.Range(r).Length()); caretPosition = sel.Range(r).caret.Position(); @@ -4115,7 +4119,7 @@ void Editor::Indent(bool forwards) { sel.Range(r) = SelectionRange(newPos); } } - } else { // Multiline + } else { // Multiline or LineIndent const Sci::Position anchorPosOnLine = sel.Range(r).anchor.Position() - pdoc->LineStart(lineOfAnchor); const Sci::Position currentPosPosOnLine = caretPosition - @@ -8175,7 +8179,9 @@ sptr_t Editor::WndProc(Message iMessage, uptr_t wParam, sptr_t lParam) { case Message::Cancel: case Message::DeleteBack: case Message::Tab: + case Message::LineIndent: case Message::BackTab: + case Message::LineDedent: case Message::NewLine: case Message::FormFeed: case Message::VCHome: |