diff --git a/papersurfer.py b/papersurfer.py index 434bd90bc1027d53ac40a68885b8ed96cda25abe..77a62289bc64f1cefa24a65076a83a62bc658bc6 100644 --- a/papersurfer.py +++ b/papersurfer.py @@ -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'))