from kitty.fast_data_types import Screen from kitty.tab_bar import DrawData, ExtraData, TabBarData, as_rgb, draw_title def draw_tab( draw_data: DrawData, screen: Screen, tab: TabBarData, before: int, max_title_length: int, index: int, is_last: bool, extra_data: ExtraData ) -> int: active_fg = draw_data.default_bg default_bg = as_rgb(int(draw_data.default_bg)) orig_fg = as_rgb(int(active_fg)) if tab.is_active else screen.cursor.fg orig_bg = screen.cursor.bg if tab.is_active else default_bg title_draw_data = draw_data._replace(active_fg=active_fg) if tab.is_active else draw_data screen.cursor.fg = orig_fg screen.cursor.bg = orig_bg left_sep, right_sep = ('', '') def draw_sep(which: str) -> None: screen.cursor.bg = default_bg screen.cursor.fg = orig_bg screen.draw(which) screen.cursor.bg = orig_bg screen.cursor.fg = orig_fg if max_title_length <= 1: screen.draw('…') elif max_title_length == 2: screen.draw('…|') elif max_title_length < 6: draw_sep(left_sep) screen.draw((' ' if max_title_length == 5 else '') + '…' + (' ' if max_title_length >= 4 else '')) draw_sep(right_sep) else: draw_sep(left_sep) screen.draw(' ') draw_title(title_draw_data, screen, tab, index) extra = screen.cursor.x - before - max_title_length # print("extra:%d" %(extra)) if extra >= 0: screen.cursor.x -= extra + 3 screen.draw('…') elif extra == -1: screen.cursor.x -= 2 screen.draw('…') screen.draw(' ') draw_sep(right_sep) draw_sep(' ') screen.cursor.bg = default_bg screen.cursor.fg = orig_fg return screen.cursor.x