diff --git a/git_time_machine.py b/git_time_machine.py index dc8c161..3c3b732 100644 --- a/git_time_machine.py +++ b/git_time_machine.py @@ -16,11 +16,9 @@ def get_file_at_commit(commit_hash, filename): def main(stdscr, filename): curses.curs_set(0) - curses.mousemask(curses.ALL_MOUSE_EVENTS | curses.REPORT_MOUSE_POSITION) + curses.mousemask(curses.ALL_MOUSE_EVENTS) curses.mouseinterval(0) stdscr.keypad(True) - # Default to blocking mode (-1) - stdscr.timeout(-1) commits = get_commits(filename) selected_commit = 0 @@ -80,51 +78,27 @@ def main(stdscr, filename): try: _, mx, my, _, bstate = curses.getmouse() - # Start dragging when mouse is pressed on or near divider + # Handle divider dragging if bstate & curses.BUTTON1_PRESSED: if abs(mx - divider_col) <= 1: # Allow clicking within 1 column of divider dragging_divider = True - # Set short timeout for responsive updates during dragging - stdscr.timeout(1) - - # Update divider position while dragging - if dragging_divider: + + # Update divider position on drag + elif dragging_divider and (bstate & curses.BUTTON1_PRESSED): min_col = 10 max_col = width - 20 # leave space for right pane divider_col = max(min_col, min(mx, max_col)) - # Stop dragging when mouse is released - if bstate & curses.BUTTON1_RELEASED: + # Handle mouse release + elif bstate & curses.BUTTON1_RELEASED: if dragging_divider: dragging_divider = False - # Reset to blocking mode when done dragging - stdscr.timeout(-1) else: # Change focus on mouse click (when not dragging) focus = "left" if mx < divider_col else "right" except curses.error: pass - # When no key is pressed but we're in dragging mode (timeout returns -1) - elif key == -1 and dragging_divider: - try: - # Get current mouse position and update divider - _, mx, my, _, bstate = curses.getmouse() - - # Update divider position based on current mouse position - min_col = 10 - max_col = width - 20 # leave space for right pane - divider_col = max(min_col, min(mx, max_col)) - - # Check for mouse button release - if not (bstate & curses.BUTTON1_PRESSED): - dragging_divider = False - # Reset to blocking mode when done dragging - stdscr.timeout(-1) - except curses.error: - # If we can't get mouse state, continue - pass - # Exit on 'q' or ESC elif key in [ord('q'), 27]: break