feat: improve divider dragging with real-time mouse tracking

This commit is contained in:
n loewen (aider) 2025-05-05 08:56:39 +01:00
parent f58ae2783f
commit 494d25bf1b
1 changed files with 14 additions and 7 deletions

View File

@ -51,7 +51,11 @@ def main(stdscr, filename):
# Vertical divider
divider_char = "" if dragging_divider else ""
for y in range(height):
stdscr.addch(y, divider_col, divider_char)
try:
stdscr.addch(y, divider_col, divider_char)
except curses.error:
# Avoid errors when drawing at the last column
pass
# Draw file content (right pane)
for i, line in enumerate(visible_lines):
@ -79,10 +83,10 @@ def main(stdscr, filename):
_, mx, my, _, bstate = curses.getmouse()
if bstate & curses.BUTTON1_PRESSED:
if mx == divider_col:
if mx == divider_col or (mx >= divider_col-1 and mx <= divider_col+1):
dragging_divider = True
# Update divider position while dragging
# Always update divider position if dragging, regardless of button state
if dragging_divider:
min_col = 10
max_col = width - 20 # leave space for right pane
@ -95,12 +99,14 @@ def main(stdscr, filename):
except curses.error:
pass
# Continue updating divider position even without explicit mouse events
elif dragging_divider:
# Force a mouse position check every loop iteration while dragging
if dragging_divider:
# Set a very short timeout to make the UI responsive
stdscr.timeout(1)
try:
_, mx, my, _, bstate = curses.getmouse()
# Update divider position
# Always update divider position while dragging
min_col = 10
max_col = width - 20 # leave space for right pane
divider_col = max(min_col, min(mx, max_col))
@ -108,8 +114,9 @@ def main(stdscr, filename):
# Check for mouse button release
if bstate & curses.BUTTON1_RELEASED or not (bstate & curses.BUTTON1_PRESSED):
dragging_divider = False
stdscr.timeout(-1) # Reset to blocking mode when done dragging
except curses.error:
# If we can't get mouse state, keep the divider where it is
# If we can't get mouse state, try again on next iteration
pass
#