菜单

终端用户界面组件

相关源文件

此页面详细介绍了构成 Tabby 终端显示的用户界面组件。这些组件负责渲染终端内容、处理用户交互以及提供终端特定的 UI 功能,例如搜索功能和视觉自定义。有关底层终端引擎的信息,请参阅终端引擎

1. 终端 UI 组件架构

Tabby 的终端 UI 是使用 Angular 组件和专用终端渲染库的组合构建的。该架构在终端显示逻辑和底层会话处理之间实现了清晰的分离。

来源: tabby-terminal/src/api/baseTerminalTab.component.ts1-919 tabby-terminal/src/frontends/frontend.ts1-97 tabby-terminal/src/frontends/xtermFrontend.ts1-522

2. BaseTerminalTabComponent

BaseTerminalTabComponent 是 Tabby 中终端 UI 的基础。它充当不同类型终端选项卡的基类,并管理终端实例的生命周期、处理用户交互以及协调终端前端和会话后端。

BaseTerminalTabComponent 的主要功能

  1. 终端前端管理:初始化并管理终端前端(xterm.js)
  2. 会话处理:连接并管理与终端会话的通信
  3. 用户输入处理:处理键盘事件、剪贴板操作和鼠标交互
  4. 视觉自定义:管理终端外观,包括字体、颜色和缩放
  5. 工具栏控件:提供一个包含终端特定操作的工具栏

来源: tabby-terminal/src/api/baseTerminalTab.component.ts24-919

3. 前端实现

Frontend 抽象类定义了终端前端的接口,它们负责实际的终端内容渲染。Tabby 提供两种主要实现:

  1. XTermFrontend:使用 xterm.js 的基于画布的渲染器
  2. XTermWebGLFrontend:用于更好性能的 WebGL 加速渲染器

前端实现负责:

  • 终端渲染和显示
  • 用户输入捕获
  • 终端调整大小和适应容器
  • 文本选择和剪贴板操作
  • 滚动和视口管理
  • 搜索功能
  • 用于选项卡恢复的终端状态序列化

来源: tabby-terminal/src/frontends/frontend.ts1-97 tabby-terminal/src/frontends/xtermFrontend.ts61-522

4. 搜索面板组件

搜索面板提供终端内的文本搜索功能。

搜索面板支持:

  • 正则表达式搜索
  • 区分大小写
  • 全词匹配
  • 增量搜索
  • 结果高亮
  • 搜索结果之间的导航

来源: tabby-terminal/src/components/searchPanel.component.ts1-79 tabby-terminal/src/components/searchPanel.component.pug1-66 tabby-terminal/src/components/searchPanel.component.scss1-29

5. 终端 UI 元素

5.1. 终端显示

终端显示是渲染终端内容的主要区域。它由 xterm.js 库处理,该库通过XTermFrontendXTermWebGLFrontend 类集成。

终端显示功能包括:

  • 使用自定义字体和连字支持进行文本渲染
  • 颜色方案应用
  • 光标样式(块状、下划线或光束,可选闪烁)
  • 选择处理
  • 回滚缓冲区
  • 视觉响铃效果
  • 图像支持(通过 Sixel)

终端的外观可通过设置进行高度自定义。

设置描述配置属性
字体终端字体系列terminal.font
字体大小文本大小(像素)terminal.fontSize
行内边距行之间的额外空间terminal.linePadding
字体粗细正常文本的粗细terminal.fontWeight
粗体字体粗细粗体文本的粗细terminal.fontWeightBold
连字字体连字支持terminal.ligatures
光标形状块状、光束状或下划线terminal.cursor
光标闪烁启用光标闪烁terminal.cursorBlink
配色方案终端颜色terminal.colorScheme
背景终端背景源terminal.background

来源: tabby-terminal/src/frontends/xtermFrontend.ts61-516 tabby-terminal/src/components/appearanceSettingsTab.component.pug1-182 tabby-terminal/src/config.ts1-216

5.2. 终端工具栏

终端选项卡可以选择性地显示一个包含常用操作的工具栏。工具栏可以:

  • 隐藏(默认)
  • 在鼠标悬停在终端顶部附近时可见
  • 固定在顶部

工具栏的可见性通过以下方式控制:

工具栏由BaseTerminalTabComponent 管理,具有以下属性:

  • enableToolbar:是否启用工具栏
  • pinToolbar:工具栏是否永久可见
  • revealToolbar:工具栏是否临时显示

