2026年9月11日
如果当年胜出的是终端?
Goblin Mosh、GoblinView 和 Goblin Purrfect 既是实用的终端工具,也是一场实验:假如 Windows 从未成为主流,计算机会是什么样子?
最近,我一直在做三个终端项目:Goblin Mosh、GoblinView 和 Goblin Purrfect。
乍看起来,这可能像是一场大费周章的重返 1989 年计划。
确实有那么一点。我怀念 WordPerfect 5.1,怀念输入公式的速度几乎能跟上教授在黑板上书写的感觉。Hercules 显示器和 IBM P75 上的等离子显示屏,也都留下了美好的回忆。琥珀色至今仍然很适合计算机。
但这里其实有两个目标。
第一个很实际:做一个现代、实用、能承载现代终端功能的 Mosh 版本,再做一个终端窗口管理器,既有 tmux 那样持久保留会话的能力,又有重叠窗口,并且能正确处理图形和输入。我希望本地终端提供的功能,在应用运行于远程机器或终端复用器内部时,依然有用。
第二个是一个问题:
假如 Windows 从未流行起来,终端始终是计算机世界的主角,今天会是什么样子?
不是说计算机的发展停在了 1989 年。而是说,终端软件一直在演进。
我们仍然会有 Unicode、高分辨率显示器、好字体、鼠标、图像、高速处理器和网络。有意思的问题是:如果终端始终是我们使用这些东西的主要场所,应用程序会长成什么样?
这三个项目,就是我通过构建自己真正想用的软件,来探索这个问题的尝试。
Goblin Mosh:保留连接,也把功能带过来
Mosh 已经有一个非常好的核心思想:远程会话应该能承受不可靠的网络连接,打字也不应该等着数据绕过半个地球再回来。它的网络漫游、预测式本地回显,以及屏幕状态同步,都值得保留。
Goblin Mosh 是我的分支。目标是保留这些优点,同时让这条连接能够胜任现代终端应用的需要。
现代终端早已不只是把字符放进固定网格。kitty 协议扩展涵盖图形、更丰富的键盘事件、文字尺寸、剪贴板操作、拖放等功能。这些能力需要穿过应用程序与显示它的终端之间的各层工具。
对 Mosh 来说,这不是把每条转义序列原样转发过去就行。Mosh 同步的是状态。因此,图像及其放置位置,也必须成为两端都能理解的状态。
Goblin Mosh 的静态 Kitty 图形传输就是这样做的:移动一张已有的图像,不需要重新发送它的像素。更广泛的工作还包括现代输入与剪贴板处理、终端原生滚动,以及跨连接的图形支持。Kitty 和 Sixel 都属于这套设计,能力需要协商,不能凭空假定。
带宽也是设计的一部分。Goblin Mosh 增加了压缩,以及带有前向纠错的后台文件传输——通过冗余数据帮助恢复丢失的数据包。键盘输入和屏幕更新的优先级高于大批量传输。它的双栏文件浏览器让我不必离开会话就能移动文件。
如果我正通过一条糟糕的连接编辑文档,下载 PDF 不应该让键盘停止响应。卫星链路会把这种取舍体现得格外明显,但繁忙的 Wi-Fi 同样受益于这种做法。
我想让远程计算少一点“远程”的感觉。少发不必要的字节,也是其中的一部分。
GoblinView:终端里的桌面
GoblinView 的可执行文件叫 goblin-view。
可以把它想成 tmux 的持久会话,加上一个类似 DESQview 的桌面:带边框、可以重叠的终端窗口,能够选择、移动、调整大小和置于最前方。有键盘菜单,也有鼠标交互。分离会话后,程序继续运行;重新连接后,桌面就回来了。
这些不是操作系统的窗口,而是终端里面的窗口。
当桌面位于另一台机器上时,这种区别就很重要。我希望在程序运行的地方安排好工作,把它留在那里,再从另一条连接回来。
有了图形,事情就不只是给几个命令行窗口画上边框。每个窗口都有自己的终端状态和图形状态。图像属于某个窗口:它必须随窗口移动,在窗口边缘被裁剪,被另一个窗口盖住时也要正确遮挡。重绘一些文字,不应该意外擦掉一条毫不相关的公式。
GoblinView 已经有 Kitty 和 Sixel 的解码与输出实现,也能在两者之间转换。应用程序可以用一种协议绘图,外层终端则使用另一种。键盘事件、剪贴板回复、鼠标坐标,以及其他终端请求,也都必须到达正确的窗口。
这就是项目实际目标的缩影:终端复用器不应该成为那些实用终端功能消失的地方。
它也体现了那个平行历史的设想。以终端为中心的世界,依然可以有窗口、图像和鼠标。只是这些东西会围绕终端应用和持久会话来组织。
Goblin Purrfect:让桌面有点正事可做
连接和窗口管理器都是基础设施。我还想要一个应用,让这场实验真正值得使用。
Goblin Purrfect 是我独立重新实现的一款受 WordPerfect 启发的文字处理软件。可执行文件叫 goblin-purrfect。
重点在于肌肉记忆:功能键、模态命令、公式编辑器,以及双手留在键盘上、文档逐渐成形的感觉。
它不是在模拟器里运行的一份 DOS 程序。核心原生使用 Unicode,编辑器会随终端调整大小。它有鼠标选择、剪贴板集成、Aspell 拼写检查、图像、Markdown 互转,以及 LaTeX/PDF 输出。WP 字符集应该放在文件读写边界处理,而不是位于程序的中心。超出旧字符集范围的文字,需要明确定义的扩展;老版本 WordPerfect 不会凭空理解它们。
公式编辑器尤其带有我的个人偏好。我想输入紧凑的公式语言,并且立即看到结果。交互预览的解析和绘制都在 Rust 编辑器内部完成,不会每敲一个键就启动一个 TeX 进程。TeX 在 PDF 打印流程里承担另一项工作。
预览使用真实的字体轮廓,以及测量得到的终端字符单元和窗口尺寸。公式会缩放并居中显示在可用区域内。优先使用 Kitty,Sixel 是另一条绘制途径;如果两种图形协议都不可用,就用 Unicode 盲文点阵作为后备显示。
既然你有一块漂亮的高分辨率显示器,公式就应该好好利用它。我喜欢老式键盘界面,并不意味着我要求满屏粗大的像素块。
不过,普通文档页面依然使用终端文字。字体测量结果决定换行和分页估算,但编辑画面并不追求像素级的所见即所得。公式和图像使用图形,段落还是段落。真正的 PDF 打印预览,是一个独立的模式。
这样,普通编辑仍然只是更新文字的问题。在 Kitty 下,一条没有变化的公式可以保留已有图像数据,只改变放置位置。输入一句话,不应该要求重绘并传输一整页光栅图像。
WP 文件兼容性是项目的重要部分,但还没有完成。能够原样保存未经编辑的文件,不等于已经证明每一份修改过的文档都能被原版 WordPerfect 正确打开。WP 5.1 和实验性的 WP 6 输出都有明确记录的限制。请保留备份;这是开发中的软件,不是在宣称完美的文件往返兼容性。
旧界面是起点,不是要求保留旧机器限制的命令。
一场实验,三个可以独立使用的部分
设想中的组合很直接:打开一个功能足够的终端,用 Goblin Mosh 连接,接入 GoblinView,然后在 Goblin Purrfect 里工作,旁边放着命令行和其他终端程序。
每一部分也应该能单独发挥作用。想要更好的远程连接,不必先需要我的文字处理软件。想要持久保留、彼此重叠的终端窗口,不必先有远程连接。喜欢键盘驱动的公式编辑器,也不需要前两者。
大量工作都藏在衔接处。某个功能直接在 Kitty 中可用,并不能证明它穿过终端复用器、经过一条有丢包的连接、调整过窗口大小,再从另一种终端重新接入后,仍然可用。“支持现代终端”是前进方向,不是承诺每一种协议组合都已经完成。
Debian/Ubuntu 软件仓库和 Homebrew 软件仓库提供软件包、对应源代码和配置说明。实际可用的平台与版本,请查看各自的软件包清单。
Goblin Purrfect 和当前的 GoblinView 源代码采用 Apache-2.0。Goblin Mosh 作为 Mosh 的衍生项目,仍采用 GPL-3.0-or-later。附带的字体、输入法词典和其他第三方材料保留各自的许可证与声明。
我并不是想证明 Windows 本来就不该出现。我好奇的是:如果终端应用始终处于日常计算的中心,我们可能会走上一条什么样的路,以及那条路上是否还有一些部分,今天仍然值得去走。
一个有良好排版、实用图形、持久窗口,并且能容忍糟糕网络的终端,听起来完全值得在里面待上一整天。
最好是琥珀色的。