aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authornyamatongwe <devnull@localhost>2009-10-22 02:23:02 +0000
committernyamatongwe <devnull@localhost>2009-10-22 02:23:02 +0000
commit1295d424e21ebe111a158b6388e498385e13cafb (patch)
treee42f085fa426fbaca1bd20e3f4a79e154b3b8352 /src
parentfba5df56d301892e35823a67ac566b2785c58110 (diff)
downloadscintilla-mirror-1295d424e21ebe111a158b6388e498385e13cafb.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.
Diffstat (limited to 'src')
-rw-r--r--src/Editor.cxx14
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;