本文档概述了 Tabby 如何在不同操作系统上实现平台特定行为和 UI 元素。它涵盖了 Windows、macOS、Linux 和 Web 平台的独特功能和适配。有关通用 Electron 实现的信息,请参阅Electron 实现;有关 Web 特定功能的信息,请参阅Web 实现。
Tabby 通过其 PlatformService 抽象为平台特定功能提供了一致的接口,同时根据检测到的操作系统实现不同的行为。
平台检测通过 tabby-core/src/api/hostApp.ts 中的 Platform 枚举进行,该枚举定义了支持的平台。
来源:tabby-core/src/api/hostApp.ts5-10 tabby-electron/src/services/platform.service.ts26-387 tabby-web/src/platform.ts14-194 tabby-electron/src/services/hostApp.service.ts7-87
Tabby 实现了各种平台特定窗口外观功能,以增强每个受支持操作系统上的用户体验。
Tabby 根据平台以不同方式处理透明度和模糊效果。
每个平台的实现细节
Windows:
DwmEnableBlurBehindWindow 本机函数。macOS:
setVibrancy() 方法。Linux:
来源:app/lib/window.ts186-208 tabby-settings/src/components/windowSettingsTab.component.pug35-85
Tabby 实现了系统原生深色模式支持。
nativeTheme.themeSource)。electron.nativeTheme.shouldUseDarkColors 完成。来源:app/lib/window.ts210-219 tabby-electron/src/services/platform.service.ts290-296
Tabby 为 macOS 实现了特殊的窗口停靠行为。
在 macOS 上,停靠的窗口可以:
Tabby 支持跨平台的不同窗口框架样式:
Windows 还支持自定义标题栏叠加以匹配应用程序主题。
来源:app/lib/window.ts92-101 app/lib/window.ts398-408
Tabby 提供外壳集成,以便从文件系统更方便地启动终端。
外壳集成在以下平台可用:
来源:tabby-electron/src/services/platform.service.ts108-122
Tabby 在不同平台上实现系统托盘功能的方式不同:
字体检测在不同平台上处理方式不同:
fontmanager-redux 库。fc-list 命令以检索等宽字体。来源:tabby-electron/src/services/platform.service.ts160-178
文件操作在 Electron 和 Web 平台上的实现方式不同:
平台特定的主要文件操作功能:
Electron(桌面版):
Web:
来源:tabby-core/src/api/platform.ts65-281 tabby-electron/src/services/platform.service.ts51-386 tabby-web/src/platform.ts111-194
Tabby 包含平台特定的 GPU 处理:
来源:app/lib/app.ts66-76 app/lib/app.ts237-245 tabby-settings/src/components/windowSettingsTab.component.pug416-444
来源:tabby-electron/src/services/platform.service.ts180-193 tabby-web/src/platform.ts70-91
Tabby 的设置 UI 会根据当前平台仅显示相关选项:
| 功能 | Windows | macOS | Linux | Web |
|---|---|---|---|---|
| 鲜艳度/亚克力效果 | ✓ | ✓ | ✓ | ✗ |
| Fluent 背景 | ✓ | ✗ | ✗ | ✗ |
| 窗口框架 | ✓ | ✓ | ✓ | ✗ |
| 隐藏托盘 | ✓ | ✓ | ✗ | ✗ |
| GPU加速 | ✓ | ✓ | ✓ | ✗ |
| Shell 集成 | ✓ | ✓ | ✗ | ✗ |
| 自动更新 | ✓ | ✓ | ✓ | ✗ |
| 关闭前询问 | ✗ | ✗ | ✗ | ✓ |
设置 UI 使用条件渲染,仅显示适合平台的选项。
来源:tabby-settings/src/components/windowSettingsTab.component.pug25-444 tabby-settings/src/components/settingsTab.component.pug82-95
Tabby 为兼容的 MacBook 提供 Touch Bar 支持。
Touch Bar 显示标签页段并用图标指示标签页活动。
来源:app/lib/window.ts155-163 app/lib/window.ts426-432
在 macOS 上,Tabby 实现了遵循平台惯例的原生应用程序菜单。
macOS 菜单包括标准 macOS 特定项,如服务、隐藏/显示选项以及 macOS 键盘快捷键。
来源:app/lib/app.ts247-330 app/lib/index.ts73-82
Tabby 为各种目的与 Windows 注册表交互:
来源:app/lib/app.ts237-245 tabby-electron/src/services/platform.service.ts94-102
Windows 10+ 获得 Fluent Design System 的特殊支持:
来源:app/lib/window.ts191-195 tabby-settings/src/components/windowSettingsTab.component.pug426-444
Linux 的平台特定功能较为有限,但包括:
fc-list 命令进行字体检测。在 Linux 上,Tabby 默认添加 --no-sandbox 标志以提高兼容性。
来源:app/lib/app.ts66-71 tabby-electron/src/services/platform.service.ts168-176 tabby-electron/src/services/hostApp.service.ts76-78
Tabby 的 Web 版本适应浏览器限制:
有关 Web 平台的更多详细信息,请参阅Web 实现。
来源:tabby-web/src/platform.ts14-194
Tabby 使用环境变量来定位配置。
TABBY_CONFIG_DIRECTORY - Directory where config.yaml is stored
TABBY_PLUGINS - Additional plugins to load
如果未指定,配置路径默认为应用程序的用户数据目录。
来源:app/lib/index.ts4-9 app/lib/config.ts7-8
Tabby 实现了跨平台工作的高级文件传输功能:
这些功能适应每个平台的文件系统能力,同时保持一致的界面。
来源:tabby-ssh/src/components/sftpPanel.component.ts32-275 tabby-core/src/directives/dropZone.directive.ts7-47 tabby-terminal/src/features/zmodem.ts12-238