74 lines
2.0 KiB
Python
74 lines
2.0 KiB
Python
# pyright: reportMissingImports=false
|
||
|
||
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_tab_length: int,
|
||
index: int,
|
||
is_last: bool,
|
||
extra_data: ExtraData,
|
||
) -> int:
|
||
tab_bg = screen.cursor.bg
|
||
tab_fg = screen.cursor.fg
|
||
default_bg = as_rgb(int(draw_data.default_bg))
|
||
if extra_data.next_tab:
|
||
next_tab_bg = as_rgb(draw_data.tab_bg(extra_data.next_tab))
|
||
needs_soft_separator = next_tab_bg == tab_bg
|
||
else:
|
||
next_tab_bg = default_bg
|
||
needs_soft_separator = False
|
||
|
||
separator_symbol, soft_separator_symbol = ("", "╱")
|
||
min_title_length = 1 + 2
|
||
start_draw = 2
|
||
|
||
if screen.cursor.x == 0:
|
||
screen.draw(" ")
|
||
start_draw = 1
|
||
if is_last:
|
||
start_draw = 1
|
||
|
||
if min_title_length >= max_tab_length:
|
||
screen.draw("…")
|
||
else:
|
||
draw_title(draw_data, screen, tab, index, max_tab_length)
|
||
extra = screen.cursor.x + start_draw - before - max_tab_length
|
||
if extra > 0 and extra + 1 < screen.cursor.x:
|
||
screen.cursor.x -= extra + 1
|
||
screen.draw("…")
|
||
|
||
if not needs_soft_separator:
|
||
screen.draw(" ")
|
||
screen.cursor.fg = tab_bg
|
||
screen.cursor.bg = next_tab_bg
|
||
if not is_last:
|
||
screen.draw(separator_symbol)
|
||
else:
|
||
prev_fg = screen.cursor.fg
|
||
if tab_bg == tab_fg:
|
||
screen.cursor.fg = default_bg
|
||
elif tab_bg != default_bg:
|
||
c1 = draw_data.inactive_bg.contrast(draw_data.default_bg)
|
||
c2 = draw_data.inactive_bg.contrast(draw_data.inactive_fg)
|
||
if c1 < c2:
|
||
screen.cursor.fg = default_bg
|
||
screen.draw(f" {soft_separator_symbol}")
|
||
screen.cursor.fg = prev_fg
|
||
|
||
end = screen.cursor.x
|
||
if end < screen.columns:
|
||
screen.draw(" ")
|
||
return end
|