diff kitten: Show the number of matches in the status bar when doing a search

This commit is contained in:
Kovid Goyal 2018-06-15 14:57:03 +05:30
parent cd6a46730a
commit 1022d8a0ee
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 12 additions and 6 deletions

View File

@ -304,11 +304,14 @@ def draw_status_line(self):
self.write(self.message)
else:
scroll_frac = styled('{:.0%}'.format(self.scroll_pos / (self.max_scroll_pos or 1)), fg=self.opts.margin_fg)
counts = '{}{}{}'.format(
styled(str(self.added_count), fg=self.opts.highlight_added_bg),
styled(',', fg=self.opts.margin_fg),
styled(str(self.removed_count), fg=self.opts.highlight_removed_bg)
)
if self.current_search is None:
counts = '{}{}{}'.format(
styled(str(self.added_count), fg=self.opts.highlight_added_bg),
styled(',', fg=self.opts.margin_fg),
styled(str(self.removed_count), fg=self.opts.highlight_removed_bg)
)
else:
counts = '[{} matches]'.format(len(self.current_search))
suffix = counts + ' ' + scroll_frac
prefix = styled(':', fg=self.opts.margin_fg)
filler = self.screen_size.cols - wcswidth(prefix) - wcswidth(suffix)

View File

@ -17,6 +17,7 @@ class Search:
def __init__(self, opts, query, is_regex, is_backward):
self.matches = {}
self.count = 0
self.style = styled('|', fg=opts.search_fg, bg=opts.search_bg).split('|', 1)[0]
if not is_regex:
query = re.escape(query)
@ -27,6 +28,7 @@ def __init__(self, opts, query, is_regex, is_backward):
def __call__(self, diff_lines, margin_size, cols):
self.matches = {}
self.count = 0
half_width = cols // 2
strip_pat = re.compile('\033[[].*?m')
right_offset = half_width + 1 + margin_size
@ -40,6 +42,7 @@ def add(which, offset):
for m in find(which):
before = which[:m.start()]
matches.append((wcswidth(before) + offset, m.group()))
self.count += 1
add(left, margin_size)
add(right, right_offset)
@ -51,7 +54,7 @@ def __contains__(self, i):
return i in self.matches
def __len__(self):
return len(self.matches)
return self.count
def highlight_line(self, write, line_num):
highlights = self.matches.get(line_num)