Commits

trunk
Switch branches/tags
All users
All time
December 2025
Su Mo Tu We Th Fr Sa
30 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 31 1 2 3
4 5 6 7 8 9 10

Commits on December 29, 2025

  1. Add hoverable close buttons to tab bar
    Clicking the X button on a tab now closes that tab. Close buttons
    highlight red on hover for visual feedback.
    espadonne committed
  2. Fix tab switch layout bug - always recalculate active tab layout
    When switching tabs, the newly active tab's pane layout wasn't being
    recalculated, causing panes to render at y=0 instead of below the tab
    bar. Now layout is recalculated after any tab action.
    espadonne committed
  3. Add tab click-to-switch functionality and font fallbacks
    - Add mouse click detection in tab bar area
    - Calculate clicked tab based on x position and tab width
    - Trigger tab switch via pending_tab_action (goto tab N)
    - Add window_set_tab_bar_info() to update tab bar geometry
    - Account for tab bar offset in text selection coordinates
    - Add try_font_fallbacks() for cross-distro font discovery
    espadonne committed

Commits on December 24, 2025

  1. Refactor render callback to eliminate executable stack warning
    Move do_render from internal procedure to module procedure in new
    render_state_mod. This avoids gfortran trampolines that required
    executable stack for callbacks.
    mfwolffe committed
  2. Fix segfault caused by noexecstack linker flag
    - Remove -Wl,-z,noexecstack flag which crashes gfortran trampolines
    - Add -fno-trampolines compiler flag (best practice)
    - Fix unused argument suppression using c_associated() instead of transfer()
    - gfortran requires executable stack for internal procedure callbacks (do_render)
    mfwolffe committed
  3. Clean up all compiler warnings for release-ready build
    - Remove unused parameter from dispatch_dec_private()
    - Remove unused variable in dispatch_sgr()
    - Add dummy references for unused GLFW callback arguments
    - Mark selection_contains and selection_normalize as pure functions
    - Add -Wl,-z,noexecstack linker flag to fix executable stack warning
    mfwolffe committed
  4. Fix Wayland compositor timeout on inactive workspaces
    - Skip rendering when window loses focus to prevent glfwSwapBuffers
      from blocking on Wayland frame callbacks
    - Add glfwGetWindowAttrib binding and window_is_focused() function
    - Track focus state to ensure initial render and clean unfocus state
    mfwolffe committed
  5. Fix Wayland compositor timeout on inactive workspaces
    - Replace glfwPollEvents with glfwWaitEventsTimeout for proper Wayland
      ping-pong handling when window is on inactive workspace
    - Add desktop entry file for application launchers (wofi, rofi, etc.)
    - Reduces CPU usage when terminal is idle
    mfwolffe committed
  6. mfwolffe committed
  7. mfwolffe committed

