Fix redo after custom undo bindings - #2083
Open
giri256 wants to merge 1 commit into
Open
Conversation
Signed-off-by: p1 <giridharpavan593@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #1703.
Custom key bindings use
save_before=Trueby default, so the key processor saves the current buffer before callingBuffer.undo()orBuffer.redo().save_to_undo_stack()previously cleared the redo stack immediately. As a result, a second custom undo discarded the state created by the first undo, and a custom redo discarded its own redo state before it could use it.This defers redo invalidation until the next actual text change. Undo and redo cancel the pending invalidation because they navigate existing history rather than create a new edit. A normal edit after undo still clears redo.
The new tests cover both behaviors:
Validation:
pytest tests/test_buffer.py— 11 passedruff check src/prompt_toolkit/buffer.py tests/test_buffer.pyruff format --check src/prompt_toolkit/buffer.py tests/test_buffer.pymypy src/prompt_toolkit/buffer.py2Windows console-buffer failures and2existing CLI history-input failures)AI assistance was used during diagnosis and implementation. I reproduced the failure before changing code, reviewed the final two-file diff, verified the edit-invalidates-redo control, and classified the full-suite failures against an untouched upstream worktree.