让你的终端工作流更上一层楼 —— 在同一个标签页内水平或垂直分割终端,无需开多个窗口或标签。

为什么需要分屏?

作为开发者或运维工程师,我们经常需要同时查看多个终端:一边跑 tail -f 看日志,一边敲命令;一边 SSH 到远程服务器,一边在本地操作;一边 docker logs,一边 docker exec 进容器调试。

传统做法是开多个终端窗口或者多个标签页,然后频繁地 Ctrl+Tab 切来切去。屏幕就那么大,标签页多了找不到,窗口多了又乱。

分屏(Split Pane)是解决这个问题的经典方案 —— 终端模拟器领域的"老牌选手" tmux 和 iTerm2 早就证明了它的价值。现在,GNOME 生态中最现代的终端模拟器 Ptyxis 也正式迎来了这个功能。

功能一览

上下/左右分屏

  • 水平分割(上下)Ctrl+Shift+D —— 将当前终端分为上下两个 pane
  • 垂直分割(左右)Ctrl+Shift+R —— 将当前终端分为左右两个 pane
  • 分屏可以无限嵌套:你可以在右半屏里再水平分割,形成一个 2×2 的工作区

智能焦点切换

  • Alt + 方向键 在 pane 之间快速切换焦点
  • 基于几何位置智能查找最近 pane —— Alt+Right 会跳到右边那个 pane,而不是简单的 tab 顺序切换
  • 非聚焦的 pane 会自动轻微变暗(opacity 降低),让你一眼就能看出哪个终端是活动的

贴心的关闭逻辑

  • Close Pane 快捷键:多 pane 时关闭当前 pane,仅剩一个 pane 时自动关闭整个标签页
  • 鼠标右键菜单同样提供 Split / Close Pane 选项
  • 所有快捷键均可在 Preferences → Shortcuts 中自定义

无缝继承上下文

新创建的 pane 会自动继承当前 pane 的:

  • 工作目录(cwd)—— 不用再 cd 回去
  • 容器环境(container)—— 如果你在 podman 容器里,新 pane 也在同一个容器
  • 终端配置(字体大小、配色方案、scrollback 行数等)

技术实现亮点

分屏功能基于 GTK4 的 GtkPaned 组件实现,每个 pane 拥有独立的 PtyxisTerminalAdwBannerGCancellable,确保:

  • 各 pane 的进程生命周期独立管理,关闭一个 pane 不会影响其他
  • 异步操作(spawn / wait)通过 GCancellable 安全取消,避免 use-after-free
  • 主终端的 agent 轮询和通知系统与次级 pane 正确隔离
  • 焦点切换通过 GtkEventControllerFocusnotify::contains-focus 信号驱动,并同步活动 pane 的状态到 tab 级别(标题、命令行、进程信息等)

试用

本项目基于 Ptyxis 的 split-pane 分支开发,源码位于:

https://github.com/liyingjun/ptyxis/tree/split-pane

详细的编译构建步骤请参考仓库中的 BUILD_AND_INSTALL.md


Ptyxis 是 GNOME 生态中基于 GTK4 + libadwaita 构建的现代终端模拟器,由 Christian Hergert 开发。本项目为其增加了分屏能力。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