aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorMartijn Laan <1092369+martijnlaan@users.noreply.github.com>2024-07-31 21:49:44 +1000
committerMartijn Laan <1092369+martijnlaan@users.noreply.github.com>2024-07-31 21:49:44 +1000
commit0d6fd0c6bc452f41919bbdf8dcc9b3d6fbc83205 (patch)
tree44ea2ccd2b37a031cfda50a93c06ce8cd4acf0b2 /src
parent1cccf5165b891eb95c85932474bb872ab0fbe638 (diff)
downloadscintilla-mirror-0d6fd0c6bc452f41919bbdf8dcc9b3d6fbc83205.tar.gz
Feature [feature-requests:#1524]. Add SCI_LINEINDENT and SCI_LINEDEDENT.
These force the multiline behaviour of SCI_TAB and SCI_BACKTAB.
Diffstat (limited to 'src')
-rw-r--r--src/Editor.cxx16
-rw-r--r--src/Editor.h2
2 files changed, 12 insertions, 6 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:
diff --git a/src/Editor.h b/src/Editor.h
index 50aa9a660..e42f36573 100644
--- a/src/Editor.h
+++ b/src/Editor.h
@@ -505,7 +505,7 @@ protected: // ScintillaBase subclass needs access to much of Editor
virtual int KeyDefault(Scintilla::Keys /* key */, Scintilla::KeyMod /*modifiers*/);
int KeyDownWithModifiers(Scintilla::Keys key, Scintilla::KeyMod modifiers, bool *consumed);
- void Indent(bool forwards);
+ void Indent(bool forwards, bool lineTab);
virtual std::unique_ptr<CaseFolder> CaseFolderForEncoding();
Sci::Position FindText(Scintilla::uptr_t wParam, Scintilla::sptr_t lParam);