Skip to content

Commit

Permalink
Changed logic from search regex to filter regex.
Browse files Browse the repository at this point in the history
The search regex functionality had a logic to highlight the pattern.
With the search_regex_function logic the highlight functionality was
getting lost, because we used additional anchors like
^/$/lookahead/lookbehind, etc.

So, this change limits the custom function to filtering logic, while
keeping the original logic for highlighting.
  • Loading branch information
anishsane committed Sep 19, 2024
1 parent 2945fb3 commit f61432d
Showing 1 changed file with 13 additions and 10 deletions.
23 changes: 13 additions & 10 deletions simple_term_menu.py
Original file line number Diff line number Diff line change
Expand Up @@ -166,12 +166,12 @@ def __init__(
search_text: Optional[str] = None,
case_senitive: bool = False,
show_search_hint: bool = False,
search_regex_function: Optional[Callable[[str], re.Pattern]] = None,
filter_regex_function: Optional[Callable[[str], re.Pattern]] = None,
):
self._menu_entries = menu_entries
self._case_sensitive = case_senitive
self._show_search_hint = show_search_hint
self._search_regex_function = search_regex_function
self._filter_regex_function = filter_regex_function
self._matches = [] # type: List[Tuple[int, Match[str]]]
self._search_regex = None # type: Optional[Pattern[str]]
self._change_callback = None # type: Optional[Callable[[], None]]
Expand All @@ -183,10 +183,15 @@ def _update_matches(self) -> None:
self._matches = []
else:
matches = []
search_regex = self._search_regex
if self._filter_regex_function:
search_regex = self._filter_regex_function(self._search_text) or search_regex

for i, menu_entry in enumerate(self._menu_entries):
match_obj = self._search_regex.search(menu_entry)
if match_obj:
matches.append((i, match_obj))
if search_regex.search(menu_entry):
match_obj = self._search_regex.search(menu_entry)
if match_obj:
matches.append((i, match_obj))
self._matches = matches

@property
Expand All @@ -206,8 +211,6 @@ def search_text(self, text: Optional[str]) -> None:
self._search_text = text
search_text = self._search_text
self._search_regex = None
if search_text and self._search_regex_function:
self._search_regex = self._search_regex_function(search_text)
while search_text and self._search_regex is None:
try:
self._search_regex = re.compile(search_text, flags=re.IGNORECASE if not self._case_sensitive else 0)
Expand Down Expand Up @@ -622,7 +625,7 @@ def __init__(
search_case_sensitive: bool = DEFAULT_SEARCH_CASE_SENSITIVE,
search_highlight_style: Optional[Iterable[str]] = DEFAULT_SEARCH_HIGHLIGHT_STYLE,
search_key: Optional[str] = DEFAULT_SEARCH_KEY,
search_regex_function: Optional[Callable[[str], re.Pattern]] = None,
filter_regex_function: Optional[Callable[[str], re.Pattern]] = None,
shortcut_brackets_highlight_style: Optional[Iterable[str]] = DEFAULT_SHORTCUT_BRACKETS_HIGHLIGHT_STYLE,
shortcut_key_highlight_style: Optional[Iterable[str]] = DEFAULT_SHORTCUT_KEY_HIGHLIGHT_STYLE,
show_multi_select_hint: bool = DEFAULT_SHOW_MULTI_SELECT_HINT,
Expand Down Expand Up @@ -769,7 +772,7 @@ def setup_title_or_status_bar_lines(
self._search_case_sensitive = search_case_sensitive
self._search_highlight_style = tuple(search_highlight_style) if search_highlight_style is not None else ()
self._search_key = search_key
self._search_regex_function = search_regex_function
self._filter_regex_function = filter_regex_function
self._shortcut_brackets_highlight_style = (
tuple(shortcut_brackets_highlight_style) if shortcut_brackets_highlight_style is not None else ()
)
Expand Down Expand Up @@ -813,7 +816,7 @@ def setup_title_or_status_bar_lines(
self._menu_entries,
case_senitive=self._search_case_sensitive,
show_search_hint=self._show_search_hint,
search_regex_function=self._search_regex_function,
filter_regex_function=self._filter_regex_function,
)
self._selection = self.Selection(self._preselected_indices)
self._viewport = self.Viewport(
Expand Down

0 comments on commit f61432d

Please sign in to comment.