Skip to content

Commit 1f6c5c0

Browse files
authored
Deleting backward to or until a character should preserve the character under the cursor (#2007)
1 parent 352edb9 commit 1f6c5c0

File tree

3 files changed

+37
-16
lines changed

3 files changed

+37
-16
lines changed

PSReadLine/ReadLine.vi.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ private static void DeleteToEndPoint(object arg, int endPoint, Action<ConsoleKey
299299

300300
private static void DeleteBackwardToEndPoint(object arg, int endPoint, Action<ConsoleKeyInfo?, object> instigator)
301301
{
302-
int deleteLength = _singleton._current - endPoint + 1;
302+
int deleteLength = _singleton._current - endPoint;
303303

304304
_singleton.SaveToClipboard(endPoint, deleteLength);
305305
_singleton.SaveEditItem(EditItemDelete.Create(

test/BasicEditingTest.VI.cs

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,27 @@ public void ViDeletePreviousLines_LastLine()
529529
));
530530
}
531531

532+
// Defect #1674
533+
[SkippableFact]
534+
public void ViDeleteToCharBack()
535+
{
536+
TestSetup(KeyMode.Vi);
537+
538+
Test("g", Keys(
539+
"abcdefg", _.Escape,
540+
// delete to the first character 'a'
541+
"dFa",
542+
CheckThat(() => AssertCursorLeftIs(0))
543+
));
544+
545+
Test("06", Keys(
546+
"0123456", _.Escape,
547+
// delete to the first character '0'
548+
"dT0", CheckThat(() => AssertLineIs("06")),
549+
CheckThat(() => AssertCursorLeftIs(1))
550+
));
551+
}
552+
532553
[SkippableFact]
533554
public void ViDeleteToEnd()
534555
{
@@ -1007,14 +1028,14 @@ public void ViChangeChar()
10071028

10081029
Test("0123456", Keys(
10091030
"0123456", _.Escape, CheckThat(() => AssertLineIs("0123456")),
1010-
"cF0abc", _.Escape, CheckThat(() => AssertLineIs("abc")),
1031+
"cF0abc", _.Escape, CheckThat(() => AssertLineIs("abc6")),
10111032
'u', CheckThat(() => AssertLineIs("0123456")), CheckThat(() => AssertCursorLeftIs(6)),
1012-
"cF1abc", _.Escape, CheckThat(() => AssertLineIs("0abc")),
1013-
'u', CheckThat(() => AssertLineIs("0123456")), CheckThat(() => AssertCursorLeftIs(6)),
1014-
"hcF0abc", _.Escape, CheckThat(() => AssertLineIs("abc6")),
1015-
'u', CheckThat(() => AssertLineIs("0123456")), CheckThat(() => AssertCursorLeftIs(6)),
1016-
"hcF1abc", _.Escape, CheckThat(() => AssertLineIs("0abc6")),
1033+
"cF1abc", _.Escape, CheckThat(() => AssertLineIs("0abc6")),
10171034
'u', CheckThat(() => AssertLineIs("0123456")), CheckThat(() => AssertCursorLeftIs(6)),
1035+
"hcF0abc", _.Escape, CheckThat(() => AssertLineIs("abc56")),
1036+
'u', CheckThat(() => AssertLineIs("0123456")), CheckThat(() => AssertCursorLeftIs(5)),
1037+
"hcF1abc", _.Escape, CheckThat(() => AssertLineIs("0abc456")),
1038+
'u', CheckThat(() => AssertLineIs("0123456")), CheckThat(() => AssertCursorLeftIs(4)),
10181039
"0cF0abc", _.Escape, CheckThat(() => AssertLineIs("0bc123456")),
10191040
'u'
10201041
));
@@ -1031,10 +1052,10 @@ public void ViChangeChar()
10311052

10321053
Test("0123456", Keys(
10331054
"0123456", _.Escape, CheckThat(() => AssertLineIs("0123456")),
1034-
"cT1abc", _.Escape, CheckThat(() => AssertLineIs("01abc")),
1035-
'u', CheckThat(() => AssertLineIs("0123456")), CheckThat(() => AssertCursorLeftIs(6)),
1036-
"hcT1abc", _.Escape, CheckThat(() => AssertLineIs("01abc6")),
1055+
"cT1abc", _.Escape, CheckThat(() => AssertLineIs("01abc6")),
10371056
'u', CheckThat(() => AssertLineIs("0123456")), CheckThat(() => AssertCursorLeftIs(6)),
1057+
"hcT1abc", _.Escape, CheckThat(() => AssertLineIs("01abc56")),
1058+
'u', CheckThat(() => AssertLineIs("0123456")), CheckThat(() => AssertCursorLeftIs(5)),
10381059
"0cT0abc", _.Escape, CheckThat(() => AssertLineIs("0bc123456")),
10391060
'u'
10401061
));

test/MovementTest.VI.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -621,11 +621,11 @@ public void ViCharDelete()
621621
"0dfg"
622622
));
623623

624-
Test("", Keys(
624+
Test("g", Keys(
625625
"abcdefg", _.Escape, CheckThat(() => AssertLineIs("abcdefg")),
626-
"dFa", _.Escape, CheckThat(() => AssertLineIs("")),
626+
"dFa", _.Escape, CheckThat(() => AssertLineIs("g")),
627627
'u', CheckThat(() => AssertCursorLeftIs(6)),
628-
"dFb", CheckThat(() => AssertLineIs("a")),
628+
"dFb", CheckThat(() => AssertLineIs("ag")),
629629
'u', CheckThat(() => AssertCursorLeftIs(6)),
630630
"dFa"
631631
));
@@ -644,10 +644,10 @@ public void ViCharDelete()
644644

645645
Test("0123456", Keys(
646646
"0123456", _.Escape, CheckThat(() => AssertLineIs("0123456")),
647-
"dT0", CheckThat(() => AssertLineIs("0")),
648-
'u', CheckThat(() => AssertLineIs("0123456")), CheckThat(() => AssertCursorLeftIs(6)),
649-
"hdT0", CheckThat(() => AssertLineIs("06")),
647+
"dT0", CheckThat(() => AssertLineIs("06")),
650648
'u', CheckThat(() => AssertLineIs("0123456")), CheckThat(() => AssertCursorLeftIs(6)),
649+
"hdT0", CheckThat(() => AssertLineIs("056")),
650+
'u', CheckThat(() => AssertLineIs("0123456")), CheckThat(() => AssertCursorLeftIs(5)),
651651
"0dT0"
652652
));
653653
}

0 commit comments

Comments
 (0)