菜单

平台特定功能

相关源文件

本文档概述了 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:

    • Windows 10+:使用“亚克力”(Fluent Design)或“模糊背景”效果。
    • 旧版 Windows:使用 DwmEnableBlurBehindWindow 本机函数。
    • 可以选择在拖动窗口时禁用鲜艳度以防止卡顿。
  • macOS:

    • 使用带有平台特定类型的本机 setVibrancy() 方法。
    • 根据 macOS 版本采用不同的鲜艳度类型(10.14+ 为 fullscreen-ui,旧版本为 dark)。
  • Linux:

    • 设置透明背景色和模糊效果。

来源:app/lib/window.ts186-208 tabby-settings/src/components/windowSettingsTab.component.pug35-85

暗模式支持

Tabby 实现了系统原生深色模式支持。

  • macOS:利用原生主题切换(nativeTheme.themeSource)。
  • Windows/Linux:主题检测通过 electron.nativeTheme.shouldUseDarkColors 完成。

来源:app/lib/window.ts210-219 tabby-electron/src/services/platform.service.ts290-296

平台特定窗口管理

Dock 行为 (macOS)

Tabby 为 macOS 实现了特殊的窗口停靠行为。

在 macOS 上,停靠的窗口可以:

  • 在 Dock 中隐藏应用程序
  • 保持在其他窗口的顶部
  • 在所有工作区可见
  • 禁用全屏功能

来源:app/lib/window.ts280-309

窗口控件

Tabby 支持跨平台的不同窗口框架样式:

  • 原生框架:使用操作系统的标准窗口装饰。
  • 薄框架:自定义的最小窗口框架。
  • 全框架:自定义的完整窗口框架。

Windows 还支持自定义标题栏叠加以匹配应用程序主题。

来源:app/lib/window.ts92-101 app/lib/window.ts398-408

系统集成

Shell 集成

Tabby 提供外壳集成,以便从文件系统更方便地启动终端。

外壳集成在以下平台可用:

  • Windows:向资源管理器添加上下文菜单项。
  • macOS:提供服务菜单集成。
  • Linux:目前不支持。

来源:tabby-electron/src/services/platform.service.ts108-122

托盘和系统菜单

Tabby 在不同平台上实现系统托盘功能的方式不同:

  • macOS:使用针对菜单栏优化的模板图像。
  • Windows:标准托盘图标和上下文菜单。
  • Linux:未实现托盘支持。

来源:app/lib/app.ts185-217

字体管理

字体检测在不同平台上处理方式不同:

  • Windows/macOS:使用 fontmanager-redux 库。
  • Linux:执行 fc-list 命令以检索等宽字体。
  • Web:返回空数组(无字体检测)。

来源:tabby-electron/src/services/platform.service.ts160-178

文件操作

文件上传和下载

文件操作在 Electron 和 Web 平台上的实现方式不同:

平台特定的主要文件操作功能:

  • Electron(桌面版):

    • 利用原生文件系统 API。
    • 文件传输期间防止系统休眠。
    • 支持目录上传/下载。
    • 用于选择文件的原生文件对话框。
  • Web:

    • 使用浏览器的 File API。
    • 通过创建临时链接并触发点击进行下载。
    • 有限的目录支持(取决于浏览器功能)。

来源:tabby-core/src/api/platform.ts65-281 tabby-electron/src/services/platform.service.ts51-386 tabby-web/src/platform.ts111-194

性能优化

GPU加速

Tabby 包含平台特定的 GPU 处理:

  • Linux:针对透明度进行特殊处理(禁用硬件加速)。
  • Windows:通过注册表强制使用独立 GPU 的选项。
  • 所有平台:用于故障排除的禁用 GPU 加速选项。

来源:app/lib/app.ts66-76 app/lib/app.ts237-245 tabby-settings/src/components/windowSettingsTab.component.pug416-444

上下文菜单实现

  • Electron:使用 Electron 的原生菜单 API。
  • Web:使用 Vaadin 的 web 组件实现上下文菜单。

来源:tabby-electron/src/services/platform.service.ts180-193 tabby-web/src/platform.ts70-91

平台特定配置选项

Tabby 的设置 UI 会根据当前平台仅显示相关选项:

功能WindowsmacOSLinuxWeb
鲜艳度/亚克力效果
Fluent 背景
窗口框架
隐藏托盘
GPU加速
Shell 集成
自动更新
关闭前询问

设置 UI 使用条件渲染,仅显示适合平台的选项。

来源:tabby-settings/src/components/windowSettingsTab.component.pug25-444 tabby-settings/src/components/settingsTab.component.pug82-95

MacOS 特定功能

Touch Bar 支持

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

Windows 特有功能

注册表集成

Tabby 为各种目的与 Windows 注册表交互:

  1. GPU 首选项:设置图形首选项以使用独立 GPU。
  2. 应用程序检测:检测已安装的应用程序,如 WinSCP。

来源:app/lib/app.ts237-245 tabby-electron/src/services/platform.service.ts94-102

Fluent Design 支持

Windows 10+ 获得 Fluent Design System 的特殊支持:

  • 亚克力材质:半透明模糊窗口背景。
  • Fluent 背景选项:实验性 Windows 10 背景样式。

来源:app/lib/window.ts191-195 tabby-settings/src/components/windowSettingsTab.component.pug426-444

Linux 特定功能

Linux 的平台特定功能较为有限,但包括:

  • 支持合成器的透明窗口背景。
  • 使用 fc-list 命令进行字体检测。
  • 对透明度与 GPU 加速的特殊处理。

在 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

Web 平台适配

Tabby 的 Web 版本适应浏览器限制:

  • 无原生文件系统访问(使用浏览器 File API)。
  • 使用 web 组件代替原生菜单作为上下文菜单。
  • 更简单的主题检测(无操作系统集成)。
  • 通过 HTML 锚点元素实现下载。

有关 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 实现了跨平台工作的高级文件传输功能:

  1. SFTP 面板:用于 SSH 连接的文件浏览和传输界面。
  2. 拖放:支持通过拖放上传文件。
  3. ZModem 协议:基于终端的文件传输协议。

这些功能适应每个平台的文件系统能力,同时保持一致的界面。

来源:tabby-ssh/src/components/sftpPanel.component.ts32-275 tabby-core/src/directives/dropZone.directive.ts7-47 tabby-terminal/src/features/zmodem.ts12-238