Tabby 修改版:更美观的现代终端

Tabby 修改版:更美观的现代终端

侵权声明:本文为原创技术分享,如有侵权行为,请通过以下方式联系我们下架处理:

  • 邮箱:jzh@879869954@163.com

项目地址

下载地址

目录


为什么给 Tabby 做二次开发

Tabby 是一款基于 Electron + Angular + xterm.js 的开源终端模拟器,跨 Windows / macOS / Linux 三端,原生集成了 SSH 客户端、SFTP、串口终端、分屏、主题等能力,是 PuTTY、iTerm 的强力替代品。日常运维使用中,我们逐渐积累了几个原版难以满足的诉求:

  • 连接 Linux 服务器后,想看 CPU、内存、磁盘、网络负载,得手动敲 topdf -hnload,繁琐且不直观;
  • 终端没有命令自动补全,长命令反复敲,效率低;
  • 日志刷屏时,errorwarning、IP、路径混在一起,一眼看不出重点;
  • SSH 配置一多,没有分组、没有批量导入导出,换机器就要重新配置一遍;
  • 原生界面略显陈旧:标签页、滚动条、窗口边框都不够精致。

核心增强一:SSH 服务器资源监控面板

这是本次改造最核心的功能。连接 SSH 后,窗口右侧会常驻一个服务器监控面板 ,无需额外安装任何远端 Agent,直接通过 SSH exec 通道读取 Linux 的 /proc 文件系统来采集数据。

面板包含五个页签:

页签 监控内容 数据来源
总览 CPU 使用率、内存、磁盘、网络、运行时长、负载 /proc/stat/proc/meminfo/proc/uptime
处理器 各核心使用率与历史曲线(保留 60 个采样点) /proc/stat
内存 总量/已用/可用/缓存,含使用率进度条 /proc/meminfo
磁盘 各挂载点容量与使用率(过滤 tmpfs/overlay) df -P -B1
网络 收发字节、速率(Rx/Tx)、错误计数 /proc/net/dev

实现上有几个值得说明的细节:

  • 零依赖采集 :把多条采集命令拼接成一条 echo "@@TABBY_MON_XXX@@" 分隔的复合命令,一次性 requestExec 取回,再用分隔符切段解析,把 SSH 往返开销降到最低;
  • 3 秒刷新 + 30 秒缓存:面板每 3 秒刷新一次,同时做 30 秒的静态缓存,多开标签页时共享,避免重复采集;
  • 可拖拽调宽:面板宽度支持在 280px~500px 之间拖拽调整,适配不同屏幕;
  • CPU 历史曲线:保留最近 60 个采样点,实时绘制使用率走势。

核心增强二:命令历史候选提示

长时间运维后,很多命令早已记在 shell 历史里,却总要靠 翻找。本次改造为本地与远程终端都加上了命令历史候选提示:输入命令前缀时,下方自动弹出候选面板,回车即可补全。

实现分为两条线:

  • 本地终端 :只读解析本地 shell 历史文件------.bash_history(bash)、.zsh_history(zsh,含 : 时间戳:耗时; 扩展格式)、fish_history(fish 的 YAML 格式)、PowerShell 的 ConsoleHost_history.txt。解析时做了去重、去时间戳前缀,最多索引 2 万行、返回 5 条候选。
  • SSH 远程终端 :通过 SSHCommandSuggestionProvider 读取远端 shell 的历史文件,同样做前缀匹配。

性能与安全上也做了专门处理:历史文件有变化(按 mtime 判断)才重新加载,冷启动预热后每 2 秒增量刷新一次,避免每次按键都卡在文件 IO;且只读不写 ------交互中输入的密码、交互式答案永远不会进入候选,杜绝泄露。

核心增强三:终端语义高亮

原版终端输出只有单调的前景色。这次通过一个规则引擎 semanticHighlighter.ts,在 xterm.js 前端对每一行输出做正则匹配,按优先级给不同语义上色:

语义类型 匹配示例 颜色
错误 fatalerrorfaileddenied
警告 warnwarningdeprecated
成功 successreadyrunningok 绿
信息 info、IP 地址(1.2.3.4
链接/路径 https://.../usr/local/binC:\... 强调色
时间/调试 2024-01-01 12:00:00debugtrace

规则按优先级排序、逐字占用避免重叠,并会自动剔除路径/链接末尾的标点符号。刷日志时,ERROR 会跳出来,路径和时间一眼可辨,排查效率提升明显。

核心增强四:远程目录同步

使用 SFTP 面板传输文件时,最烦的是面板目录和终端当前目录不一致。本次改造加入了远程目录同步 :终端 cd 到哪里,SFTP 面板就自动跟随到哪里。

实现原理很轻量------通过 remoteCWDIntegration.service.ts 探测远端 shell(bash/zsh),向 .bashrc.zshrc 注入一段带标记的 PROMPT_COMMAND / precmd hook,通过 OSC 1337(\033]1337;CurrentDir=...)把当前工作目录上报回来。注入块用 # >>> Tabby CurrentDir v1 >>># <<< Tabby CurrentDir v1 <<< 包裹,可安全地重复写入或清除,文件写入采用「临时文件 + rename」的原子方式,避免损坏原有配置。

