From 02f5ce345bcfe2aabe7b8e47cc568a868b5a48a8 Mon Sep 17 00:00:00 2001 From: Dita Aji Pratama Date: Tue, 26 May 2026 14:45:55 +0700 Subject: [PATCH] feat(tui): gray ^D:send when processing, black-on-bright-green READY, fix chat truncation + right margin --- tui/render.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/tui/render.py b/tui/render.py index 1f93836..98f5505 100644 --- a/tui/render.py +++ b/tui/render.py @@ -19,6 +19,7 @@ C_SEP = 7 # separator line: magenta C_ERROR = 8 # error message: merah C_INPUT_BORDER = 9 # border input box: biru C_STATUS_INFO = 12 # status info (workspace/hints): putih +C_HINT_DISABLED = 13 # hint disabled (abu-abu) def init_colors(): @@ -30,12 +31,13 @@ def init_colors(): curses.init_pair(C_SYSTEM, curses.COLOR_YELLOW, -1) curses.init_pair(C_INPUT, curses.COLOR_WHITE, -1) curses.init_pair(C_STATUS, curses.COLOR_BLACK, curses.COLOR_YELLOW) - curses.init_pair(C_STATUS_READY, curses.COLOR_WHITE, curses.COLOR_GREEN) + curses.init_pair(C_STATUS_READY, curses.COLOR_BLACK, curses.COLOR_GREEN + 8) curses.init_pair(C_STATUS_PROC, curses.COLOR_BLACK, curses.COLOR_YELLOW) curses.init_pair(C_STATUS_INFO, curses.COLOR_WHITE, -1) curses.init_pair(C_SEP, curses.COLOR_MAGENTA, -1) curses.init_pair(C_ERROR, curses.COLOR_RED, -1) curses.init_pair(C_INPUT_BORDER, curses.COLOR_BLUE, -1) + curses.init_pair(C_HINT_DISABLED, 8, -1) # abu-abu di atas bg default def draw(app, stdscr): @@ -75,7 +77,7 @@ def draw_chat(app, stdscr): rendered = [] def _wrap_render(text, indent=0, color=C_INPUT): - available = w - indent + available = w - indent - 1 # sisakan 1 kolom margin kanan if available <= 0: rendered.append((color, " " * indent)) return @@ -147,8 +149,8 @@ def draw_chat(app, stdscr): for i in range(app.scroll, min(app.scroll + chat_h, total)): color, text = rendered[i] attr = curses.color_pair(color) | curses.A_BOLD if color else curses.A_NORMAL - if len(text) >= w: - text = text[: w - 1] + if len(text) > w: + text = text[:w] try: stdscr.addstr(y, 0, text, attr) except curses.error: @@ -273,3 +275,9 @@ def draw_status(app, stdscr): mode_end = mode_start + len(mode) mode_attr = curses.color_pair(C_STATUS_READY) if not app.processing else curses.color_pair(C_STATUS_PROC) stdscr.addstr(y, mode_start, mode, mode_attr | curses.A_BOLD) + + # ^D:send — abu-abu saat processing, bold putih saat idle + if app.processing: + stdscr.addstr(y, mode_end + 2, "^D:send", curses.color_pair(C_HINT_DISABLED)) + else: + stdscr.addstr(y, mode_end + 2, "^D:send", curses.color_pair(C_STATUS_INFO) | curses.A_BOLD)