2026年9月16日
DESQview 和 WordPerfect,回到终端
介绍 GoblinView 和 Goblin Purrfect:在 Emacs 的 PDF 上方实时编辑公式,让 Kitty 图像在重叠窗口之间正确裁剪。
昨天,我写了等了三十年,终于在终端 Emacs 里把 PDF 和 LaTeX 源码并排放在一起的故事。这个故事还有两部分:我想把它放在哪一种桌面上,以及那个我一直怀念的公式编辑器。
今天介绍 GoblinView,我的 DESQview 风格终端窗口管理器,以及 Goblin Purrfect,我的 WordPerfect 风格文字处理器。两者都是独立实现。下面就是它们在我机器上运行的样子。
前景是氢原子的含时薛定谔方程,展开了三个空间方向的偏导数和库仑势。分数、上标、希腊字母、平方根和随内容伸展的括号,给公式渲染器安排了一项足够实在的工作。后面的 Emacs 把讨论同一个哈密顿量的排版页面放在 LaTeX 源码旁边。
请看 Purrfect 窗口的左边缘:它直接穿过了背景公式。PDF 的可见部分依然留在应有的位置——窗口上方、左侧,以及下方的一条区域。被遮住的部分保持隐藏,Purrfect 则有自己的独立公式图像。
这正是我想用这张截图展示的细节。在终端里绘制公式已经很有用;当另一个终端窗口能盖在它上面,而图像能沿着窗口边缘正确分割显示时,它才真正成为桌面的一部分。
GoblinView:DESQview 的那一部分
GoblinView 把可重叠的终端窗口和持久会话结合起来。我可以移动、调整窗口大小,把另一个窗口提到前面,断开连接,再回来继续使用那些仍在运行的程序。它有鼠标操作,也有键盘菜单。可执行文件名是 goblin-view,使用 C++23 实现。
每个窗口都有独立的终端状态,包括自己的图像。GoblinView 跟踪图像数据及其摆放位置,再合成可见的桌面。它的 Kitty 输出使用 Unicode 占位单元格,因此图像和窗口中的其他内容一样,按单元格参与裁剪。前景窗口可以遮住图像的一部分,同时保留其余部分。
它还支持 Sixel 输入和输出,以及两种图形协议之间的转换。这张截图展示的是 Kitty 路径:Emacs 的 PDF 图像和 Purrfect 单独绘制的公式,共用一个终端桌面。
Goblin Purrfect:WordPerfect 的那一部分
Goblin Purrfect 带回了我记忆中 WordPerfect 5.1 的功能键、公式语言和琥珀色屏幕。可执行文件名是 goblin-purrfect。熟悉的界面下面,是一个用 Rust 编写、原生支持 Unicode 的编辑器。
公式预览在编辑器内部使用真实字体轮廓绘制。输入时预览会更新,无须每次启动 TeX。源码仍然是图像下方可编辑的终端文字;F11 可以在上下布局和左右布局之间切换,鼠标或 Ctrl 加方向键可以移动分隔线。F9 仍然用于刷新预览,F7 则把公式放入文档。
它还支持图像、拼写检查、Markdown 互转和 LaTeX/PDF 导出。PDF 输出使用 LuaLaTeX,PDF 打印预览还需要 Poppler。交互式公式渲染不需要这两者。
WordPerfect 文件兼容性仍不完整。这还是开发中的软件,WP 5.1 和实验性的 WP 6 输出都有已记录的限制。熟悉的操作界面,并不意味着能保证每一份旧文档在任意编辑之后都完整往返。
试用
Homebrew 仓库提供 tap、软件包清单和对应源码:
brew tap goblinreactor/tap https://brew.goblinreactor.com/homebrew-tap.git
brew install goblinreactor/tap/goblin-view goblinreactor/tap/goblin-purrfect
goblin-view
在 GoblinView 的 shell 中运行 goblin-purrfect edit notes.wp。Purrfect 配置页面介绍了可选的 PDF 工具。Linux 配置说明和软件包清单在 Debian/Ubuntu 仓库。
截图中的终端 Emacs 使用 ghostty-tex(英文)。示例文件也可以下载:Purrfect 公式源码、LaTeX 源码和编译后的 PDF。
DESQview 给了我一个同时放下多个程序的地方。WordPerfect 给了我一个能跟上思路的公式编辑器。我想把这些找回来,再加上现代机器能够提供的字体、Unicode、图形和持久会话。这就是它们今天在我桌面上的样子。