来源: tabby-terminal/src/api/baseTerminalTab.component.ts82-88 tabby-terminal/src/api/baseTerminalTab.component.ts779-791

6. 用户交互

6.1. 键盘处理

终端捕获并处理键盘输入,并对以下内容进行特殊处理:

终端支持广泛的键盘快捷键。

类别快捷键描述
剪贴板复制、粘贴、全选文本选择和剪贴板操作
导航Home、End、单词导航终端中的光标定位
编辑删除单词、删除行文本编辑操作
视图缩放(放大/缩小)、重置缩放终端字体大小调整
滚动滚动到顶部/底部、翻页向上/向下导航终端缓冲区
搜索搜索打开搜索面板
高级广播输入将输入发送到多个终端

来源: tabby-terminal/src/hotkeys.ts1-124 tabby-terminal/src/api/baseTerminalTab.component.ts213-326 tabby-terminal/src/frontends/xtermFrontend.ts144-217

6.2. 鼠标交互

终端支持多种鼠标操作:

  1. 文本选择:单击并拖动以选择文本
  2. 上下文菜单:右键单击以显示上下文菜单
  3. 粘贴:中间单击以粘贴(可配置)
  4. 选择时复制:自动复制选定的文本(可配置)
  5. Alt+滚轮:Alt 键配合滚轮以发送向上/向下键事件

右键单击行为是可配置的,选项包括:

  • off:禁用右键单击处理
  • menu:显示上下文菜单
  • paste:粘贴剪贴板内容
  • clipboard:复制选择,或在没有选择时粘贴

来源: tabby-terminal/src/api/baseTerminalTab.component.ts651-744 tabby-terminal/src/components/terminalSettingsTab.component.pug67-102

7. 视觉自定义

7.1. 颜色方案

终端外观主要通过颜色方案控制,该方案定义了:

  • 前景色和背景色
  • 16 种 ANSI 颜色(8 种标准 + 8 种亮色)
  • 光标颜色
  • 选择颜色

可以使用ColorSchemePreviewComponent 预览颜色方案。

预览组件显示了使用选定颜色方案的真实终端视图。

来源: tabby-terminal/src/components/colorSchemePreview.component.pug1-67 tabby-terminal/src/frontends/xtermFrontend.ts368-389

7.2. 终端动画

终端包含多种动画以增强用户体验

  1. 工具栏动画:终端工具栏的滑入/滑出动画
  2. 搜索面板动画:搜索面板的滑入/滑出动画
  3. 视觉提示音:触发终端提示音时出现的震动动画

这些动画是使用 Angular 的动画系统定义的

来源: tabby-terminal/src/api/baseTerminalTab.component.ts28-65 tabby-terminal/src/frontends/xtermFrontend.ts343-349

8. 终端设置

Tabby 通过配置属性提供广泛的终端外观和行为设置

8.1. 渲染设置

设置描述默认
前端终端渲染器 (WebGL 或 Canvas)'xterm-webgl'
滚动回溯缓冲区中保留的行数25000
用亮色绘制粗体文本使用亮色显示粗体文本true
Sixel 图形支持通过转义序列显示图像true

8.2. 输入/输出设置

设置描述默认
Alt 是 Meta 键将 Alt 键用作 Meta 键false
输入时滚动用户输入时滚动到底部true
括号粘贴将粘贴内容包装在转义序列中发送true
粘贴时修剪空格移除粘贴文本周围的空格true
提示音终端提示音行为 (关闭、视觉、听觉)'off'

来源: tabby-terminal/src/components/terminalSettingsTab.component.pug1-238 tabby-terminal/src/config.ts6-216

9. 与核心组件的集成

终端 UI 组件与 Tabby 的核心基础设施集成

值得注意的集成点

  1. 拆分标签页:终端标签页可以是拆分标签页布局的一部分
  2. 配置:终端设置存储在全局配置中
  3. 快捷键:终端特定的快捷键已注册到快捷键服务
  4. 平台服务:终端使用特定于平台的特性(剪贴板、文件对话框等)
  5. 配置文件系统:终端的外观可以为每个配置文件进行配置

来源: tabby-terminal/src/api/baseTerminalTab.component.ts114-129 tabby-terminal/src/api/baseTerminalTab.component.ts191-208