Tabby 配置系统负责管理、存储和同步应用程序中的用户设置。本文档描述了该系统的架构和功能,包括配置数据的加载、访问、修改和保存方式。该系统还提供了配置默认值、加密以及Tabby不同实例之间同步的机制。
有关用户配置文件管理的信息,请参见配置文件管理。有关插件特定配置的信息,请参见插件架构。
配置系统由多个核心组件协同工作,以提供强大的配置管理解决方案。
来源:tabby-core/src/services/config.service.ts117-493 tabby-core/src/configDefaults.yaml1-63
ConfigService是管理配置生命周期的主要服务。它负责从磁盘加载配置、应用默认值、跟踪更改和保存更新后的配置。
主要职责
来源:tabby-core/src/services/config.service.ts117-493
ConfigProxy是一个专门的类,它包装原始配置对象,并提供对配置值的透明访问,在需要时应用默认值。它使用递归方法来处理嵌套配置对象。
主要功能
来源:tabby-core/src/services/config.service.ts34-115
配置以YAML格式存储,这提供了一种人类可读的格式,如有需要,可轻松手动编辑。文件只包含与默认值不同的值,以使其简洁。
关键方面:
来源:tabby-core/src/services/config.service.ts191-233
默认配置在configDefaults.yaml中定义,涵盖应用程序的各个方面。
主要配置部分包括
accessibility:动画和辅助功能设置appearance:用户界面外观设置(主题、不透明度、框架样式等)terminal:终端特定设置hotkeys:键盘快捷键profiles:连接配置文件groups:配置文件组一些配置条目标记为__nonStructural,这会影响它们如何被ConfigProxy处理。
来源:tabby-core/src/configDefaults.yaml1-63
下图说明了配置生命周期,从初始化到保存更改
来源:tabby-core/src/services/config.service.ts191-214 tabby-core/src/services/config.service.ts272-286
应用程序启动时,配置会被加载和初始化
ConfigService被构建并从配置提供者实例化默认值PlatformService从磁盘加载ConfigProxy来包装配置对象ready$可观察对象完成,表示配置已准备就绪来源:tabby-core/src/services/config.service.ts141-155 tabby-core/src/services/config.service.ts272-286
配置值通过config.store属性访问,该属性是ConfigProxy实例
当访问属性时
ConfigProxy.__getValue()ConfigProxy.__getDefault()返回默认值来源:tabby-core/src/services/config.service.ts67-79
通过在config.store属性上设置值来修改配置
当设置属性时
ConfigProxy.__setValue()config.save()之前,更改不会持久化来源:tabby-core/src/services/config.service.ts85-91
对配置的更改使用save()方法保存
保存过程
PlatformService保存到磁盘changed事件来源:tabby-core/src/services/config.service.ts203-214
配置系统包含一个迁移机制,用于处理不同配置版本之间的更改。这确保了当用户升级到新版本的Tabby时,他们现有的配置会适当更新为新格式。
迁移在ConfigService的migrate()方法中定义,并根据配置中存储的版本号按顺序应用。
来源:tabby-core/src/services/config.service.ts288-416
对于敏感数据,配置系统支持使用VaultService进行加密。启用加密时
vault属性中encrypted标志和configSync设置等最少元数据保持未加密这为SSH密钥和凭据等敏感数据提供了额外的安全层。
来源:tabby-core/src/services/config.service.ts419-492
配置系统与ConfigSyncService集成,允许在不同设备之间同步配置
主要功能
来源:tabby-settings/src/services/configSync.service.ts1-202 tabby-settings/src/components/configSyncSettingsTab.component.ts1-148
配置系统通过ConfigProvider接口支持与插件集成。每个插件都可以
这使得插件能够与配置系统无缝集成,同时保持清晰的分离。
来源:tabby-core/src/services/config.service.ts156-169
配置系统与设置UI组件紧密集成,允许用户通过图形界面查看和修改配置。
主要设置组件
settingsTab.component:带有通用应用程序设置的主设置选项卡windowSettingsTab.component:窗口外观和行为设置configSyncSettingsTab.component:配置同步的用户界面这些组件直接绑定到config.store上的属性,并在更改时调用config.save()。
来源:tabby-settings/src/components/settingsTab.component.pug1-183 tabby-settings/src/components/windowSettingsTab.component.pug1-444 tabby-settings/src/components/configSyncSettingsTab.component.pug1-141
插件开发者可以通过实现ConfigProvider接口来定义配置默认值
组件可以使用changed$可观察对象订阅配置更改
对于依赖于配置的组件,可以使用ready$可观察对象
Tabby 配置系统为管理应用程序设置提供了强大的基础,支持默认值、迁移、加密和同步。它与UI和插件架构的集成使其成为Tabby应用程序的核心组件。
对于使用Tabby的开发者来说,了解配置系统对于正确存储和检索设置以及在整个应用程序生命周期中响应配置更改至关重要。