本文档概述了 Tabby 的内部架构,重点介绍代码组织方式、引导过程以及核心组件之间的关系。有关窗口处理等特定区域的详细信息,请参阅窗口管理;有关插件系统详细信息,请参阅插件架构。
Tabby 遵循典型的 Electron 应用程序结构,采用主进程和渲染进程架构。
主进程负责窗口创建和系统集成,而渲染进程则托管 Angular 应用程序。这些进程之间的通信通过 Electron 的 IPC 机制进行。
来源:app/src/entry.ts app/src/plugins.ts
引导过程始于主进程向渲染器发送带有引导数据的“start”事件。
entry.ts 中的入口点处理此过程。
findPlugins() 发现可用插件。loadPlugins() 加载这些插件。来源:app/src/entry.ts34-55 app/src/entry.ts57-84
插件是 Tabby 架构的核心。插件加载系统的工作方式如下:
插件发现过程:
initModuleLookup() 设置 Node.js 模块查找路径。tabby-plugin 或 tabby-builtin-pluginterminus-plugin 或 terminus-builtin-plugin来源:app/src/plugins.ts68-93 app/src/plugins.ts190-226 app/src/plugins.ts228-262
Angular 应用程序围绕 tabby-core/src/index.ts 中定义的核心模块 (AppModule) 构建。
核心 Angular 模块提供:
| 组件 | 描述 |
|---|---|
| AppRootComponent | 协调 UI 的根组件 |
| TabBodyComponent | 渲染每个标签页的内容 |
| TabHeaderComponent | 渲染标签页的标题栏 |
| SplitTabComponent | 管理标签页内的分割窗格 |
| TitleBarComponent | 渲染自定义窗口标题栏 |
| 服务 | 目的 |
|---|---|
| AppService | 用于标签页和应用程序管理的中心服务 |
| ConfigService | 处理配置的加载和保存 |
| HotkeysService | 管理键盘快捷键 |
| TabsService | 创建和管理标签页实例 |
| ProfilesService | 管理连接配置文件 |
来源:tabby-core/src/index.ts1-40 tabby-core/src/index.ts87-148 tabby-core/src/index.ts149-259
AppService 是 Tabby 的中心管理服务,负责处理标签页、窗口状态和应用程序生命周期。
AppService 管理:
来源:tabby-core/src/services/app.service.ts48-121 tabby-core/src/services/app.service.ts122-159 tabby-core/src/services/app.service.ts170-234
Tabby 的标签页系统围绕组件层级构建。
此层级支持:
来源:tabby-core/src/services/app.service.ts174-201 tabby-core/src/services/app.service.ts340-396
Tabby 使用在 tabby-core/src/hotkeys.ts 中定义的一个广泛的热键系统。核心热键包括:
| 热键类型 | 描述 |
|---|---|
| 标签页导航 | 下一个标签页、上一个标签页、按数字选择特定标签页 |
| 标签页管理 | 关闭标签页、重命名标签页、复制标签页 |
| 分割管理 | 沿不同方向分割、在分割之间导航 |
| 应用程序 | 切换全屏、显示命令选择器 |
AppHotkeyProvider 定义了这些热键并为配置文件动态生成额外的热键。
平台特定的默认热键绑定在每个操作系统的 YAML 文件中定义。
来源:tabby-core/src/hotkeys.ts8-285 tabby-core/src/configDefaults.windows.yaml1-102 tabby-core/src/configDefaults.macos.yaml1-99 tabby-core/src/configDefaults.linux.yaml1-101
标签页上下文菜单由各种提供程序提供的项目生成。
每个提供程序都实现 TabContextMenuItemProvider 并通过 getItems() 方法提供菜单项。菜单系统包括:
来源:tabby-core/src/tabContextMenu.ts20-97 tabby-core/src/tabContextMenu.ts100-163 tabby-core/src/tabContextMenu.ts166-235
Tabby 的应用程序结构遵循模块化的 Electron-Angular 架构。
这种模块化架构使 Tabby 既功能强大又可扩展,同时保持组件之间清晰的关注点分离。