diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Editor.cxx | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/src/Editor.cxx b/src/Editor.cxx index 3bf50b09e..fac808e54 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -1623,19 +1623,17 @@ bool Editor::WrapLines(WrapScope ws) { void Editor::LinesJoin() { if (!RangeContainsProtected(targetRange.start.Position(), targetRange.end.Position())) { UndoGroup ug(pdoc); - bool prevNonWS = true; - for (Sci::Position pos = targetRange.start.Position(); pos < targetRange.end.Position(); pos++) { - if (pdoc->IsPositionInLineEnd(pos)) { - targetRange.end.Add(-pdoc->LenChar(pos)); - pdoc->DelChar(pos); - if (prevNonWS) { - // Ensure at least one space separating previous lines - const Sci::Position lengthInserted = pdoc->InsertString(pos, " ", 1); - targetRange.end.Add(lengthInserted); - } - } else { - prevNonWS = pdoc->CharAt(pos) != ' '; + for (Sci::Position pos = pdoc->LineEndPosition(targetRange.start.Position()); pos < targetRange.end.Position();) { + const char chPrev = pdoc->CharAt(pos - 1); + const Sci::Position widthChar = pdoc->LenChar(pos); + targetRange.end.Add(-widthChar); + pdoc->DeleteChars(pos, widthChar); + if (chPrev != ' ') { + // Ensure at least one space separating previous lines + const Sci::Position lengthInserted = pdoc->InsertString(pos, " ", 1); + targetRange.end.Add(lengthInserted); } + pos = pdoc->LineEndPosition(pos); } } } |