菜单

应用程序结构

相关源文件

本文档概述了 Tabby 的内部架构,重点介绍代码组织方式、引导过程以及核心组件之间的关系。有关窗口处理等特定区域的详细信息,请参阅窗口管理;有关插件系统详细信息,请参阅插件架构

基于 Electron 的架构

Tabby 遵循典型的 Electron 应用程序结构,采用主进程和渲染进程架构。

主进程负责窗口创建和系统集成,而渲染进程则托管 Angular 应用程序。这些进程之间的通信通过 Electron 的 IPC 机制进行。

来源:app/src/entry.ts app/src/plugins.ts

应用程序引导

引导过程始于主进程向渲染器发送带有引导数据的“start”事件。

entry.ts 中的入口点处理此过程。

  1. 它从主进程接收引导数据。
  2. 它为插件初始化模块查找路径。
  3. 它使用 findPlugins() 发现可用插件。
  4. 它使用 loadPlugins() 加载这些插件。
  5. 它创建并引导 Angular 应用程序。

来源:app/src/entry.ts34-55 app/src/entry.ts57-84

插件加载系统

插件是 Tabby 架构的核心。插件加载系统的工作方式如下:

插件发现过程:

  1. 使用 initModuleLookup() 设置 Node.js 模块查找路径。
  2. 扫描内置和用户插件目录。
  3. 通过插件的 package.json 中的关键字识别插件:
    • tabby-plugintabby-builtin-plugin
    • 旧版:terminus-pluginterminus-builtin-plugin
  4. 通过引用每个插件的主模块来加载插件。
  5. 将插件的 Angular 模块集成到主应用程序中。

来源:app/src/plugins.ts68-93 app/src/plugins.ts190-226 app/src/plugins.ts228-262

Angular 应用程序核心

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 架构。

  1. Electron 框架:主进程创建窗口,渲染进程托管 Angular 应用程序。
  2. Angular 核心:AppModule 提供核心组件、服务和提供程序接口。
  3. 插件系统:动态发现和加载插件以扩展功能。
  4. 标签页管理:灵活的系统,支持带分割窗格的标签页界面。
  5. 服务架构:中央 AppService 协调应用程序状态和操作。
  6. 扩展点:插件可以提供新的标签页、上下文菜单项、热键和配置选项。

这种模块化架构使 Tabby 既功能强大又可扩展,同时保持组件之间清晰的关注点分离。