diff --git a/src/prompt_toolkit/completion/fuzzy_completer.py b/src/prompt_toolkit/completion/fuzzy_completer.py index 0f8bba740..eeef4980f 100644 --- a/src/prompt_toolkit/completion/fuzzy_completer.py +++ b/src/prompt_toolkit/completion/fuzzy_completer.py @@ -130,6 +130,7 @@ def sort_key(fuzzy_match: _FuzzyMatch) -> tuple[int, int]: display_meta=match.completion._display_meta, display=self._get_display(match, word_before_cursor), style=match.completion.style, + selected_style=match.completion.selected_style, ) def _get_display( diff --git a/tests/test_completion.py b/tests/test_completion.py index 8b3541af0..3742d42f5 100644 --- a/tests/test_completion.py +++ b/tests/test_completion.py @@ -6,8 +6,13 @@ import tempfile from contextlib import contextmanager +import pytest + from prompt_toolkit.completion import ( CompleteEvent, + Completer, + Completion, + FuzzyCompleter, FuzzyWordCompleter, NestedCompleter, PathCompleter, @@ -400,6 +405,19 @@ def test_fuzzy_completer(): assert [c.text for c in completions] == ["users.txt", "accounts.txt"] +@pytest.mark.parametrize("text", ["", "rd"]) +def test_fuzzy_completer_preserves_styles(text): + class StyledCompleter(Completer): + def get_completions(self, document, complete_event): + yield Completion("red", style="fg:red", selected_style="fg:white bg:red") + + completer = FuzzyCompleter(StyledCompleter()) + completions = list(completer.get_completions(Document(text), CompleteEvent())) + assert len(completions) == 1 + assert completions[0].style == "fg:red" + assert completions[0].selected_style == "fg:white bg:red" + + def test_nested_completer(): completer = NestedCompleter.from_nested_dict( {