feat: Add full-width status bar with centered commit message
This commit is contained in:
parent
68e65cd851
commit
90535bf156
33
gtm2.py
33
gtm2.py
|
|
@ -328,6 +328,14 @@ def draw_selection(stdscr, state):
|
||||||
def draw_status_bars(stdscr, state):
|
def draw_status_bars(stdscr, state):
|
||||||
visible_height = state.height - 1
|
visible_height = state.height - 1
|
||||||
|
|
||||||
|
# Get commit message for the selected commit
|
||||||
|
commit_message = ""
|
||||||
|
if state.commits and state.selected_commit_idx < len(state.commits):
|
||||||
|
commit_parts = state.commits[state.selected_commit_idx].split(' ', 2)
|
||||||
|
if len(commit_parts) >= 3:
|
||||||
|
commit_message = commit_parts[2]
|
||||||
|
|
||||||
|
# Status bar percentages
|
||||||
if len(state.file_lines) > 0:
|
if len(state.file_lines) > 0:
|
||||||
last_visible_line = state.right_scroll_offset + visible_height
|
last_visible_line = state.right_scroll_offset + visible_height
|
||||||
right_percent = int((last_visible_line / len(state.file_lines)) * 100)
|
right_percent = int((last_visible_line / len(state.file_lines)) * 100)
|
||||||
|
|
@ -351,19 +359,27 @@ def draw_status_bars(stdscr, state):
|
||||||
mouse_status += " SEL"
|
mouse_status += " SEL"
|
||||||
left_status += mouse_status
|
left_status += mouse_status
|
||||||
|
|
||||||
left_attr = curses.color_pair(1) if state.focus == "left" else curses.color_pair(2)
|
# Draw full-width status bar with commit message
|
||||||
right_attr = curses.color_pair(1) if state.focus == "right" else curses.color_pair(2)
|
status_attr = curses.color_pair(5) # New color pair for status bar
|
||||||
|
for x in range(state.width):
|
||||||
|
stdscr.addch(state.height - 1, x, ' ', status_attr)
|
||||||
|
|
||||||
for x in range(state.divider_col):
|
# Add commit message centered in status bar
|
||||||
stdscr.addch(state.height - 1, x, ' ', left_attr)
|
if commit_message:
|
||||||
for x in range(state.divider_col + 1, state.width - 1):
|
max_msg_width = state.width - 20 # Leave space for percentages
|
||||||
stdscr.addch(state.height - 1, x, ' ', right_attr)
|
if len(commit_message) > max_msg_width:
|
||||||
|
commit_message = commit_message[:max_msg_width-3] + "..."
|
||||||
|
|
||||||
|
msg_x = (state.width - len(commit_message)) // 2
|
||||||
|
stdscr.addstr(state.height - 1, msg_x, commit_message, status_attr)
|
||||||
|
|
||||||
|
# Add percentage indicators on left and right sides
|
||||||
|
left_attr = status_attr | (curses.A_REVERSE if state.focus == "left" else 0)
|
||||||
|
right_attr = status_attr | (curses.A_REVERSE if state.focus == "right" else 0)
|
||||||
|
|
||||||
stdscr.addstr(state.height - 1, 1, left_status, left_attr)
|
stdscr.addstr(state.height - 1, 1, left_status, left_attr)
|
||||||
stdscr.addstr(state.height - 1, state.width - len(right_status) - 1, right_status, right_attr)
|
stdscr.addstr(state.height - 1, state.width - len(right_status) - 1, right_status, right_attr)
|
||||||
|
|
||||||
stdscr.addch(state.height - 1, state.divider_col, "│")
|
|
||||||
|
|
||||||
def draw_ui(stdscr, state):
|
def draw_ui(stdscr, state):
|
||||||
stdscr.erase()
|
stdscr.erase()
|
||||||
draw_left_pane(stdscr, state)
|
draw_left_pane(stdscr, state)
|
||||||
|
|
@ -556,6 +572,7 @@ def main(stdscr, filename, show_diff, show_add, show_del, mouse):
|
||||||
curses.init_pair(2, curses.COLOR_WHITE, 0) # Use black (0) instead of 8
|
curses.init_pair(2, curses.COLOR_WHITE, 0) # Use black (0) instead of 8
|
||||||
curses.init_pair(3, curses.COLOR_GREEN, -1)
|
curses.init_pair(3, curses.COLOR_GREEN, -1)
|
||||||
curses.init_pair(4, curses.COLOR_RED, -1)
|
curses.init_pair(4, curses.COLOR_RED, -1)
|
||||||
|
curses.init_pair(5, curses.COLOR_BLACK, 6) # Status bar color (cyan background)
|
||||||
|
|
||||||
height, width = stdscr.getmaxyx()
|
height, width = stdscr.getmaxyx()
|
||||||
state = AppState(filename, width, height, show_diff, show_add, show_del, mouse)
|
state = AppState(filename, width, height, show_diff, show_add, show_del, mouse)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue