Commits

trunk
Switch branches/tags
All users
Until Dec 21, 2025
November 2025
Su Mo Tu We Th Fr Sa
26 27 28 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

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
  9. Add configuration module
    Define config_t type with settings for:
    - Window: width, height
    - Font: path, fallback, size
    - Colors: foreground, background, cursor, 16-color palette
    - Terminal: scrollback lines
    - Shell: program path
    
    Implements config_load with XDG Base Directory support,
    hex color parsing (#RRGGBB), and sensible defaults.
    mfwolffe committed
  10. Add TOML configuration parser
    Simple TOML parser for fortty configuration files:
    - Section parsing: [section]
    - Key-value pairs: key = value
    - String values with quote handling
    - Integer and logical value parsing
    - Comment and inline comment support
    
    Provides toml_open, toml_get_string, toml_get_integer,
    toml_get_logical for reading configuration values.
    mfwolffe committed
  11. Add configurable color palette to cell module
    Add custom 16-color palette support:
    - set_palette_color: override individual palette entries
    - set_default_colors: set default foreground/background
    - init_default_palette: initialize with VGA-style defaults
    
    Modify color_from_index to use custom palette for indices 0-15,
    allowing configuration-driven terminal theming.
    mfwolffe committed
  12. Add DA1/DSR terminal response handling
    Add response queue to terminal for escape sequence replies:
    - terminal_queue_response: buffer response to send to PTY
    - terminal_has_response: check for pending response
    - terminal_get_response: retrieve and clear pending response
    
    Implement DA1 (Primary Device Attributes) responding as VT102,
    and DSR (Device Status Report) for status and cursor position.
    Fixes fish shell warning about unanswered DA1 query.
    mfwolffe committed
  13. Integrate font fallback and scrollback in main program
    Updates the main program to use the new font fallback system and
    scrollback buffer rendering.
    
    Font handling:
    - Use fontconfig to find system monospace font
    - Search for Nerd Font icons (U+E5FF, U+E0A0) then Font Awesome (U+F07B)
    - Fall back to hardcoded paths if fontconfig unavailable
    - Add TARGET attribute to renderer for proper pointer handling
    - Fix dangling font pointer by reassigning atlas%font after creation
    
    Scrollback rendering:
    - Render from scrollback buffer when scroll_offset > 0
    - Integrate with terminal scroll view functions
    - Properly handle mixed scrollback/screen content
    
    The terminal now properly displays:
    - Unicode characters (❯, arrows, etc.)
    - Nerd Font icons (eza --icons, powerline)
    - Scrollable history with mouse wheel and Shift+PageUp/Down
    mfwolffe committed
  14. Add font fallback support with fontconfig integration
    Implements fallback font loading for glyphs missing from the primary
    font. Uses fontconfig for portable font discovery, with hardcoded
    paths as fallback.
    
    Font module (font.f90):
    - Add ft_face_fallback and has_fallback fields to font_t
    - font_load_fallback() to load secondary font
    - font_has_glyph() to check glyph existence
    - font_render_glyph_with_fallback() tries fallback if primary lacks glyph
    - font_find_monospace() and font_find_for_codepoint() via fontconfig
    
    Atlas module (atlas.f90):
    - Increase atlas size to 1024x1024 for Unicode support
    - Add extended glyph cache (256 entries) with hash table
    - On-demand loading for non-ASCII codepoints
    
    C helpers (freetype_helpers.c):
    - fortty_ft_has_glyph() for glyph existence check
    - fortty_fc_find_font_for_char() finds font with specific codepoint
    - fortty_fc_find_monospace_font() finds system monospace font
    
    CMakeLists.txt:
    - Link fontconfig when available, define HAVE_FONTCONFIG
    mfwolffe committed
  15. Add scrollback buffer with mouse wheel and keyboard scrolling
    Implements a 10,000 line scrollback buffer using a circular buffer
    design. Users can scroll through terminal history.
    
    New features:
    - Circular buffer scrollback_mod with configurable capacity
    - Mouse wheel scrolling (3 lines per notch)
    - Shift+PageUp/PageDown for page-wise scrolling
    - Auto-reset to live view on keyboard input
    
    Files:
    - scrollback.f90: New circular buffer implementation
    - terminal.f90: Scrollback integration, scroll_offset tracking
    - window.f90: Scroll callbacks, terminal pointer for scrolling
    - glfw_bindings.f90: glfwSetScrollCallback binding
    mfwolffe committed
  16. Add UTF-8 multi-byte character decoding to parser
    The parser now properly decodes UTF-8 multi-byte sequences instead of
    passing raw bytes as codepoints. This fixes rendering of Unicode
    characters like ❯ (U+276F) which were previously displayed incorrectly.
    
    Changes:
    - Add UTF-8 state machine with utf8_codepoint and utf8_remaining fields
    - Handle 2-byte, 3-byte, and 4-byte UTF-8 sequences
    - Properly detect and handle invalid continuation bytes
    - Make handle_ground recursive for error recovery
    mfwolffe committed
  17. Add keyboard input handling
    - Add GLFW key constants and modifier masks
    - Implement char callback for text input with UTF-8 encoding
    - Implement key callback for special keys (arrows, F1-12, Home/End, etc.)
    - Handle Ctrl+A through Ctrl+Z combinations
    - Generate xterm-compatible escape sequences for special keys
    - Connect PTY to window module for keyboard input
    - Integrate parser into main loop
    mfwolffe committed
  18. Add VT/ANSI escape sequence parser
    - Create parser.f90 with state machine (ground, escape, CSI, OSC states)
    - Add CSI dispatch for cursor movement, erase, SGR colors/attributes
    - Support 256-color palette and RGB colors in cell.f90
    - Add DEC private modes (alternate screen, cursor visibility)
    - Add terminal operations: save/restore cursor, scroll region,
      insert/delete lines/chars, reverse index, reset
    mfwolffe committed