首次打开 SFTP 时,会弹窗询问是「仅本次启用」还是「永久写入配置」,用户可随时取消。

核心增强五:SSH 配置导入导出与分组管理

当主机数量多起来,配置管理就成了刚需。本次改造新增了SSH 配置的 CSV 导入导出,并把主机选择器改造成了带搜索、分组、折叠的分组管理界面。

CSV 导入导出profileTransfer.ts):

  • 支持 主机名称、协议、主机地址、端口、用户名、认证方式、分组 等字段;
  • 导出时密码、私钥、私钥密码走加密 Vault 存储,不落明文;
  • 导入时自动按「主机地址 + 端口 + 用户名」去重,跳过已存在主机并统计跳过数;
  • 分组列可自动创建多级分组(按路径 A/B/C 建树)。

分组管理profileSelectorModal):

  • 主机按分组树展示,支持折叠/展开(折叠状态持久化到本地);
  • 顶部搜索框按名称、描述、分组路径、类型实时过滤;
  • 独立的「最近使用」「全部主机」视图,以及快速连接入口。

界面优化:从细节打磨到窗口重构

除了功能,这次还系统性地重做了界面,让整体观感从「能用」走向「精致」。以下为本次界面优化的要点:

窗口与标题栏

  • 弃用 Windows 原生 WCO(Window Controls Overlay)覆盖层,改用自绘 WindowControlsComponent,在 thin/full 框架模式下渲染统一的最小化/最大化/关闭按钮;
  • 窗口支持 8px 圆角(rounded-window),最大化/全屏时自动切回直角,避免圆角遮挡。

标签页

  • 标签由生硬的矩形改为圆角胶囊样式(7px 圆角),激活态用半透明前景色描边高亮,视觉层次更清晰;
  • 标签默认宽度由 200px 收窄到 180px,同屏可容纳更多标签;
  • 新增连接状态指示灯:绿点表示已连接、红点表示已断开,分屏标签也能继承聚焦子标签的状态;
  • 支持 displayTitle 自定义标题,与系统标题解耦。

滚动条

  • 全局滚动条宽度由 10px 收窄到 5px,两端圆角,视觉更轻盈。

设置页响应式

  • 引入 CSS @container 容器查询,设置表单在宽屏下左右排布、窄屏下自动竖排,适配不同窗口宽度。

文件传输面板

  • 由原来的下拉菜单重构为居中悬浮面板 :半透明遮罩 + 毛玻璃(backdrop-filter: blur(10px)),传输进行时按钮底部带一条流动的「跑马灯」动画(marching-ants),直观提示传输状态。

右键菜单

  • 重构为独立的 ContextMenuService + ContextMenuComponent,菜单项按权重分组,低频项收进「More」子菜单,主菜单更清爽。

终端工具栏

  • 优化 pointer-events,悬浮工具栏不再遮挡点击区域。

原版 vs 二开版功能对比

能力 原版 Tabby 二开版
SSH 服务器监控 无,需手动敲命令 右侧常驻面板,CPU/内存/磁盘/网络/总览,3s 刷新
命令历史补全 本地 4 类 shell + SSH 远程自动补全
语义高亮 错误/警告/成功/URL/路径/IP/时间着色
远程目录同步 需要在.bashrc中手动设置 SFTP 跟随终端 cwd,自动注入 hook
配置导入导出 无 CSV CSV 导入导出,密码/私钥加密,分组映射
分组管理 平铺列表 分组树 + 搜索 + 折叠 + 最近使用
窗口标题栏 原生 WCO 自绘控件 + 8px 圆角
标签页 矩形 200px 圆角胶囊 180px + 连接状态灯
相关推荐
茶本无香4 小时前
Java调用Shell脚本执行SQL数据库操作:从入门到实战
java·sql·shell
柒号华仔2 天前
「速通Shell」织线为面,Shell条件测试和判断
shell
苏灿烤鱼4 天前
把 Agent 做成一家公司,真比通用提示词好用吗?
python·agent·shell
寺中人4 天前
Linux 基础命令入门实战教程:从零掌握常用操作,新手快速上手
linux·运维·服务器·shell·linux 命令·linux 基础教程·linux 入门
k4m7v2pz7 天前
34 天 33 个版本:rvs(rust-verb-shell)如何用版本号对抗 AI 误判
rust·shell·命令行工具·ai agent·系统信息·跨平台开发
笨笨狗吞噬者7 天前
IRIS: shell 中的智能实时输入提示工具
github·shell
Lyra_Infra10 天前
Java 应用启动脚本 JDK 路径适配优化文档
java·shell
寒水馨12 天前
macOS下载、安装PowerShell-v7.6.4(附安装包powershell-7.6.4-osx-arm64.pkg)
macos·自动化·跨平台·shell·脚本·命令行·powershell
爱码少年13 天前
一条Shell命令实现文件目录服务器间快速转移
服务器·shell