Commit graph

32 commits

Author SHA1 Message Date
430e70d7b6 refactor: Major simplification following Unix philosophy
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.
2025-12-17 15:39:23 +08:00
8ba659c8d2 docs: Document marks and mouse support in README
Add documentation for vim-style marks (m[a-z] to set, '[a-z] to jump)
and mouse support (link clicks, scroll wheel) to match the features
implemented in the previous commit.
2025-12-17 14:21:26 +08:00
815c479a90 feat: Add marks and mouse support for better navigation
- Implement vim-style marks (ma to set, 'a to jump)
  * Store mark positions per character (a-z)
  * Display status messages when setting/jumping to marks
  * Integrated with vim keybinding infrastructure

- Add full mouse support
  * Click on links to follow them directly
  * Mouse wheel scrolling (up/down)
  * Proper click detection within link ranges
  * Works with most modern terminal emulators

- Enable ncurses mouse events
  * ALL_MOUSE_EVENTS for comprehensive support
  * Zero mouseinterval for instant response
  * Handle BUTTON1_CLICKED, BUTTON4_PRESSED (wheel up), BUTTON5_PRESSED (wheel down)

- Update help documentation
  * Document marks keybindings
  * Add mouse support section
  * Note infrastructure for visual mode and tabs

This brings TUT closer to feature parity with modern vim plugins
while maintaining excellent usability for both keyboard and mouse users.
2025-12-17 13:53:46 +08:00
860c8aaf56
🚀 Modern Browser Enhancements - Vimium-style Navigation & Beautiful Rendering (#11)
* feat: Add table, image, and nested list support to HTML parser

- Add Table, Image, and Form data structures
- Implement table extraction with proper row/column parsing
- Add image extraction with alt text and dimensions
- Implement recursive nested list parsing (ul/ol)
- Support ordered and unordered lists with nesting levels
- Extract list item numbers for ordered lists
- Add HEADING4-6, ORDERED_LIST_ITEM, TABLE, IMAGE element types

This enhancement allows TUT to properly extract and represent
structured content from HTML, enabling better rendering of
data-heavy websites.

* feat: Implement beautiful table and image rendering with box-drawing

- Add Unicode box-drawing characters for table borders (┌─┬─┐, │, etc.)
- Implement table rendering with proper column width calculation
- Add header row styling with heavy borders and bold text
- Support automatic text wrapping within table cells
- Implement image placeholder rendering with bordered boxes
- Display image alt text and dimensions (width × height)
- Enhance list rendering with different bullet styles per nesting level
  * Level 0: • (bullet)
  * Level 1: ◦ (white bullet)
  * Level 2: ▪ (small square)
  * Level 3: ▫ (white small square)
- Add ordered list rendering with proper numbering
- Support proper indentation for nested lists

These visual enhancements make TUT significantly more modern and
readable compared to traditional text browsers like w3m.

* feat: Add Vimium-style link hints and vim keybindings infrastructure

- Add LINK_HINTS mode for Vimium-style link navigation
- Implement 'f' key to activate link hints mode
- Add visual mode support (v/V keys)
- Implement marks support (m[a-z] to set, '[a-z] to jump)
- Add tab navigation keys (gt/gT for next/previous tab)
- Add new actions:
  * SHOW_LINK_HINTS - activate link hints overlay
  * FOLLOW_LINK_HINT - follow link by hint letters
  * ENTER_VISUAL_MODE / ENTER_VISUAL_LINE_MODE
  * SET_MARK / GOTO_MARK - vim-style position bookmarks
  * NEXT_TAB / PREV_TAB - tab navigation
  * YANK - copy selected text

This brings modern browser vim plugin functionality (like Vimium)
to the terminal, making link navigation much faster than traditional
tab-through methods.
2025-12-17 13:51:28 +08:00
ea71b0ca02 feat: Add inline link display and vim-style quick navigation
Major improvements to link handling and navigation:

Features:
- Display links inline with numbered indicators [0], [1], etc.
- Quick navigation: type number + Enter to jump to link
- Fast follow: press 'f' + number to open link directly
- Visual improvements: links shown with underline and highlight
- Remove separate link list at bottom for better readability

Technical changes:
- Add InlineLink structure to track link positions in text
- Implement wrap_text_with_links() for intelligent text wrapping
- Add GOTO_LINK and FOLLOW_LINK_NUM actions
- Implement LINK input mode for 'f' command
- Character-by-character rendering for proper link highlighting
- Update help documentation with new navigation methods

Usage examples:
- 3<Enter>  : Jump to link 3
- f5 or 5f  : Open link 5 directly
- Tab/Enter : Traditional navigation still works

All comments converted to standard Unix style (English).
2025-12-08 17:07:40 +08:00
354133b500 docs: Rewrite README as Unix man page, remove Chinese comments
Following Unix philosophy and documentation standards:
- Rewrite README.md in man page format (NAME, SYNOPSIS, DESCRIPTION, etc.)
- Remove all Chinese comments from source code
- Keep code clean and self-documenting
- Add PHILOSOPHY section explaining Unix principles
- Include proper EXIT STATUS, ENVIRONMENT, and FILES sections
- Reference related tools in SEE ALSO section
2025-12-08 16:11:39 +08:00
818f5ddc5e fix: Add missing memory headers for unique_ptr
All headers using std::unique_ptr now explicitly include <memory>
2025-12-08 16:05:22 +08:00
6564f23707 fix: Add missing memory header to html_parser.h
Linux build requires explicit include of <memory> for std::unique_ptr
2025-12-08 16:03:17 +08:00
ef80f9ab82 refactor: Improve code quality and Unix philosophy
- Remove redundant comments for cleaner code
- Simplify error messages and status display
- Improve code consistency across modules
- Fix GitHub Actions workflow binary names
- Enhance .gitignore for common editor files
- Align help text formatting
- Remove unnecessary verbose comments
2025-12-08 15:53:17 +08:00
ab2d1932e4 feat: Transform to vim-style terminal browser (#10)
* 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.
2025-12-05 15:01:21 +08:00
5b54b3e9c8 Merge pull request #9 from m1ngsama/fix/release-permissions
fix: Add contents write permission for release job
2025-11-20 11:51:13 +08:00
048271cdc8 fix: Add contents write permission for release job
GitHub Actions requires explicit permissions to create releases.
Added permissions.contents: write to the release job.
2025-11-20 11:50:43 +08:00
a866331bc2 Merge pull request #8 from m1ngsama/feature/cicd-auto-release
ci: Auto release on push to main with multi-platform builds
2025-11-20 11:46:52 +08:00
ffacdc8c3e ci: Auto release on push to main with multi-platform builds
- 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
2025-11-20 11:45:50 +08:00
1e9b523130 Merge pull request #7 from m1ngsama/feature/tui-interface-enhancement
feat: Enhance TUI interface with modern design and ASCII compatibility
2025-11-20 10:13:01 +08:00
56df39a755 feat: Replace emoji with ASCII art for maximum terminal compatibility
- Replace Braille spinner with classic ASCII spinner (|/-\)
- Update calendar banner: [CAL] NBTCA CALENDAR [CAL]
- Update tools banner: [TOOL] NBTCA UTILITY TOOLS [TOOL]
- Replace event status icons: * for today, v for past, ○ for upcoming
- Update menu items: [CAL] Calendar, [X] Exit
- Replace location emoji with @ symbol
- Ensure compatibility across all terminal environments including legacy systems
2025-11-20 10:10:26 +08:00
cb9cde8958 Merge pull request #6 from m1ngsama/feature/github-actions-release
docs: Add developer guide to README.md
2025-11-19 18:00:58 +08:00
0a164f93ce docs: Add developer guide to README.md 2025-11-19 17:58:34 +08:00
dbc61f8385 Merge pull request #5 from m1ngsama/feature/github-actions-release
feat: Add GitHub Actions workflow for automated build and source-only release
2025-11-19 17:56:55 +08:00
993d81a136 feat: Add GitHub Actions workflow for automated build and source-only release 2025-11-19 17:56:01 +08:00
48bbd6a2b7 feat: Initial release v0.0.1 with updated README and build instructions 2025-11-19 17:50:58 +08:00
9acf7f6bbd Update README.md with version 0.0.1 2025-11-19 17:39:32 +08:00
5f1371c1f2 Add build/ to .gitignore and remove build directory from Git tracking. 2025-11-19 17:32:41 +08:00
6b433e530d Merge pull request #4 from m1ngsama/feature/ascii-art-tui
feat: Add ASCII art and ANSI shadow effects to TUI
2025-11-19 17:28:40 +08:00
9f334ec0a0 feat: Add ASCII art and ANSI shadow effects to TUI 2025-11-19 17:27:46 +08:00
1675aa80ff Merge pull request #3 from m1ngsama/feature/vim-keybindings
feat: Add Vim keybindings (j/k) for navigation in TUI
2025-11-19 16:52:29 +08:00
38d97b1d46 feat: Add Vim keybindings (j/k) for navigation in TUI 2025-11-19 16:48:55 +08:00
6059bcbcc6 Merge remote-tracking branch 'origin/feature/vim-bindings' 2025-11-19 16:39:59 +08:00
4f2cc49534 Merge pull request #2 from m1ngsama/feature/modularize-calendar
feat: Modularize calendar and create TUI portal
2025-11-19 16:37:13 +08:00
ee244aaeb6 Merge pull request #1 from m1ngsama/feature/modularize-calendar
feat: Modularize calendar and create TUI portal
2025-11-19 16:35:30 +08:00
77784f7453 feat: Modularize calendar and create TUI portal
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.
2025-11-19 16:34:25 +08:00
e7edc3455f Initial commit: NBTCA TUI with ICS calendar support 2025-11-19 11:50:45 +08:00