diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Editor.cxx | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/Editor.cxx b/src/Editor.cxx index 2825aeb5d..847a0d27a 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -3780,7 +3780,7 @@ void Editor::ClearSelection() { sel.Range(r).End().Position())) { pdoc->DeleteChars(sel.Range(r).Start().Position(), sel.Range(r).Length()); - sel.Range(r).ClearVirtualSpace(); + sel.Range(r) = sel.Range(r).Start(); } } } @@ -3889,6 +3889,12 @@ void Editor::Clear() { if (sel.Empty()) { for (size_t r=0; r<sel.Count(); r++) { if (!RangeContainsProtected(sel.Range(r).caret.Position(), sel.Range(r).caret.Position() + 1)) { + if (sel.Range(r).Start().VirtualSpace()) { + if (sel.Range(r).anchor < sel.Range(r).caret) + sel.Range(r) = SelectionPosition(InsertSpace(sel.Range(r).anchor.Position(), sel.Range(r).anchor.VirtualSpace())); + else + sel.Range(r) = SelectionPosition(InsertSpace(sel.Range(r).caret.Position(), sel.Range(r).caret.VirtualSpace())); + } if ((sel.Count() == 1) || !IsEOLChar(pdoc->CharAt(sel.Range(r).caret.Position()))) { pdoc->DelChar(sel.Range(r).caret.Position()); sel.Range(r).ClearVirtualSpace(); @@ -4998,15 +5004,20 @@ int Editor::KeyCommand(unsigned int iMessage) { case SCI_DELWORDLEFT: { int startWord = pdoc->NextWordStart(sel.MainCaret(), -1); pdoc->DeleteChars(startWord, sel.MainCaret() - startWord); + sel.RangeMain().ClearVirtualSpace(); SetLastXChosen(); } break; case SCI_DELWORDRIGHT: { + sel.RangeMain().caret = SelectionPosition( + InsertSpace(sel.RangeMain().caret.Position(), sel.RangeMain().caret.VirtualSpace())); int endWord = pdoc->NextWordStart(sel.MainCaret(), 1); pdoc->DeleteChars(sel.MainCaret(), endWord - sel.MainCaret()); } break; case SCI_DELWORDRIGHTEND: { + sel.RangeMain().caret = SelectionPosition( + InsertSpace(sel.RangeMain().caret.Position(), sel.RangeMain().caret.VirtualSpace())); int endWord = pdoc->NextWordEnd(sel.MainCaret(), 1); pdoc->DeleteChars(sel.MainCaret(), endWord - sel.MainCaret()); } @@ -5015,6 +5026,7 @@ int Editor::KeyCommand(unsigned int iMessage) { int line = pdoc->LineFromPosition(sel.MainCaret()); int start = pdoc->LineStart(line); pdoc->DeleteChars(start, sel.MainCaret() - start); + sel.RangeMain().ClearVirtualSpace(); SetLastXChosen(); } break; |