def test_unique_prefix_of__normal_shared_prefix(): assert unique_prefix_of("foobar", "foobaz") == "foobar" assert unique_prefix_of("fnord", "funky") == "fn" assert unique_prefix_of("asbestos", "aspergers") == "asb"
def test_unique_prefix_of__b_prefix(): assert unique_prefix_of("foobar", "foo") == "foob"
def test_unique_prefix_of__no_shared_prefix(): assert unique_prefix_of("a", "b") == "a" assert unique_prefix_of("foo", "bar") == "f" assert unique_prefix_of("foo", "") == "f"
def test_unique_prefix_of__equal(): assert unique_prefix_of("foo", "foo") == "foo"
def refresh(self) -> None: log.debug('Refresh: %s', self.__class__.__name__) self._win.erase() theme = get_theme() self.addstr(0, 0, "[", to_curses_attr(theme.COLOR_INFORMATION_BAR)) show_names = config.get('show_tab_names') show_nums = config.get('show_tab_numbers') use_nicks = config.get('use_tab_nicks') show_inactive = config.get('show_inactive_tabs') unique_prefix_tab_names = config.get('unique_prefix_tab_names') if unique_prefix_tab_names: unique_prefixes = [None] * len(self.core.tabs) sorted_tab_indices = sorted( (str(tab.name), i) for i, tab in enumerate(self.core.tabs) ) prev_name = "" for (name, i), next_item in itertools.zip_longest( sorted_tab_indices, sorted_tab_indices[1:]): # TODO: should this maybe use something smarter than .lower()? # something something stringprep? name = name.lower() prefix_prev = unique_prefix_of(name, prev_name) if next_item is not None: prefix_next = unique_prefix_of(name, next_item[0].lower()) else: prefix_next = name[0] # to be unique, we have to use the longest prefix if len(prefix_next) > len(prefix_prev): prefix = prefix_next else: prefix = prefix_prev unique_prefixes[i] = prefix prev_name = name for nb, tab in enumerate(self.core.tabs): if not tab: continue color = tab.color if not show_inactive and color is theme.COLOR_TAB_NORMAL: continue try: if show_nums or not show_names: self.addstr("%s" % str(nb), to_curses_attr(color)) if show_names: self.addstr(' ', to_curses_attr(color)) if show_names: if unique_prefix_tab_names: self.addstr(unique_prefixes[nb], to_curses_attr(color)) elif use_nicks: self.addstr("%s" % str(tab.get_nick()), to_curses_attr(color)) else: self.addstr("%s" % tab.name, to_curses_attr(color)) self.addstr("|", to_curses_attr(theme.COLOR_INFORMATION_BAR)) except: # end of line break (y, x) = self._win.getyx() self.addstr(y, x - 1, '] ', to_curses_attr(theme.COLOR_INFORMATION_BAR)) (y, x) = self._win.getyx() remaining_size = self.width - x self.addnstr(' ' * remaining_size, remaining_size, to_curses_attr(theme.COLOR_INFORMATION_BAR)) self._refresh()