Commits on December 21, 2025

  1. Add tabbed terminal windows with split pane support
    Implements two major features for the terminal:
    
    Tabs:
    - Cmd+T to create new tab
    - Cmd+W to close tab (context-aware: closes pane first if multiple)
    - Cmd+[/] to switch between tabs
    - Cmd+1-9 to jump to specific tab
    - Dynamic tab bar that hides when only one tab exists
    - Each tab maintains independent shell state
    
    Split Panes:
    - Cmd+\ to split vertically (side-by-side panes)
    - Cmd+Shift+\ to split horizontally (stacked panes)
    - Cmd+Arrow keys for directional pane navigation
    - Cmd+H/J/K/L for vim-style pane navigation
    - Each pane has its own independent PTY/shell
    - Inactive panes are visually dimmed (60% brightness)
    - Scissor-based viewport clipping for each pane
    - Splits default to 50% of current pane's space
    
    Architecture:
    - New pane_mod module for pane data structure
    - New layout_mod for split calculations and navigation
    - Refactored tab_manager to contain panes array per tab
    - Added glScissor binding for pane viewport clipping
    espadonne committed
  2. Add dynamic font size adjustment with Ctrl/Cmd +/-
    Implement real-time font size changes via keyboard shortcuts:
    - Ctrl/Cmd + = (or +): Increase font size by 2px
    - Ctrl/Cmd + -: Decrease font size by 2px
    - Ctrl/Cmd + 0: Reset to config default
    
    Font size is clamped to 8-72px range. Terminal dimensions
    automatically recalculate and PTY is resized accordingly.
    Fallback font path is saved at startup and reloaded on size
    change to preserve Unicode glyphs (fish chevron, icons, etc).
    espadonne committed
  3. Complete cursor style and blink configuration
    Add TOML parsing for [cursor] section:
    - style: "block", "underline", or "bar"/"beam"
    - blink: true/false
    
    Apply config values to terminal cursor on startup.
    espadonne committed
  4. Add cursor style and blink configuration fields
    Add cursor_style (block/underline/bar) and cursor_blink fields to
    config_t with sensible defaults. TOML parsing not yet implemented.
    espadonne committed
  5. Fix text and cursor alignment using font ascender
    Use ascender (not cell_height) for baseline positioning. Text baseline
    is now at y + ascender, leaving room below for descenders. Cursor
    rendering updated to align properly with text glyphs.
    espadonne committed
  6. Normalize fallback font baseline to fix glyph drift
    Store fallback font's ascender and adjust bearing_y when rendering
    glyphs from fallback font. This compensates for different font metrics
    between primary and fallback fonts, keeping all glyphs on the same
    baseline.
    espadonne committed
  7. Implement deferred wrap to fix ZSH prompt marker issue
    Add pending_wrap flag for deferred line wrapping - cursor stays at EOL
    until next character is written, then wraps. This matches xterm behavior
    and fixes the ZSH PROMPT_EOL_MARK (%) appearing incorrectly.
    
    Also update DA1/DA2 responses to identify as VT220 with ANSI color support.
    espadonne committed
  8. Fix TOML parser treating hex colors as comments
    The parser was removing quotes before handling inline comments,
    causing "#FFFFFF" to become "#FFFFFF" which was then truncated
    at the "#" as if it were a comment. Now calls remove_inline_comment
    first, which correctly preserves "#" inside quoted strings.
    espadonne committed
  9. Add window opacity and blur configuration options
    Window appearance can now be configured via TOML:
    - [window] opacity = 0.95  (0.0-1.0, default 1.0)
    - [window] blur = true     (macOS only, currently stubbed)
    
    Implementation:
    - Add toml_get_real() for float parsing in TOML
    - Add window_opacity and window_blur to config_t
    - Enable GLFW_TRANSPARENT_FRAMEBUFFER when opacity < 1.0
    - Use opacity value in glClearColor alpha channel
    - Add window_set_blur() function (stub - needs Cocoa integration)
    
    Note: macOS blur requires Cocoa framework which has CMake integration
    issues with Fortran compilers. The blur function is stubbed for now.
    espadonne committed
  10. Fix selection highlighting for spaces and improve fallback fonts
    - Draw selection background for all cells including spaces, not just
      text characters, so selections appear continuous
    - Add macOS font paths for fallback fonts (Apple Symbols, Library/Fonts)
    - Prioritize finding fonts with common Unicode symbols (❯ chevron)
      before icon-only fonts
    espadonne committed
  11. Fix cell width calculation using wrong FreeType metric
    Use face->size->metrics.max_advance (scaled 26.6 pixels) instead of
    face->max_advance_width (unscaled font units). This was causing
    double-width characters and cursor on macOS.
    espadonne committed

Commits on December 20, 2025

  1. mfwolffe committed
  2. mfwolffe committed
  3. mfwolffe committed
  4. mfwolffe committed
  5. mfwolffe committed
  6. mfwolffe committed
  7. mfwolffe committed
  8. Integrate configuration system in main program
    Load configuration at startup from ~/.config/fortty/fortty.toml:
    - Apply color palette and default colors to cell module
    - Use window dimensions from config
    - Pass font path and size to renderer
    - Use font metrics for cell dimensions instead of hardcoded values
    
    Add config modules to CMakeLists.txt build.
    Includes response handling in main loop for DA1/DSR replies.
    mfwolffe committed