Completed Phase 1 high priority task - comprehensive browsing history:
HistoryManager (New):
- JSON persistence to ~/.config/tut/history.json
- Auto-records every page visit
- Updates timestamp on revisit (moves to front)
- Limit to 1000 entries maximum
- Each entry stores: title, URL, timestamp
- Handles special characters with JSON escaping
- Auto-creates config directory if needed
UI Integration:
- History panel in bottom (center-left) of UI
- Shows up to 5 most recent visits
- Displays "[1] Title" format with cyan highlighting
- Shows "+N more..." indicator if >5 entries
- Real-time update on every navigation
Auto-Recording:
- Records on navigation via address bar
- Records on link click navigation
- Records on back/forward navigation
- Skips empty URLs and about:blank
- Updates existing entries instead of duplicating
Keyboard Shortcuts:
- F3: Toggle history panel visibility
* Refreshes history list when opened
Features:
- Persistent storage across browser sessions
- Smart duplicate handling (updates timestamp)
- Move-to-front on revisit
- Automatic trimming to max 1000 entries
- Sorted display (newest first)
- Empty state handling ("(empty)" message)
Technical Implementation:
- HistoryManager class with Pimpl idiom
- Simple JSON format for easy manual editing
- Event-driven architecture (WindowEvent::OpenHistory)
- Lambda callback for history updates
- Integrated with navigation callbacks
- Three-panel bottom layout (Bookmarks | History | Status)
Storage Format:
[
{"title": "Page Title", "url": "https://...", "timestamp": 1234567890},
...
]
Documentation:
- Updated KEYBOARD.md with F3 shortcut
- Updated STATUS.md to reflect completion
- Added history to interactive features list
All Phase 1 features now complete! 📚✅🎉
Completed Phase 1 high priority task - comprehensive search system:
Search Features:
- Press '/' to enter search mode with dedicated search input
- Case-insensitive search across all content
- Enter to execute search and find all matches
- Real-time match highlighting:
* Yellow background = current match
* Blue background = other matches
- Navigate results with 'n' (next) and 'N' (previous)
- Smart scrolling - auto-scroll to current match
- Match counter in status bar (e.g., "Match 3/10")
- Esc to cancel search input
- Search state clears when loading new pages
Implementation Details:
- Added search state to MainWindow::Impl
* search_mode, search_query, search_matches, current_match
- Search input component (similar to address bar)
- executeSearch() - finds all matching lines
- nextMatch()/previousMatch() - cycle through results
- Content renderer highlights matches dynamically
- Status panel shows search results with emoji indicator
User Experience:
- Intuitive vim-style '/' to search
- Visual feedback with color highlighting
- Match position indicator in status
- Non-intrusive - doesn't interfere with navigation
- Seamless integration with existing UI
Keyboard shortcuts:
- /: Start search
- Enter: Execute search
- n: Next match
- N: Previous match
- Esc: Cancel search
Documentation:
- Updated KEYBOARD.md with search section and usage example
- Updated STATUS.md to reflect completion
- Added search to interactive features list
The browser now has powerful in-page search! 🔍✅
Completed Phase 1 high priority task:
Interactive Features:
- Add 'f' keyboard shortcut for forward navigation
- Forward button in UI now fully functional
- Works in tandem with Backspace (back) navigation
- Only enabled when browser can go forward
Documentation:
- Updated KEYBOARD.md with 'f' key
- Updated README.md keyboard shortcuts
- Updated STATUS.md to reflect completion
- Updated help text in main.cpp
Keyboard shortcuts:
- Backspace: Go back
- f: Go forward
- Both check navigation state before allowing action
The browser now has complete bidirectional navigation! ✅
Implemented complete interactive browser experience with keyboard-driven
navigation.
Interactive Features Added:
✅ Content Scrolling
- j/k or arrow keys: Line-by-line scrolling
- Space/b or PageUp/PageDown: Page scrolling
- g/G: Jump to top/bottom
- Real-time scroll position indicator
✅ Link Navigation
- Tab/Shift+Tab: Cycle through links
- 1-9 number keys: Jump directly to links
- Enter: Follow selected link
- Selected link highlighted in status bar
✅ Browser Navigation
- Back/forward button state (dimmed when unavailable)
- Backspace: Go back in history
- r/F5: Refresh page
- o: Open address bar to enter new URL
✅ Enhanced UI
- Status panel shows load stats (KB, time, link count)
- Selected link URL shown in status bar
- Scroll position indicator
- Navigation button states
Technical Implementation:
- Rewrote MainWindow with full FTXUI event handling
- Implemented content line splitting for scrolling
- Added link selection state management
- Wired up browser engine callbacks
- Added timing and statistics tracking
- Proper back/forward history support
Files Modified:
- src/ui/main_window.cpp - Complete rewrite with interactive features
- src/main.cpp - Wire up all callbacks and link handling
- KEYBOARD.md - Complete keyboard shortcuts reference
Tested with:
https://tldp.org/HOWTO/HOWTO-INDEX/howtos.htmlhttps://example.com
The browser is now fully interactive and usable for real web browsing! 🎉