加载失败
原帖设想“终端的未来”并列出若干愿望清单,引发评论围绕可行性、兼容性和已有方案的展开讨论。评论者把讨论拉回到已有成熟平台(如 Emacs、Acme)、终端协议实现细节(PTY、OSC 133)与结构化 I/O 的现实可行性(JSON‑RPC、文件描述符、二进制格式等)。同时有人列出实际原型和工具(Arcan、Shelter、ghostty、Terminal.click、Polyglot Notebooks、Pluto.jl、fzf、iTerm2 imgcat),并就如何以低摩擦方式打包分发(Doom Emacs、Docker)以及是否应保持终端简洁与向后兼容提出强烈分歧。总体讨论既涉及理论重构(对象化 API、REPL/REBL、notebook 风格),也紧贴工程实现与迁移成本的现实考量。
大量评论指出 Emacs、Acme、Smalltalk 等成熟编辑器/环境已经覆盖了文章想做的很多功能:Emacs 提供一个 Lisp VM、buffers、tiling windows、Eshell、vterm 和 Org-mode/org-babel,能把笔记本式工作流、图像、OCR 与外部命令无缝结合。用 Elisp 编写的应用通常具有 UI 无关性——同一份代码既能在纯终端也能在 GUI 中运行,这一点是许多评论者反复强调的关键优势。有人以实际流程举例(把 PDF OCR、gptel、字典和语法分析串在一起),并提到 Doom Emacs 能作为“开箱可用”打包方式;但也有声音提醒把 Emacs 当成终端来卖的难点在于配置与分发门槛,而不是技术不可达成。
[来源1] [来源2] [来源3] [来源4] [来源5] [来源6] [来源7]
多人建议为伪终端(PTY)增加“out‑of‑band”侧信道,用 JSON‑RPC 或协议编号在主通道之外做能力协商与结构化数据交换,从而逐步兼容升级。讨论细化到实现细节:有人提出由内核返回支持协议的魔数字段并打开侧信道,也有人建议通过环境变量暴露 Unix domain socket 或在 stderr/stdout 约定 JSON 与文本分层。关于数据格式争论激烈——支持者认为 JSON 足够人可读且易于集成,反对者指出 JSON 对二进制、字符集和流式场景不友好并建议 DER/SDSER 等二进制方案;同时还有为兼容性和权限传递而考虑的多文件描述符或 SCM_CREDENTIALS/SCM_RIGHTS 方案。OSC 133 等现有 escape 码也被提为较不侵入的实际落地路径。
[来源1] [来源2] [来源3] [来源4] [来源5] [来源6] [来源7] [来源8]
不少评论强调终端之所以经久不衰,是因为其简单、可脚本化且与海量遗留工具互通,任何过度扩展都可能破坏这种可组合性。反对者警告,往 VT220/CSI 码随意加特性会在旧设备和嵌入式环境里导致输出垃圾化,维护和迁移成本巨大;他们主张把富交互留给 Jupyter 或浏览器,而让终端保持轻量与可编程性。也有人承认可以改进,但认为这需要从第一性原则重构并准备承担长期兼容迁移成本,否则“别把终端变成新的大一统平台”。
[来源1] [来源2] [来源3] [来源4] [来源5] [来源6]
评论中列举了多个已有或正在开发的替代/补充方案:Arcan(针对 TUI 的新协议与渲染栈)和 Shelter(提供可重现操作与类似 git 的文件系统分支)被多次点名为文章遗漏的现成方案。还有 ghostty、Terminal.click、libghostty、以及把命令行后端转成 Jupyter kernel 的 Polyglot Notebooks,Pluto.jl 被作为 reactive notebook 的实例;实用工具层面 fzf、iTerm2 的 imgcat 与 iTerm2 的会话持久化也被反复称赞为已经能显著改进体验的组件。总体观点是有大量原型和工具,但缺乏统一标准与跨平台采纳的道路。
[来源1] [来源2] [来源3] [来源4] [来源5] [来源6] [来源7] [来源8]
很多评论认为与其扩展终端协议,不如把工作流围绕 REPL/notebook 与编辑器集成来组织:Emacs 的 org-babel、REPL/REBL 概念和 Pluto.jl 展示了把代码块、依赖与可视化结合的成熟做法。Polyglot Notebooks 把命令行后端当作 kernel 的思路可减少大量 UI 开发工作,但 Jupyter 在运维/部署上存在痛点,容易变成难以生产化的工作负载。实操改进建议包括把 shell 历史作为补全来源(Atuin 提供类似实现)或为 shell 提供 LSP 风格的补全与历史搜索。
有人提出终端未来应以对象/API 为中心而非纯文本:输出变成可发现的对象与方法集合(PowerShell 就是接近的例子),客户端负责渲染与组合,从而避免上千种不兼容 CLI DSL。反对者指出这会把 shell 推向“编程语言”层面,需要记忆 API 与对象结构,且可能削弱基于文本的交互式可组合性。还有观点认为现代 Web 浏览器天然适合呈现富媒体与交互,可能比扩展 VT220 更现实,但这也带来巨大生态与信任的中间人风险。
多个评论把焦点放在“能否低摩擦地采用”上:只靠一堆插件和复杂配置无法说服普通用户,作者和设计者需要把工作打包为可重复分发的产物(Docker 容器、self‑extracting binary、或一键安装脚本)。Doom Emacs 被举为能把复杂配置简化为几条命令的示例,而许多用户因为缺失标准补全或不可预测行为(如 Warp 的问题)而直接放弃。结论是:创新必须伴随可复制的安装流程与与遗留系统的逐步兼容策略,否则难以获得广泛采纳。
Emacs: Emacs:一个以 Emacs Lisp 为扩展语言的高度可定制文本编辑器/平台,提供 buffers、窗口管理、Eshell、vterm、Org-mode/org-babel 等,可作为交互式编程环境或替代终端的工作空间。
PTY(pseudoterminal): PTY(pseudoterminal,伪终端):Unix/Linux 用来模拟终端设备的接口,终端模拟器通过 pty 与后端 shell/进程通信,讨论里提到为 pty 增设侧信道以传输结构化元数据或能力协商。
OSC 133: OSC 133:一种扩展的终端 escape(Operating System Command)序列,用于在现有终端协议上发送元数据或内联信息(如图像);被提为一种较不侵入的落地手段。
JSON‑RPC 侧信道: JSON‑RPC 侧信道:提议在 pty 或新增文件描述符上使用 JSON‑RPC 风格的消息进行能力协商与结构化 I/O 的传输;评论中围绕该方案的可行性、格式优劣(JSON vs 二进制编码)展开讨论。
Arcan: Arcan:一个尝试替代传统终端/TUI 协议的项目与渲染栈(Arcan‑fe),旨在为文本与图形化终端应用提供更现代的通信与渲染能力,评论者认为该项目在文章中被忽略。
Notebook(Jupyter / Polyglot Notebooks / Pluto.jl): Notebook:交互式文档环境的总称,Jupyter、Polyglot Notebooks(把命令行后端包装为 kernel)与 Pluto.jl(Julia 的 reactive notebook)都把代码、文档与可视化结合,被视为替代或补充传统终端的方案。