Git commit 21c0431b7a04dceb4a7591b324e801a2f3aa6f95 by Jan Paul Batrina. Committed on 09/03/2021 at 04:08. Pushed by cullmann into branch 'master'.
Add option to keep spaces to the left of cursor when saving BUG: 433455 GUI: M +5 -0 src/dialogs/opensaveconfigwidget.ui M +24 -5 src/document/katedocument.cpp M +6 -5 src/utils/kateconfig.h https://invent.kde.org/frameworks/ktexteditor/commit/21c0431b7a04dceb4a7591b324e801a2f3aa6f95 diff --git a/src/dialogs/opensaveconfigwidget.ui b/src/dialogs/opensaveconfigwidget.ui index 66f98496..ccd1e775 100644 --- a/src/dialogs/opensaveconfigwidget.ui +++ b/src/dialogs/opensaveconfigwidget.ui @@ -186,6 +186,11 @@ <string>In Entire Document</string> </property> </item> + <item> + <property name="text"> + <string>Except To The Left of Cursor Position</string> + </property> + </item> </widget> </item> <item> diff --git a/src/document/katedocument.cpp b/src/document/katedocument.cpp index 56e97a2e..dcf3a8c1 100644 --- a/src/document/katedocument.cpp +++ b/src/document/katedocument.cpp @@ -5073,14 +5073,33 @@ void KTextEditor::DocumentPrivate::removeTrailingSpaces() editStart(); + int curLine = -1, curCol = -1; + if (m_activeView) { + curLine = m_activeView->cursorPosition().line(); + curCol = m_activeView->cursorPosition().column(); + } + for (int line = 0; line < lines(); ++line) { Kate::TextLine textline = plainKateTextLine(line); + int p = -1; + + const int lastChar = textline->lastChar(); + if (remove == 3) { + if (line == curLine && curCol > lastChar) { + // remove trailing spaces except those to the left of current cursor postion, remove = 3 + p = curCol + 1; + } else { + // remove all other tailing spaces from other lines + p = lastChar + 1; + } + } else if (remove == 2 || textline->markedAsModified() || textline->markedAsSavedOnDisk()) { + // remove trailing spaces in entire document, remove = 2 + // remove trailing spaces of touched lines, remove = 1 + // remove trailing spaces of lines saved on disk, remove = 1 + p = lastChar + 1; + } - // remove trailing spaces in entire document, remove = 2 - // remove trailing spaces of touched lines, remove = 1 - // remove trailing spaces of lines saved on disk, remove = 1 - if (remove == 2 || textline->markedAsModified() || textline->markedAsSavedOnDisk()) { - const int p = textline->lastChar() + 1; + if (p != -1) { const int l = textline->length() - p; if (l > 0) { editRemoveText(line, p, l); diff --git a/src/utils/kateconfig.h b/src/utils/kateconfig.h index bedfbe78..28cd8d24 100644 --- a/src/utils/kateconfig.h +++ b/src/utils/kateconfig.h @@ -759,13 +759,14 @@ public: /** * Remove trailing spaces on save. - * triState = 0: never remove trailing spaces - * triState = 1: remove trailing spaces of modified lines (line modification system) - * triState = 2: remove trailing spaces in entire document + * removeMode = 0: never remove trailing spaces + * removeMode = 1: remove trailing spaces of modified lines (line modification system) + * removeMode = 2: remove trailing spaces in entire document + * removeMode = 3: remove trailing spaces except those to the left of cursor */ - void setRemoveSpaces(int triState) + void setRemoveSpaces(int removeMode) { - setValue(RemoveSpacesMode, triState); + setValue(RemoveSpacesMode, removeMode); } int removeSpaces() const