架构技术评论

面向 Vibe Coding 的终端 Liney 发布 Windows 试用版本

Image

几个月前,我开发了一个 macOS 上的终端程序。这几个月里,我自己以及很多网友一直在使用,其间我们也进行了很多的 Bug 修复和新功能添加。下面这篇文章是之前发布的,欢迎大家查看。Liney: 面向 Vibe Coding 的Terminal 发布啦,提高你的并行开发效率

最近又开发了一个 Windows 版本的 Liney。今天就介绍一下这个 Windows 版本。

Liney Windows版本把多个仓库、worktree、分屏、标签放进同一个窗口,是 macOS 上liney 的 Windows 版。终端内核用的是 Ghostty 的
libghostty-vt,UI 全部用 Win32 + Direct2D 自绘。

仓库:https://github.com/everettjf/liney-win ·  许可:Apache-2.0

liney-win 总览

左边是 WORKSPACE 侧边栏:扫描到的 git 仓库、SSH 主机、agent 会话,每一项都有图标;
中间是终端;右边是 文件树,它会跟着你 shell 的当前目录走(图里刚 cd src,右侧立刻
变成了 src/ 的内容)。右上角那个 ☰ 是菜单按钮。

它是怎么来的

最早有的是 macOS 版的 liney。当初做它的原因很简单:我自己平时要在好几个 worktree、好几个项目之间来回切,普通终端不停 cd、不停开窗口实在太碎,于是干脆把「多仓库 + 多 worktree +多分屏」塞进同一个窗口,先把自己每天的效率提上来。用下来确实顺手,做多分支并行开发时尤其明显。

后来陆续有网友反馈说这工具挺好用,问能不能出个 Windows 版。但 macOS 版整套是 Ghostty + Swift 搭起来的,Windows 的技术栈完全是另一回事,没法直接搬,当时就先搁着了。真正把 Windows 版提上日程,是因为最近我自己也要在 Windows 上做一些开发。

Windows 上虽然有 Windows Terminal,但它本质还是「标签页 + 分屏」的终端,没有「工作区」这层抽象:仓库/worktree 侧边栏、跟随 cwd 的文件树、每仓库图标、布局持久化……这些都没有。

正好最近 /goal 这个功能挺火,Ghostty 也跟着支持了Windows,我顺手调研了一圈,最后没有照搬 macOS 版那条路,而是换了一套更贴合 Windows 的方案,从零自绘出了第一个版本——欢迎试用。具体的几个选型:

  • UI
    :Win32 窗口 + Direct2D/DirectWrite 全自绘(没有 XAML、没有 WinUI),启动快、依赖少;
  • 终端内核
    :不重复造 VT 解析的轮子,直接用 Ghostty 的 libghostty-vt——和上游 liney 同一个引擎;
  • shell 通道
    :Windows 原生的 ConPTY 伪控制台。

核心特性

🗂️ 工作区:仓库、worktree、SSH、agent

侧边栏自动扫描目录下的 git 仓库,展开能看到各个 git worktree,点一下就在那个目录开一个新标签。每个项目可以有自己的图标(配置指定,或仓库里放个 icon.png 自动识别);没图标的用一个带色的文件夹占位。SSH 主机、agent 会话也各有图标,一键打开。

项目管理做进了 UI:WORKSPACE 标题旁的 + 选个文件夹就能加项目;右键项目有「新建 worktree / 设置图标 / 从工作区移除」,改动会写回配置。

🔲 分屏:Alt+D / Shift+Alt+D

分屏

二叉分屏,拖分隔条调比例、拖标签重排、Alt+方向键 切焦点。上图是「左边一个、右边上下两个」的三分屏,每个 pane 各自一个 shell、各自的目录。

  • Alt+D —— 并排分屏(左右)
  • Shift+Alt+D —— 堆叠分屏(上下)

🧰 原生菜单(不是自绘按钮)

右上角原来是三个自绘小图标,实在看不清是啥,后来改成一个 ☰ 按钮 + 原生 Windows 菜单:

顶部菜单

带文字标签、带勾选状态、带快捷键提示——清清楚楚。标签页也加了右键菜单:

标签右键菜单

「新建标签 / 在资源管理器打开 / 复制路径 / 关闭标签」。

