Skip to content

Commit 2edaf0c

Browse files
committed
Fix bug with undo after possible completions
repro is something like: [ArrayL <Ctrl+Space> <Ctrl+Z> <Ctrl+Space> <Ctrl+Z>
1 parent 4dae288 commit 2edaf0c

File tree

3 files changed

+17
-7
lines changed

3 files changed

+17
-7
lines changed

PSReadLine/Changes.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ Bug fixes:
1515
* Event handlers that register for the engine event PowerShell.OnIdle should work now.
1616
* ClearScreen now just clears the visible screen, not the entire buffer.
1717
* Fix exception on error input during rendering after certain keywords like process, begin, or end.
18+
* Fix exception after undo from menu completion
1819

1920
New functions:
2021
* ValidateAndAcceptLine

PSReadLine/Completion.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,7 @@ private void PossibleCompletionsImpl(CommandCompletion completions, bool menuSel
418418

419419
if (menuSelect)
420420
{
421+
RemoveEditsAfterUndo();
421422
var undoPoint = _edits.Count;
422423

423424
int selectedItem = 0;

PSReadLine/UndoRedo.cs

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,8 @@ namespace PSConsoleUtilities
66
{
77
public partial class PSConsoleReadLine
88
{
9-
private void SaveEditItem(EditItem editItem)
9+
private void RemoveEditsAfterUndo()
1010
{
11-
if (_statusIsErrorMessage)
12-
{
13-
// After an edit, clear the error message
14-
ClearStatusMessage(render: true);
15-
}
16-
1711
// If there is some sort of edit after an undo, forget
1812
// any edit items that were undone.
1913
int removeCount = _edits.Count - _undoEditIndex;
@@ -26,6 +20,18 @@ private void SaveEditItem(EditItem editItem)
2620
_editGroupStart -= removeCount;
2721
}
2822
}
23+
}
24+
25+
private void SaveEditItem(EditItem editItem)
26+
{
27+
if (_statusIsErrorMessage)
28+
{
29+
// After an edit, clear the error message
30+
ClearStatusMessage(render: true);
31+
}
32+
33+
RemoveEditsAfterUndo();
34+
2935
_edits.Add(editItem);
3036
_undoEditIndex = _edits.Count;
3137
}
@@ -37,6 +43,8 @@ private void StartEditGroup()
3743
// Nesting not supported.
3844
throw new InvalidOperationException();
3945
}
46+
47+
RemoveEditsAfterUndo();
4048
_editGroupStart = _edits.Count;
4149
}
4250

0 commit comments

Comments
 (0)