Skip to content
Snippets Groups Projects
Commit 3678bcbd authored by Johann Jacobsohn's avatar Johann Jacobsohn
Browse files

highlight searchterm in matches

parent e50e2a66
No related branches found
No related tags found
No related merge requests found
......@@ -79,7 +79,9 @@ class Papersurfer:
self._screen = urwid.raw_display.Screen()
self.size = self._screen.get_cols_rows()
palette = [('I say', 'default,bold', 'default', 'bold')]
palette = [
('I say', 'default,bold', 'default', 'bold'),
('needle', 'default, bold, underline', 'default', 'bold')]
ask = urwid.Edit(('I say', u"Filter?\n"))
exitbutton = urwid.Button(u'Exit')
div = urwid.Divider(u'-')
......@@ -88,9 +90,7 @@ class Papersurfer:
papers = self.mtm.retrieve()
body = []
for paper in papers:
button = urwid.Button(f"{paper.message} ({paper.reporter})")
urwid.connect_signal(button, 'click',
partial(self.handle_paper, paper))
button = self.highlight(paper)
body.append(urwid.AttrMap(button, None, focus_map='reversed'))
self.listcontent = urwid.SimpleFocusListWalker(body)
......@@ -104,12 +104,31 @@ class Papersurfer:
urwid.MainLoop(top, palette).run()
def highlight(self, paper, needle=""):
"""Create highlighted text entry."""
text_items = []
import re
needle = needle or "ßß"
msg = f"{paper.message} ({paper.reporter})"
needles = re.findall(needle, msg, flags=re.IGNORECASE)
hay = re.split(needle, msg, flags=re.IGNORECASE)
for i, item in enumerate(hay):
text_items.append(item)
if i < len(needles):
text_items.append(('needle', needles[i]))
button = urwid.Button(text_items)
urwid.connect_signal(button, 'click',
partial(self.handle_paper, paper))
return button
def onchange(self, _, new_edit_text):
"""Handle filter change."""
papers = [msg.message for msg in self.mtm.get_filtered(new_edit_text)]
papers = self.mtm.get_filtered(new_edit_text)
self.listcontent.clear()
for paper in papers:
button = urwid.Button(paper)
button = self.highlight(paper, new_edit_text)
self.listcontent.append(urwid.AttrMap(button, None,
focus_map='reversed'))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment