1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
"""Bottom status bar shared by all pages."""
from __future__ import annotations
from pyratatui import Constraint, Direction, Frame, Layout, Paragraph, Rect, Style
_DEFAULT_HINT = "q quit"
def split_content_status(area: Rect) -> tuple[Rect, Rect]:
"""Split the frame into content above a one-row status bar."""
chunks = Layout().direction(Direction.Vertical).constraints([Constraint.fill(1), Constraint.length(1)]).split(area)
return chunks[0], chunks[1]
def render_status_bar(
frame: Frame,
area: Rect,
text: str,
style: Style,
hint: str = _DEFAULT_HINT,
) -> None:
"""Draw the status bar into ``area``."""
if area.width <= 0 or area.height <= 0:
return
line = _format_line(text, hint, area.width)
frame.render_widget(Paragraph.from_string(line).style(style), area)
def _format_line(left: str, right: str, width: int) -> str:
if not right:
return left[:width].ljust(width)
if len(right) >= width:
return right[:width].ljust(width)
space = width - len(right)
if space <= 1:
return right[:width].ljust(width)
clipped_left = left[: space - 1]
return f"{clipped_left:<{space - 1}} {right}"[:width].ljust(width)