Commits

trunk
Switch branches/tags
mfwolffe
Until Apr 13, 2026
April 2026
Su Mo Tu We Th Fr Sa
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 1 2
3 4 5 6 7 8 9

Commits on February 14, 2026

  1. mfwolffe committed
  2. mfwolffe committed

Commits on January 31, 2026

  1. mfwolffe committed
  2. mfwolffe committed
  3. mfwolffe committed

Commits on December 21, 2025

  1. mfwolffe committed
  2. feat: implement workspace state persistence
    - Add serializable state structs (WorkspaceState, TabState, PaneState, etc.)
    - Implement Workspace::save() to persist open tabs, cursor positions,
      viewport scroll, and pane bounds to .fackr/workspace.json
    - Implement Workspace::load() to restore workspace state on startup,
      handling missing files gracefully
    - Add Cursors::from_cursor() constructor for state restoration
    - Call workspace.save() on editor exit
    - Replace empty default tab when opening explicit file to avoid
      spurious [new] tab appearing as tab 1
    mfwolffe committed

Commits on December 20, 2025

  1. feat: implement focus-based input routing system
    Add active window focus system where keyboard input is routed to the
    last-activated component instead of using fixed priority.
    
    Changes:
    - Add Focus enum (Editor, Terminal, FussMode, ServerManager, Prompt)
    - Add HitRegion enum for mouse hit testing
    - Add focus field to Editor struct
    - Implement hit_test() to determine clicked region
    - Implement return_focus() helper for closing components
    - Add click-to-focus in mouse handler
    - Update toggle handlers to set focus when opening/closing
    - Refactor keyboard routing from priority-based to focus-based
    
    Behavior:
    - Clicking any component gives it keyboard focus
    - Keyboard shortcuts that open components also focus them
    - Clicking in split panes makes that pane active
    - ESC closes focused component and returns focus sensibly
    mfwolffe committed
  2. fix: prevent terminal bleed-through in fuss mode status bar
    Fill the status bar row in fuss mode column with background color
    to prevent terminal content from showing through.
    mfwolffe committed
  3. feat: add pane hit testing for click-to-focus support
    Add methods to determine which pane contains a screen coordinate:
    - Tab::pane_at_screen_position() - finds pane by normalized coordinates
    - Workspace::pane_at_position() - wrapper for active tab
    mfwolffe committed
  4. fix: fuss mode respects terminal height
    When both fuss mode and terminal are visible, fuss mode now only renders
    above the terminal instead of using full screen height. This prevents
    visual artifacts where fuss mode content would render into the terminal
    area.
    
    - Add max_rows parameter to render_fuss
    - Calculate available height based on terminal start row
    mfwolffe committed
  5. fix: fuss mode and terminal coexist properly
    - F3/Ctrl+B now toggles fuss mode even when terminal is focused
    - Terminal shrinks to fit alongside fuss mode instead of overlapping
    - Pass left_offset to render_terminal for proper positioning
    mfwolffe committed
  6. fix: allow F3/Ctrl+B to toggle fuss mode over terminal
    Fuss mode (file tree) should be accessible even when terminal is active.
    Add pass-through for F3 and Ctrl+B keybindings so they toggle fuss mode
    instead of being sent to the terminal.
    mfwolffe committed
  7. feat: add terminal tab keybindings
    Add keybindings for terminal tab management (when terminal focused):
    - Alt+T: Create new terminal tab
    - Alt+Q: Close current tab (hides terminal if last)
    - Alt+.: Next tab
    - Alt+,: Previous tab
    - Alt+1-9: Switch to specific tab
    mfwolffe committed
  8. feat: render terminal tabs in title bar
    Update terminal title bar to show tabs when multiple sessions exist:
    - Single session: show CWD or "Terminal" centered with separators
    - Multiple sessions: tab bar with numbers and directory names
    - Active tab highlighted with bold white on darker background
    - Add extract_dirname() helper for path display
    mfwolffe committed
  9. feat: parse OSC 7 for terminal working directory
    Add CWD tracking to TerminalScreen:
    - Add cwd field to store current working directory
    - Implement osc_dispatch to parse OSC 7 sequences
    - Extract path from file://hostname/path format
    - Fish shell emits OSC 7 automatically on directory change
    mfwolffe committed
  10. feat: add multi-session support to terminal panel
    Refactor TerminalPanel to support multiple terminal sessions:
    - Add TerminalSession struct holding PTY + screen buffer per session
    - Change from single PTY to Vec<TerminalSession> with active index
    - Add session management methods: new_session(), close_active_session(),
      switch_session(), next_session(), prev_session()
    - Poll all sessions to keep background shells responsive
    - Auto-remove dead sessions and hide terminal when last closes
    mfwolffe committed
  11. mfwolffe committed
  12. perf: batch terminal rendering to reduce flashing
    Instead of sending color/attribute escape sequences for every cell,
    track current state and only send changes. Batch consecutive characters
    with same attributes into single print operations. This dramatically
    reduces the number of escape sequences sent per render.
    mfwolffe committed
  13. fix: hide cursor during terminal render to reduce flashing
    Match the pattern of other render functions by hiding cursor at start
    of render_terminal() before showing it at the positioned location.
    mfwolffe committed
  14. fix: auto-close terminal when shell exits
    Detect when the shell process exits (via EOF or error on PTY read)
    and automatically hide the terminal panel. Typing 'exit' now cleanly
    closes the integrated terminal instead of leaving it in a broken state.
    mfwolffe committed
  15. fix: terminal content height excludes title bar
    The PTY and screen buffer now use height-1 to account for the
    title bar row, so multi-line prompts (like fish) display fully.
    mfwolffe committed
  16. feat: complete VTE terminal emulation
    - Fix flashing: poll() now returns bool, only render when data received
    - Add DEC private modes: ?1/?7/?25/?1049/?2004 (cursor keys, autowrap,
      cursor visibility, alternate screen, bracketed paste)
    - Implement alternate screen buffer for vim/less compatibility
    - Add missing CSI commands: E/F/G/L/M/P/S/T/X/@/d/n/r/s/u
    - Complete J=1 and K=1 (clear from start to cursor)
    - Add scroll region support (DECSTBM)
    - Handle escape sequences: ESC 7/8/M/D/E/c (cursor save/restore,
      index, reverse index, next line, reset)
    - Add device status report responses (CSI 5n, CSI 6n)
    
    This should fix fish shell's two-line prompt and vim rendering.
    mfwolffe committed
  17. feat: add Ctrl+j as alternate terminal toggle
    Ctrl+` can conflict with tmux prefix mappings, so Ctrl+j
    provides a reliable alternative for toggling the terminal.
    mfwolffe committed
  18. feat: add integrated terminal (Phase 1)
    Implement basic integrated terminal with:
    - Ctrl+` to toggle terminal visibility
    - ESC to hide terminal when focused
    - PTY spawning using $SHELL environment variable
    - VTE-based escape sequence parsing (colors, cursor, SGR)
    - Terminal renders at bottom of screen (30% default height)
    - Shell process persists when terminal is hidden
    - Full input routing (control chars, arrows, function keys)
    
    New modules:
    - terminal/pty.rs: PTY spawning and I/O with reader thread
    - terminal/screen.rs: Terminal buffer with VTE Perform impl
    - terminal/panel.rs: Terminal panel visibility and lifecycle
    mfwolffe committed
  19. mfwolffe committed
  20. mfwolffe committed
  21. mfwolffe committed