# pretty_demangle **Repository Path**: stesen/pretty_demangle ## Basic Information - **Project Name**: pretty_demangle - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-06 - **Last Updated**: 2026-03-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Pretty Demangle 一个美观的 C++ 和 Rust 符号 demangle 工具,具有括号配对、颜色高亮、展开/折叠等功能。 ## 特性 - **支持 C++ 和 Rust 符号**: 自动识别并 demangle 两种语言的符号 - **括号配对**: 智能识别并匹配各种括号 `()`, `<>`, `[]`, `{}` - **彩虹括号**: 不同深度的括号使用不同颜色(按嵌套深度循环) - **语法高亮**: 关键字、类型、函数名、命名空间等使用不同颜色 - **展开/折叠**: 支持将复杂的嵌套结构换行展开显示,支持括号级别折叠 - **交互模式**: TUI 界面支持键盘导航、鼠标点击、括号匹配、实时输入 - **主题支持**: 自动检测终端背景,支持 Atom One Dark 和 Atom One Light 配色 - **可配置**: 支持自定义缩进大小、最大行长度、折叠深度等 ## 安装 ```bash cargo build --release ``` 编译后的二进制文件位于 `target/release/pretty_demangle` ## 使用 ### 基本用法 ```bash # 处理单个符号 pretty_demangle "_ZNSt3__16vectorIiNS_9allocatorIiEEE9push_backERKi" # 从文件读取(每行一个符号) pretty_demangle -F symbols.txt # 从标准输入读取 echo "_ZNSt3__16vectorIiNS_9allocatorIiEEE9push_backERKi" | pretty_demangle ``` ### 命令行选项 ``` Options: -F, --file 从文件读取符号(每行一个) --no-color 禁用颜色输出 -e, --expand 展开括号换行显示 -n, --indent 缩进大小(空格数) [默认: 4] -w, --max-line-length 最大行长度(超过则展开) [默认: 80] -d, --fold-depth 折叠深度(超过此深度的内容显示为...) -v, --verbose 显示详细信息 --skip-errors 跳过解析错误的符号 -t, --tree 以树形结构显示 --detect 检测符号语言类型 -i, --interactive 启动交互模式(TUI) -f, --format 输出格式 [默认: simple] -h, --help 打印帮助信息 -V, --version 打印版本信息 ``` ### 示例 #### 基本输出 ```bash $ echo "_ZNSt3__16vectorIiNS_9allocatorIiEEE9push_backERKi" | pretty_demangle std::__1::vector>::push_back(int const&) ``` #### 展开显示 ```bash $ echo "_ZNSt3__16vectorIiNS_9allocatorIiEEE9push_backERKi" | pretty_demangle -e --no-color std::__1::vector < int, std::__1::allocator > ::push_back (int const&) ``` #### 颜色输出(彩虹括号 & 语法高亮) 颜色输出会自动根据终端能力启用,可以使用 `--no-color` 禁用。 程序会自动检测终端背景色(暗色/亮色)并选择相应的配色方案: **暗色背景**: Atom One Dark 主题 **亮色背景**: Atom One Light 主题 **彩虹括号**(按嵌套深度循环): - 第1层:黄色 - 第2层:绿色 - 第3层:青色 - 第4层:蓝色 - 第5层:紫色 - 第6层:红色(然后循环) **语法高亮**: - 关键字:`const`, `virtual`, `constexpr`, `fn`, `let`, `mut` 等 → 紫色 - 类型:`int`, `char`, `vector`, `String`, `Option` 等 → 黄色(暗色)/金黄色(亮色) - 函数名:小写字母开头的标识符 → 蓝色 - 命名空间/类名:大写字母开头的标识符 → 橙色 - 数字字面量 → 橙色 交互模式(TUI)同样支持完整的彩虹括号和语法高亮。 #### 折叠深度 ```bash # 深度超过2的内容显示为 ... $ echo "_ZNSt3__16vectorIiNS_9allocatorIiEEE9push_backERKi" | pretty_demangle -e -d 2 ``` 输出可能类似于: ``` std::__1::vector<...>::push_back(int const&) ``` #### 交互模式 启动交互模式进行 TUI 浏览: ```bash # 从命令行参数 pretty_demangle -i "_ZNSt3__16vectorIiNS_9allocatorIiEEE9push_backERKi" # 从文件 pretty_demangle -i -F symbols.txt # 从管道 echo "_ZNSt3__16vectorIiNS_9allocatorIiEEE9push_backERKi" | pretty_demangle -i # 空列表启动(可以动态输入) pretty_demangle -i ``` **快捷键:** | 快捷键 | 功能 | |--------|------| | `j` / `↓` | 向下移动 | | `k` / `↑` | 向上移动 | | `g` / `Home` | 跳到第一个 | | `G` / `End` | 跳到最后一个 | | `PgUp` | 向上翻页 | | `PgDn` | 向下翻页 | | `Enter` / `Space` | 展开/折叠当前符号 | | `→` / `l` | 展开当前 | | `←` / `h` | 折叠当前 | | `e` | 展开全部 | | `E` | 折叠全部 | | `c` | 在光标位置折叠/展开括号(需先展开) | | `%` | 跳转到匹配的括号(类似 Vim) | | `0` | 光标移到行首 | | `$` | 光标移到行尾 | | `/` | 搜索 | | `n` / `N` | 下一个/上一个搜索结果 | | `i` / `a` | 输入新的 mangled 字符串 | | `y` | 复制到剪贴板 | | `?` / `F1` | 显示帮助 | | `q` / `Esc` | 退出 | **交互模式特性:** - **括号折叠**: 在展开模式下,将光标移动到括号内,按 `c` 键可折叠该括号及其内容为 `<...>` 格式 - **光标导航**: 展开模式下,使用 `h`/`l` 或方向键移动光标,括号内的内容会显示下划线高亮 - **块光标**: 展开模式下显示闪烁的块光标,指示当前位置 - **输入模式**: 按 `i` 或 `a` 可以输入新的 mangled 字符串,按回车后进行 demangle 并添加到列表 **鼠标操作:** - 点击:选择并切换展开状态 - 滚动:上下滚动列表 ## 支持的符号格式 ### C++ - Itanium ABI: 以 `_Z` 开头的符号(Linux、macOS 默认) - MSVC: 以 `?` 开头的符号(Windows) ### Rust - 新格式: 以 `_R` 开头的符号 - 旧格式: 以 `_ZN` 开头并以 `E` 结尾的符号 ## 架构 ``` src/ ├── main.rs # CLI 入口 ├── cli.rs # 命令行参数解析 ├── types.rs # 核心类型定义 ├── demangler/ # Demangle 实现 │ ├── mod.rs # Demangle 接口 │ ├── cpp.rs # C++ demangle │ └── rust.rs # Rust demangle └── formatter/ # 格式化实现 ├── mod.rs # 主格式化器 ├── bracket.rs # 括号匹配 ├── color.rs # 颜色方案(Atom One Dark/Light) └── render.rs # 符号渲染 └── tui/ # 交互模式 ├── mod.rs # TUI 主入口 ├── app.rs # 应用状态管理 ├── ui.rs # 界面渲染 └── styled_text.rs # 样式文本处理 ``` ## 依赖 - `cpp_demangle`: C++ 符号 demangle - `rustc-demangle`: Rust 符号 demangle - `ansi_term`: 终端颜色输出 - `clap`: 命令行参数解析 - `ratatui`: TUI 框架 - `crossterm`: 终端控制 ## License MIT OR Apache-2.0