TUT/STATUS.md
m1ngsama 03422136dd feat: Add complete persistent bookmark system
Completed Phase 1 high priority task - comprehensive bookmark management:

BookmarkManager (New):
- JSON persistence to ~/.config/tut/bookmarks.json
- Add, remove, contains, getAll operations
- Automatic sorting by timestamp (newest first)
- Each bookmark stores: title, URL, timestamp
- Handles special characters with JSON escaping
- Auto-creates config directory if needed

UI Integration:
- Bookmark panel in bottom-left of UI
- Shows up to 5 most recent bookmarks
- Displays "[1] Title" format with yellow highlighting
- Shows "+N more..." indicator if >5 bookmarks
- Real-time update when bookmarks change

Keyboard Shortcuts:
- Ctrl+D: Toggle bookmark for current page
  * Adds if not bookmarked
  * Removes if already bookmarked
  * Shows status message confirmation
- F2: Toggle bookmark panel visibility
  * Refreshes bookmark list when opened

Features:
- Persistent storage across browser sessions
- Duplicate detection (one bookmark per URL)
- Toggle behavior (add/remove with same key)
- Real-time panel updates
- Empty state handling ("(empty)" message)
- Sorted display (newest first)

Technical Implementation:
- BookmarkManager class with Pimpl idiom
- Simple JSON format for easy manual editing
- Event-driven architecture (WindowEvent::AddBookmark)
- Lambda callback for bookmark updates
- Integrated with main browser engine

Storage Format:
[
  {"title": "Page Title", "url": "https://...", "timestamp": 1234567890},
  ...
]

Documentation:
- Updated KEYBOARD.md with bookmark shortcuts
- Updated STATUS.md to reflect completion
- Added bookmark feature to interactive features list

Next Step: History system! 📚
2026-01-01 14:08:42 +08:00

4.4 KiB

TUT Browser - Development Status

Working Features (v0.2.0-alpha) - INTERACTIVE!

Core Functionality

  • HTTP/HTTPS Client - Fully functional with cpp-httplib

    • GET/POST/HEAD requests
    • SSL/TLS support
    • Cookie management
    • Redirect following
    • Timeout handling
  • HTML Parsing - Working with gumbo-parser

    • Full HTML5 parsing
    • DOM tree construction
    • Title extraction
    • Link extraction with numbering
  • Content Rendering - Basic text-based rendering

    • Headings (H1-H6) with bold formatting
    • Lists (UL/OL) with bullet points
    • Links with [N] numbering and blue underline
    • Paragraph and block element handling
    • Skip script/style/head tags
  • Browser Engine - Integrated pipeline

    • Fetches URLs via HTTP client
    • Parses HTML with renderer
    • Resolves relative URLs
    • Error handling for failed requests
    • Back/forward navigation history
  • Interactive UI - Fully keyboard-driven navigation

    • Content Scrolling - j/k, g/G, Space/b for navigation
    • Link Navigation - Tab, number keys (1-9), Enter to follow
    • Address Bar - 'o' to open, type URL, Enter to navigate
    • Browser Controls - Backspace to go back, 'f' to go forward, r/F5 to refresh
    • In-Page Search - '/' to search, n/N to navigate results, highlighted matches
    • Bookmark System - Ctrl+D to add/remove, F2 to toggle panel, JSON persistence
    • Real-time Status - Load stats, scroll position, selected link, search results
    • Visual Feedback - Navigation button states, link highlighting, search highlighting

Build & Deployment

  • Binary size: 827KB (well under 1MB target!)
  • Clean compilation with no warnings
  • All tests build successfully
  • CI/CD pipeline configured
  • macOS and Linux support

⚠️ Known Limitations

UI Components (Not Yet Fully Implemented)

  • ⚠️ History Panel - Backend works, UI not implemented
    • Back navigation works with Backspace
    • No visual history panel (F3)
    • No persistence across sessions

Feature Gaps

  • ⚠️ No form support (input fields, buttons, etc.)
  • ⚠️ No image rendering (even ASCII art)
  • ⚠️ No CSS parsing (only basic tag-based formatting)
  • ⚠️ No JavaScript support (by design)

🎯 Next Steps Priority

Phase 1: Enhanced UX (High Priority)

  1. Add History (new files)
    • Implement history storage (JSON file)
    • Create history panel UI
    • F3 to view history
    • Auto-record visited pages

Phase 3: Advanced Features (Low Priority)

  1. Improve Rendering

    • Better word wrapping
    • Table rendering
    • Code block formatting
    • Better list indentation
  2. Add Form Support

    • Input field rendering
    • Button rendering
    • Form submission
  3. Add Image Support

    • ASCII art rendering
    • Image-to-text conversion

📊 Test Results

./test_browse.sh

Test 1: TLDP HOWTO index - ✅ PASSED
Test 2: example.com - ✅ PASSED

Interactive test:
./build_ftxui/tut https://tldp.org/HOWTO/HOWTO-INDEX/howtos.html

✅ Scrolling with j/k - WORKS
✅ Tab to cycle links - WORKS
✅ Press '1' to jump to link 1 - WORKS
✅ Enter to follow link - WORKS
✅ Backspace to go back - WORKS
✅ 'f' to go forward - WORKS
✅ '/' to search - WORKS
✅ 'n'/'N' to navigate search results - WORKS
✅ Ctrl+D to add/remove bookmark - WORKS
✅ F2 to toggle bookmark panel - WORKS
✅ 'r' to refresh - WORKS
✅ 'o' to open address bar - WORKS

Successfully browses:

🚀 Quick Start

# Build
cmake -B build_ftxui -DCMAKE_PREFIX_PATH=/opt/homebrew
cmake --build build_ftxui -j$(nproc)

# Test
./test_browse.sh

# Try it
./build_ftxui/tut https://example.com

📝 Notes

THE BROWSER IS NOW FULLY INTERACTIVE AND USABLE! 🎉

You can actually browse the web with TUT:

  • Load pages via HTTP/HTTPS
  • Scroll content with vim-style keys
  • Navigate between links with Tab or numbers
  • Follow links by pressing Enter
  • Go back in history with Backspace
  • Enter new URLs with 'o' key
  • See real-time load stats

The core experience is complete! Remaining work is mostly enhancements:

  • Search within pages
  • Persistent bookmarks and history
  • Form support
  • Better styling

See KEYBOARD.md for complete keyboard shortcuts reference.