# hatty ⚡ > 一个超高颜值、极速响应、功能丰富的现代 Linux 终端模拟器。 基于 **Electron + 原生 PTY + xterm.js (WebGL 硬件加速)** 架构打造,兼备现代桌面应用的丝滑交互与系统底层的澎湃性能。 --- ## ✨ 核心特性 - 🎨 **极致现代设计**: - 沉浸式无边框磨砂毛玻璃窗口(Acrylic / Frosted Glass)。 - 内置 5 套精品现代主题(**Tokyo Night**、**Catppuccin Mocha**、**Dracula**、**One Dark**、**Cyberpunk**),支持全局即时热切换与调色板联动。 - 状态栏与标签页平滑微动效、发光焦点与光标呼吸闪烁。 - ⚡ **高性能 GPU 渲染**: - 挂载 `@xterm/addon-webgl` 硬件加速管线,利用 GPU 直接进行字形栅格化与批处理渲染,轻松保持 60~120 FPS 丝滑帧率。 - 📑 **多标签页与多窗格分屏**: - **多标签页(Tabs)**:无上限新建、关闭与快捷切换,自动提取进程标题。 - **多窗格分屏(Split Panes)**:支持向右水平分屏(Split Right)与向下垂直分屏(Split Down),每个窗格独立持有 Linux PTY 会话,焦点自由切换。 - 🧭 **Command Palette 快速命令面板**: - 按下 `Ctrl+Shift+P` 或 `F1` 唤出类似 VS Code / Sublime 的命令搜索面板,支持键盘模糊搜索主题、分屏、快捷操作。 - 🔍 **终端内搜索**: - 按下 `Ctrl+Shift+F` 唤起悬浮搜索框,支持高亮匹配、上一个/下一个遍历与即时跳转。 - ⚙️ **丰富的偏好配置**: - 支持调整字号(11px ~ 24px)、字体族(JetBrains Mono / Fira Code 等)、光标形状(Block / Bar / Underline)、光标闪烁,配置自动本地持久化。 --- ## ⌨️ 常用快捷键 | 快捷键 | 功能说明 | | :--- | :--- | | `Ctrl + Shift + P` / `F1` | 呼出快速命令面板 (Command Palette) | | `Ctrl + Shift + T` | 新建标签页 (New Tab) | | `Ctrl + Shift + W` | 关闭当前窗格 / 标签页 (Close Pane / Tab) | | `Ctrl + Shift + E` | 向右水平分屏 (Split Right) | | `Ctrl + Shift + O` | 向下垂直分屏 (Split Down) | | `Ctrl + Shift + F` | 唤出终端内快速搜索 (Search Buffer) | | `Ctrl + Tab` / `Ctrl + Shift + Tab` | 切换到下一个 / 上一个标签页 | | `Alt + 1` ~ `Alt + 9` | 快速直达第 1 ~ 9 个标签页 | | `Ctrl + ,` | 打开偏好设置 (Preferences) | --- ## 🚀 启动与打包构建 ```bash # 1. 启动开发终端 npm start # 2. 本地一键打包生成 Linux .deb 安装包 (生成于 dist/ 目录) npm run package:deb # 3. 安装生成的 deb 包 sudo dpkg -i dist/hatty_1.0.0_amd64.deb # 4. 若 Node ABI 变动,重新编译底层 node-pty npm run rebuild ``` ### 🤖 Gitea Actions 自动化发版 项目已配置 Gitea Actions 流水线(`.gitea/workflows/release.yaml`): - 推送以 `v` 开头的标签(如 `git tag v1.0.0 && git push origin v1.0.0`)会自动触发编译打包,并把 `.deb` 安装包作为附件发布到 Gitea Releases。 - 也可以在 Gitea 仓库页面中手动点击 **Actions -> Run workflow** 触发发布。 --- ## 🛠️ 架构分层 ``` hatty/ ├── src/ │ ├── main/ │ │ ├── index.cjs # Electron 主进程,无边框透明窗口与 IPC 路由 │ │ └── pty-manager.cjs # 基于 node-pty 的 Linux 伪终端管理与进程调度 │ ├── preload/ │ │ └── index.cjs # 安全 ContextBridge 预加载隔离脚本 │ └── renderer/ │ ├── index.html # 现代终端 UI DOM 结构 │ ├── css/ │ │ ├── variables.css # 主题调色板与设计 Token │ │ ├── app.css # 全局视口、标题栏、控制按钮 │ │ ├── tabs.css # 标签栏微动效与样式 │ │ ├── split.css # 窗格分屏容器与焦点高亮 │ │ └── components.css # 状态栏、搜索条、命令面板与设置弹窗 │ └── js/ │ ├── app.js # 前端总控中枢 │ ├── terminal-view.js # xterm + WebGL + FitAddon 实例管理 │ ├── tab-manager.js # 标签页生命周期 │ ├── split-manager.js # 多窗格分屏树与动态尺寸自适应 │ ├── theme-manager.js # 主题系统与 xterm 颜色映射 │ ├── command-palette.js # 快速命令面板交互 │ └── settings.js # 偏好设置及本地存储 ```