Skip to content

v1.8.33

Choose a tag to compare

@wudream813 wudream813 released this 05 Sep 08:30
· 100 commits to master since this release

v1.8.33 — 新增分屏(split panes,tmux 风格)

在同一个标签页内把终端切成多个同时可见、同时运行的窗格。

✨ 新功能

  • 切分:Ctrl+B - 左右切分,Ctrl+B _(Shift+-)上下切分;新窗格继承同一 shell。
  • 切换焦点:
    • Ctrl+B Tab / Shift+Tab 循环切换窗格;
    • Ctrl+B ↑/↓/←/→ 切到对应方向的相邻窗格(按「重叠优先 + 最近边界」选格,与 tmux 一致);
    • 鼠标点击任意窗格即切换焦点。
  • 调整大小:Ctrl+B Shift+方向 微调分隔线,或鼠标拖拽窗格间的分隔线。
  • 关闭 / 缩放:Ctrl+B q 关闭当前窗格(树自动收缩、兄弟接管焦点);Ctrl+B z 当前窗格全屏缩放 / 还原。Ctrl+B x 仍是关闭整个标签页。
  • 窗格间 1 行/列分隔边框,活动窗格边框高亮(蓝)。

🔧 实现

  • 新增 src/split.c 分屏树(叶子 = pane,内部节点 = 分隔方向 + 百分比);split_layout() 为纯函数(树 + 外接矩形 → 每 pane 矩形),不依赖 Win32,可在 Linux 单测。
  • 渲染按矩形裁剪各 pane;每个 pane 的屏幕缓冲与 ConPTY 经 ResizePseudoConsole 跟随窗格尺寸。
  • 分屏子窗格标记 is_split_child,不单独占标签页;单窗格(未分屏)完全走原整屏路径,行为不变。

✅ 验证

  • 新增 verify_split.py:编译真实 split.c,断言切分/纯布局/边框留白/方向导航的重叠选择/Tab 循环/关闭后树收缩/拖线 frac 等。
  • 单元测试 302 / 0 failed;verify_all.py 33 项全过;MinGW gcc / g++ 双 -Werror。

📦 资产

  • termux.exe(240128 字节),64 位 MinGW 单文件构建。
  • termux.exe.sha256:SHA-256 校验。