Update TUI colors: black-on-blue header, blue border, yellow status bar

This commit is contained in:
Dita Aji Pratama 2026-05-12 10:33:52 +07:00
parent 33c9b48106
commit 293bd5d550

View File

@ -13,6 +13,7 @@ class HendrikTUI:
C_STATUS = 6
C_SEP = 7
C_ERROR = 8
C_INPUT_BORDER = 9
def __init__(self, llm_client, tools_definition, TOOLS, TOOL_HANDLERS,
build_system_prompt, agent_max_iterations):
@ -70,14 +71,15 @@ class HendrikTUI:
# ---- colors -----------------------------------------------------------
def _init_colors(self):
curses.init_pair(self.C_HEADER, curses.COLOR_WHITE, curses.COLOR_BLUE)
curses.init_pair(self.C_HEADER, curses.COLOR_BLACK, curses.COLOR_BLUE)
curses.init_pair(self.C_USER, curses.COLOR_CYAN, -1)
curses.init_pair(self.C_AI, curses.COLOR_GREEN, -1)
curses.init_pair(self.C_SYSTEM, curses.COLOR_YELLOW, -1)
curses.init_pair(self.C_INPUT, curses.COLOR_WHITE, -1)
curses.init_pair(self.C_STATUS, curses.COLOR_BLACK, curses.COLOR_WHITE)
curses.init_pair(self.C_STATUS, curses.COLOR_BLACK, curses.COLOR_YELLOW)
curses.init_pair(self.C_SEP, curses.COLOR_MAGENTA, -1)
curses.init_pair(self.C_ERROR, curses.COLOR_RED, -1)
curses.init_pair(self.C_INPUT_BORDER, curses.COLOR_BLUE, -1)
# ---- main draw --------------------------------------------------------
@ -153,13 +155,14 @@ class HendrikTUI:
def _draw_input(self, stdscr):
iy = self.h - 8
border_attr = curses.color_pair(self.C_INPUT_BORDER) | curses.A_BOLD
for off, text in [
(0, "\u250c" + "\u2500" * (self.w - 2) + "\u2510"),
(7, "\u2514" + "\u2500" * (self.w - 2) + "\u2518"),
]:
try:
stdscr.addstr(iy + off, 0, text[:self.w])
stdscr.addstr(iy + off, 0, text[:self.w], border_attr)
except curses.error:
pass
@ -170,6 +173,7 @@ class HendrikTUI:
show = max(0, min(self.input_line - 3, total - 6))
cursor_yx = None
text_attr = curses.color_pair(self.C_INPUT)
for i in range(6):
idx = show + i
y = iy + 1 + i
@ -177,14 +181,29 @@ class HendrikTUI:
max_text = self.w - 6
if len(line) > max_text:
line = line[:max_text]
if idx < total:
fmt = "\u2502 > " + line + " " * (max_text + 1 - len(line)) + "\u2502"
else:
fmt = "\u2502 " + " " * (self.w - 5) + "\u2502"
try:
stdscr.addstr(y, 0, fmt, curses.color_pair(self.C_INPUT))
stdscr.addstr(y, 0, "\u2502 ", border_attr)
except curses.error:
pass
if idx < total:
content = "> " + line + " " * (self.w - 4 - 2 - len(line))
try:
stdscr.addstr(y, 2, content, text_attr)
except curses.error:
pass
else:
try:
stdscr.addstr(y, 2, " " * (self.w - 4), border_attr)
except curses.error:
pass
try:
stdscr.addstr(y, self.w - 2, " \u2502", border_attr)
except curses.error:
pass
if idx == self.input_line and not self.processing:
cursor_yx = (y, 4 + min(self.input_col, max_text))
@ -202,7 +221,7 @@ class HendrikTUI:
if len(ws) > max_ws:
ws = ".." + ws[-(max_ws - 2):]
status = f" {ws} \u2502{mode}\u2502{hints}"
attr = curses.color_pair(self.C_STATUS)
attr = curses.color_pair(self.C_STATUS) | curses.A_BOLD
stdscr.addstr(y, 0, status[:self.w], attr)
# ---- input handling ---------------------------------------------------