还有一堆顺手的东西

  • Unix 命令
    :装了 Git for Windows 后,ls / cat / grep / sed / awk 在任意 shell 都能用(自动把 Git 的 usr\bin 接进 PATH);
  • Git
    :Ctrl+Shift+L/G 直接开 git log / git diff;
  • 防止电脑睡眠
    :Ctrl+Shift+K,跑长任务时别让屏幕/系统休眠;
  • 布局持久化
    :标签 + 分屏树 + 各 pane 的目录,下次启动原样恢复;
  • 自动更新
    :Ctrl+Shift+U 查 GitHub release 自动装新版;
  • scrollback 滚动、reflow、选择复制粘贴、IME、配色主题……该有的都有。

技术架构

键盘/鼠标 → Window(工作区编排)→ 路由到聚焦 pane
            ↑ 合成 sidebar · 标签栏 · 分屏树 · 文件面板 · ☰ 菜单
TerminalSession = Terminal + ConPty + Grid
   ConPty      —— Windows 伪控制台(起 shell、读/写、resize)
   Terminal    —— 封装 libghostty-vt(Ghostty 的 VT 引擎):PTY 字节 → 渲染快照 → Grid
   D2DRenderer —— Direct2D/DirectWrite 把 Grid + 界面画到窗口

纯 C++20 + Win32 + Direct2D,除了 libghostty-vt 没有第三方运行时依赖。

坑:让 libghostty 在 Windows 上编出来

libghostty-vt 的那套嵌入 C API 只在 Ghostty 的 main 分支有,而 main 在 build.zig.zon里死钉 Zig 0.15.2(0.16 会被直接拒)。换上 0.15.2 后,zig build 却在构建器里直接panic:

assert(!std.fs.path.isAbsolute(child_cwd_rel))   // Zig 标准库 std/Build/Step/Run.zig

排查下来,根因很「Windows」:Ghostty 的构建里有个 Run 步骤要跑一个已安装的可执行文件,它的路径是带盘符的绝对路径(D:\…)。Zig 想把它转成「相对子进程 cwd 的路径」,而当源码盘符(D:)和 Zig 全局缓存盘符(默认在 C:)不一样时,std.fs.path.relative()跨盘没法相对化,会回吐一个绝对路径,直接触发断言。不用改 Zig 的可移植解法:把 Zig 全局缓存指到和构建同一个盘——

$env:ZIG_GLOBAL_CACHE_DIR = "$PWD\build\zig-global-cache"

同盘之后 relative() 正常,官方未打补丁的 Zig 0.15.2 就能编过。这一步已经写进tools/build.ps1,贡献者照着 CONTRIBUTING.md 跑就行。

怎么用

直接下载(不用装环境):到 https://github.com/everettjf/liney-win/releases 拿

  • liney-win-setup.exe
     —— 安装包(每用户、免管理员、带开始菜单 + 卸载)
  • liney-win-portable.zip
     —— 便携版,解压双击即用(已含 ghostty-vt.dll)

从源码构建(需要 MSVC + Zig 0.15.2):

# 在 "x64 Native Tools Command Prompt for VS 2022" 里,且 zig 0.15.2 在 PATH
powershell -ExecutionPolicy Bypass -File tools\build.ps1
.\build\liney_win.exe

首次构建会拉 Ghostty 并编 libghostty-vt,稍慢;ghostty-vt.dll 会自动拷到 exe 旁边。

常用快捷键

键
作用
Ctrl+Shift+T
 / Ctrl+Shift+W
新建标签 / 关闭当前 pane
Alt+D
 / Shift+Alt+D
左右分屏 / 上下分屏
Alt+方向键
在分屏间切焦点
Ctrl+Shift+B
 / Ctrl+Shift+F
切换左侧边栏 / 右侧文件树
Ctrl+Shift+C
 / Ctrl+Shift+V
复制 / 粘贴
Ctrl+Shift+L
 / Ctrl+Shift+G
当前仓库 git log / git diff
Ctrl+Shift+K
 / Ctrl+Shift+U
防睡眠 / 检查更新

后续计划

这只是个开始。接下来一段时间,我自己会同时在 macOS 和 Windows 上做开发,这两个版本也就都会是我每天在用的工具——用的过程中碰到什么问题就顺手解决掉,效率上的痛点也会一点点磨平。两边一起优化,应该能越用越顺手。

结语

liney-win 是「Windows 一直没有的那个多仓库、多 pane 驾驶舱」:全部从零自绘,启动快、依赖少,终端内核直接复用 Ghostty。目前是 v0.1.0,已经能日常试用。

仓库地址:https://github.com/everettjf/liney-win —— 欢迎试用、提 issue、发 PR,也欢迎加微信群来交流。当然,现在这个 Windows 版本还是一个非常初级的试用版,肯定还有很多 bug,未来会边用边修复。

Image