diff --git a/changelog.md b/changelog.md index b01cd235..8a550808 100644 --- a/changelog.md +++ b/changelog.md @@ -6,6 +6,11 @@ Features * Add `\bug` command. +Bug Fixes +--------- +* Force a prompt_toolkit refresh after fzf history search to avoid display glitches. + + 1.57.0 (2026/02/25) ============== diff --git a/mycli/packages/toolkit/fzf.py b/mycli/packages/toolkit/fzf.py index a5d6ffce..966fb436 100644 --- a/mycli/packages/toolkit/fzf.py +++ b/mycli/packages/toolkit/fzf.py @@ -6,6 +6,7 @@ from pyfzf import FzfPrompt from mycli.packages.toolkit.history import FileHistoryWithTimestamp +from mycli.packages.toolkit.utils import safe_invalidate_display class Fzf(FzfPrompt): @@ -56,6 +57,7 @@ def search_history(event: KeyPressEvent, incremental: bool = False) -> None: formatted_history_items, fzf_options=' '.join(options), ) + safe_invalidate_display(event.app) if result: selected_index = formatted_history_items.index(result[0]) diff --git a/mycli/packages/toolkit/utils.py b/mycli/packages/toolkit/utils.py new file mode 100644 index 00000000..1e5fca93 --- /dev/null +++ b/mycli/packages/toolkit/utils.py @@ -0,0 +1,20 @@ +from prompt_toolkit.application import Application, run_in_terminal + + +def safe_invalidate_display(app: Application) -> None: + """ + fzf can confuse the terminal/app when certain values are set in + environment variable FZF_DEFAULT_OPTS. + + The same could happen after running other external programs. + + This function invalidates the prompt_toolkit display, causing a + refresh of the prompt message and pending user input, without + leading to exceptions at exit time, as the built-in + app.invalidate() does. + """ + + def print_empty_string(): + app.print_text('') + + run_in_terminal(print_empty_string)