Removed ~45% dead code and simplified architecture:
Dead Code Removal (~1,687 LOC):
- calendar.cpp/h - Unused calendar stub
- ics_fetcher.cpp/h - Orphaned ICS fetching
- ics_parser.cpp/h - Abandoned iCalendar parsing
- tui_view.cpp/h - Separate UI implementation
Build System:
- Simplified Makefile to CMake wrapper
- Added install target to CMakeLists.txt
- Improved .gitignore for build artifacts
- Removed Chinese comments, replaced with English
Code Simplification:
- Removed unimplemented features:
* VISUAL/VISUAL_LINE modes (no actual functionality)
* YANK action (copy not implemented)
* Tab support (NEXT_TAB, PREV_TAB, etc.)
* TOGGLE_MOUSE (mouse always enabled)
- Removed process_visual_mode() function (~36 lines)
- Removed gt/gT keybindings for tabs
- Updated help text to remove placeholders
HTML Entity Decoding:
- Made entity list static const (performance)
- Added numeric entity support ({, «)
- Added UTF-8 encoding for decoded entities
- Cleaner, more complete implementation
This brings the browser closer to Unix principles:
- Do one thing well (browse, don't manage calendar)
- Keep it simple (removed over-engineered features)
- Clear, focused codebase (2,058 LOC vs 3,745)
Build tested successfully with only minor warnings.
* feat: Add HTTP/HTTPS client module
Implement HTTP client with libcurl for fetching web pages:
- Support for HTTP and HTTPS protocols
- Configurable timeout and user agent
- Automatic redirect following
- SSL certificate verification
- Pimpl pattern for implementation hiding
This module provides the foundation for web page retrieval
in the terminal browser.
* feat: Add HTML parser and content extraction
Implement HTML parser for extracting readable content:
- Parse HTML structure (headings, paragraphs, lists, links)
- Extract and decode HTML entities
- Smart content area detection (article, main, body)
- Relative URL to absolute URL conversion
- Support for both absolute and relative paths
- Filter out scripts, styles, and non-content elements
The parser uses regex-based extraction optimized for
text-heavy websites and documentation.
* feat: Add newspaper-style text rendering engine
Implement text renderer with adaptive layout:
- Adaptive width with maximum 80 characters
- Center-aligned content for comfortable reading
- Smart text wrapping and paragraph spacing
- Color scheme optimized for terminal reading
- Support for headings, paragraphs, lists, and links
- Link indicators with numbering
- Horizontal rules and visual separators
The renderer creates a newspaper-like reading experience
optimized for terminal displays.
* feat: Implement vim-style input handling
Add complete vim-style keyboard navigation:
- Normal mode: hjkl movement, gg/G jump, numeric prefixes
- Command mode: :q, :o URL, :r, :h, :[number]
- Search mode: / for search, n/N for next/previous match
- Link navigation: Tab/Shift-Tab, Enter to follow
- Scroll commands: Ctrl-D/U, Space, b for page up/down
- History navigation: h for back, l for forward
Input handler manages mode transitions and command parsing
with full vim compatibility.
* feat: Implement browser core with TUI interface
Add main browser engine and user interface:
- Page loading with HTTP client integration
- HTML parsing and text rendering pipeline
- History management (back/forward navigation)
- Link selection and following with Tab navigation
- Search functionality with highlighting
- Scrolling with position tracking
- Status bar with mode indicator and progress
- Built-in help page with usage instructions
- Error handling and user feedback
- Support for static HTML websites
The browser provides a complete vim-style terminal
browsing experience optimized for reading text content.
* build: Update build system for terminal browser
Update CMake and add Makefile for the new project:
- Rename project from NBTCA_TUI to TUT
- Update executable name from nbtca_tui to tut
- Add all new source files to build
- Include Makefile for environments without CMake
- Update .gitignore for build artifacts
Both CMake and Make build systems are now supported
for maximum compatibility.
* docs: Complete project transformation to terminal browser
Transform project from ICS calendar viewer to terminal browser:
- Rewrite main.cpp for browser launch with URL argument support
- Complete README rewrite with:
- New project description and features
- Comprehensive keyboard shortcuts documentation
- Installation guide for multiple platforms
- Usage examples and best practices
- JavaScript/SPA limitations explanation
- Architecture overview
- Add help command line option
- Update version to 1.0.0
The project is now TUT (Terminal User Interface Browser),
a vim-style terminal web browser optimized for reading.
- Change trigger from tags to push on main branch
- Add matrix build for macOS and Linux platforms
- Use softprops/action-gh-release for creating releases
- Auto-generate version using date and commit hash
- Upload platform-specific binaries to release
- Fix CMakeLists.txt to conditionally set Homebrew path for macOS only
Refactored the calendar functionality into a separate Calendar class.
Created a TUI portal in main.cpp to allow for future feature expansion.
The TUI portal provides a menu to select different features, with the calendar being the first one.
Updated the build system to include the new files.