Commits

trunk
Switch branches/tags
All users
Until Dec 28, 2025
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 20, 2025

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. mfwolffe committed
  9. mfwolffe committed
  10. Add FreeType bindings for font loading
    - C helper functions for FreeType (init, load font, render glyph)
    - Fortran font_mod module with font_t type
    - Fortran glyph_mod module with glyph_t type
    - Updated CMake to find and link FreeType
    mfwolffe committed
  11. mfwolffe committed
  12. Add foundation: GLFW window with OpenGL 3.3 context
    - CMake build system with Fortran/C interop
    - GLAD2 OpenGL loader with C wrapper functions
    - GLFW bindings for window management
    - Basic event loop with Escape to close
    - Framebuffer resize callback for HiDPI support
    mfwolffe committed