TUT/README.md
m1ngsama 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

263 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# TUT - Terminal User Interface Browser
一个专注于阅读体验的终端网页浏览器采用vim风格的键盘操作让你在终端中舒适地浏览网页文本内容。
## 特性
- 🚀 **纯文本浏览** - 专注于文本内容,无图片干扰
- ⌨️ **完全vim风格操作** - hjkl移动、gg/G跳转、/搜索等
- 📖 **报纸式排版** - 自适应宽度居中显示,优化阅读体验
- 🔗 **链接导航** - TAB键切换链接Enter跟随链接
- 📜 **历史管理** - h/l快速前进后退
- 🎨 **优雅配色** - 精心设计的终端配色方案
- 🔍 **内容搜索** - 支持文本搜索和高亮
## 依赖
- CMake ≥ 3.15
- C++17 编译器macOS 建议 clangLinux 建议 g++
- `ncurses``ncursesw`(支持宽字符)
- `libcurl`支持HTTPS
### macOS (Homebrew) 安装依赖
```bash
brew install cmake ncurses curl
```
### Linux (Ubuntu/Debian) 安装依赖
```bash
sudo apt-get update
sudo apt-get install build-essential cmake libncursesw5-dev libcurl4-openssl-dev
```
### Linux (Fedora/RHEL) 安装依赖
```bash
sudo dnf install cmake gcc-c++ ncurses-devel libcurl-devel
```
## 构建
在项目根目录执行:
```bash
mkdir -p build
cd build
cmake ..
cmake --build .
```
生成的可执行文件为 `tut`
## 运行
### 直接启动(显示帮助页面)
```bash
./tut
```
### 打开指定URL
```bash
./tut https://example.com
./tut https://news.ycombinator.com
```
### 显示使用帮助
```bash
./tut --help
```
## 键盘操作
### 导航
| 按键 | 功能 |
|------|------|
| `j` / `↓` | 向下滚动一行 |
| `k` / `↑` | 向上滚动一行 |
| `Ctrl-D` / `Space` | 向下翻页 |
| `Ctrl-U` / `b` | 向上翻页 |
| `gg` | 跳转到顶部 |
| `G` | 跳转到底部 |
| `[数字]G` | 跳转到指定行(如 `50G` |
| `[数字]j/k` | 向下/上滚动指定行数(如 `5j` |
### 链接操作
| 按键 | 功能 |
|------|------|
| `Tab` | 下一个链接 |
| `Shift-Tab` / `T` | 上一个链接 |
| `Enter` | 跟随当前链接 |
| `h` / `←` | 后退 |
| `l` / `→` | 前进 |
### 搜索
| 按键 | 功能 |
|------|------|
| `/` | 开始搜索 |
| `n` | 下一个匹配 |
| `N` | 上一个匹配 |
### 命令模式
`:` 进入命令模式,支持以下命令:
| 命令 | 功能 |
|------|------|
| `:q` / `:quit` | 退出浏览器 |
| `:o URL` / `:open URL` | 打开指定URL |
| `:r` / `:refresh` | 刷新当前页面 |
| `:h` / `:help` | 显示帮助 |
| `:[数字]` | 跳转到指定行 |
### 其他
| 按键 | 功能 |
|------|------|
| `r` | 刷新当前页面 |
| `q` | 退出浏览器 |
| `?` | 显示帮助 |
| `ESC` | 取消命令/搜索输入 |
## 使用示例
### 浏览新闻网站
```bash
./tut https://news.ycombinator.com
```
然后:
- 使用 `j/k` 滚动浏览标题
-`Tab` 切换到感兴趣的链接
-`Enter` 打开链接
-`h` 返回上一页
### 阅读文档
```bash
./tut https://en.wikipedia.org/wiki/Unix
```
然后:
- 使用 `gg` 跳转到顶部
- 使用 `/` 搜索关键词(如 `/history`
- 使用 `n/N` 在搜索结果间跳转
- 使用 `Space` 翻页阅读
### 快速查看多个网页
```bash
./tut https://github.com
```
在浏览器内:
- 浏览页面并点击链接
- 使用 `:o https://news.ycombinator.com` 打开新URL
- 使用 `h/l` 在历史中前进后退
## 设计理念
TUT 的设计目标是提供最佳的终端阅读体验:
1. **极简主义** - 只关注文本内容,摒弃图片、广告等干扰元素
2. **高效操作** - 完全键盘驱动,无需触摸鼠标
3. **优雅排版** - 自适应宽度,居中显示,类似专业阅读器
4. **快速响应** - 轻量级实现,即开即用
## 架构
```
TUT
├── http_client - HTTP/HTTPS 网页获取
├── html_parser - HTML 解析和文本提取
├── text_renderer - 文本渲染和排版引擎
├── input_handler - Vim 风格输入处理
└── browser - 浏览器主循环和状态管理
```
## 限制
### JavaScript/SPA 网站
**重要:** 这个浏览器**不支持JavaScript执行**。这意味着:
- ❌ **不支持**单页应用(SPA)React、Vue、Angular、Astro等构建的现代网站
- ❌ **不支持**动态内容加载
- ❌ **不支持**AJAX请求
- ❌ **不支持**客户端路由
**如何判断网站是否支持:**
1.`curl` 命令查看HTML内容`curl https://example.com | less`
2. 如果能看到实际的文章内容则支持如果只有JavaScript代码或空白div则不支持
**你的网站示例:**
-**thinker.m1ng.space** - 静态HTML完全支持可以浏览文章列表并点击进入具体文章
-**blog.m1ng.space** - 使用Astro SPA构建内容由JavaScript动态渲染无法正常显示
**替代方案:**
- 对于SPA网站查找是否有RSS feed或API端点
- 使用服务器端渲染(SSR)版本的URL如果有
- 寻找使用传统HTML构建的同类网站
### 其他限制
- 不支持图片显示
- 不支持复杂的CSS布局
- 不支持表单提交
- 不支持Cookie和会话管理
- 专注于内容阅读,不适合需要交互的网页
## 开发指南
### 代码风格
- 遵循 C++17 标准
- 使用 RAII 进行资源管理
- 使用 Pimpl 模式隐藏实现细节
### 测试
```bash
cd build
./tut https://example.com
```
### 贡献
欢迎提交 Pull Request请确保
1. 代码风格与现有代码一致
2. 添加必要的注释
3. 测试新功能
4. 更新文档
## 版本历史
- **v1.0.0** - 完全重构为终端浏览器
- 添加 HTTP/HTTPS 支持
- 实现 HTML 解析
- 实现 Vim 风格操作
- 报纸式排版引擎
- 链接导航和搜索功能
- **v0.0.1** - 初始版本ICS 日历查看器)
## 许可证
MIT License
## 致谢
灵感来源于:
- `lynx` - 经典的终端浏览器
- `w3m` - 另一个优秀的终端浏览器
- `vim` - 最好的文本编辑器
- `btop` - 美观的TUI设计