def __init__(self, revert_order, remove_bash_prefix, remove_zsh_prefix, regexp, case_sensitive,
remove_duplicates, show_hits, infile):
self.show_hits = show_hits
self.regexp_modifier = regexp
self.case_modifier = case_sensitive
self.remove_bash_prefix = remove_bash_prefix
self.list_items = []
if revert_order:
lines = reversed(infile.readlines())
else:
lines = infile
for line in lines:
if remove_bash_prefix:
line = line.split(None, 1)[1].strip()
if remove_zsh_prefix:
line = re.split('\s+', line, maxsplit=4)[-1]
if 'selecta <(history)' not in line:
if not remove_duplicates or line not in self.list_items:
self.list_items.append(line)
self.list_item_widgets = []
self.line_count_display = LineCountWidget('')
self.search_edit = SearchEdit(edit_text='')
self.modifier_display = urwid.Text('')
urwid.connect_signal(self.search_edit, 'done', self.edit_done)
urwid.connect_signal(self.search_edit, 'toggle_case_modifier', self.toggle_case_modifier)
urwid.connect_signal(self.search_edit, 'toggle_regexp_modifier', self.toggle_regexp_modifier)
urwid.connect_signal(self.search_edit, 'change', self.edit_change)
header = urwid.AttrMap(urwid.Columns([
urwid.AttrMap(self.search_edit, 'input', 'input'),
self.modifier_display,
('pack', self.line_count_display),
], dividechars=1, focus_column=0), 'head', 'head')
self.item_list = urwid.SimpleListWalker(self.list_item_widgets)
self.listbox = ResultList(self.item_list)
urwid.connect_signal(self.listbox, 'resize', self.list_resize)
self.view = urwid.Frame(body=self.listbox, header=header)
self.loop = urwid.MainLoop(self.view, palette, unhandled_input=self.on_unhandled_input)
self.loop.screen.set_terminal_properties(colors=256)
self.line_count_display.update(self.listbox.last_size, len(self.item_list))
# TODO workaround, when update_list is called directly, the linecount widget gets not updated
self.loop.set_alarm_in(0.01, lambda *loop: self.update_list(''))
self.loop.run()
评论列表
文章目录