diff options
author | nyamatongwe <unknown> | 2009-10-22 02:23:02 +0000 |
---|---|---|
committer | nyamatongwe <unknown> | 2009-10-22 02:23:02 +0000 |
commit | 7aa1d22ec048dfe00590d906493f4a49424f3163 (patch) | |
tree | e42f085fa426fbaca1bd20e3f4a79e154b3b8352 | |
parent | de35dcb4f49b4a7b99a1cb782c8aaf876a7622dc (diff) | |
download | scintilla-mirror-7aa1d22ec048dfe00590d906493f4a49424f3163.tar.gz |
Fix for bug #2882566.
Virtual space removed when performing delete word left or delete line left.
Virtual space converted to real space for delete word right.
Preserve virtual space when preesing Delete key.
-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; |