本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容: 我的帖子已经打上 开源推广 标签: 是 我的开源项目完整开源,无未开源部分: 是 我的开源项目已链接认可 LINUX DO 社区: 是 我帖子内的项目介绍,AI生成、润色内容部分已截图发出: 是 以上选择我承诺是永久有效的,接受社区和佬友监督: 是 以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出 试着回想这个让人心梗的瞬间:你随手把终端关掉,或者电脑被迫重启了。 上一秒你以为彻底灰飞烟灭的那些输出,在重新打开终端时,居然整整齐齐地码在屏幕上,中间还隔着一行醒目的提示: 以上为上次会话恢复的历史记录 这道分界线往上,是你关掉之前 tail -f 飞速滚过的几屏日志;分界线往下,是一个干干净净、刚启动好的 shell 提示符。不仅文字都在,连整个窗口、三个标签页、左右分屏的比例,全都原封不动地回来了。 在同类终端 Ghostty 的社区论坛里,有位刚从 Warp 搬家过来的开发者专门问过这事。2026 年 6 月 3 日,Ghostty 团队成员 jcollie 出来给了句大实话: Ghostty can recreate the structure of windows/tabs/splits on macOS, but does not save or restore the contents of terminals. 意思很直白:在 macOS 上,窗口、标签和分屏的“骨架”能替你搭回来,但终端里跑过的输出内容这副“肉身”,抱歉,直接蒸发。虽然他第二天又补了一句,说 Ghostty 将来的某一天(“someday”)会支持会话恢复,但架不住大家望眼欲穿——在同一个讨论区里,呼吁「会话管理」的那个帖子( #3358 )狂揽 682 票,在全部 6132 个讨论里稳稳霸榜第一。 这种痛,天天写代码的人多半懂:每天雷打不动开着同一套标签,一个跑 dev server,一个盯实时日志,还有一个敲 git 和 vim。一旦电脑被迫重启,你就得像个无情的打字机器,挨个手动 cd 进目录、一条条把命令重新跑起来。最要命的是,刚才那几屏极其关键的报错现场,也随着终端一关彻底人间蒸发。 这篇文章,就是专门写给被这个问题折磨过的人的。 Polter 是一款在 Mac 和 Windows 上都能跑的终端。底层直接用了 Ghostty 那一套渲染、字体排版和 VT 解析,手感非常顺滑(需要先说明的是:它不是 Ghostty 官方出品的项目,两者没有隶属关系)。 今天咱们就专挑开发者最关心的三件事来聊: 会话管理、图形化的设置窗口、能被别的程序调用的可编程接口 。放心,这三样功能纯粹是为了日常干活打造的,完全不需要你碰任何 AI。 不过在聊痛快之前,必须先把最要紧的底线交代清楚: 布局、目录、命令历史和回滚日志(每一格默认存 10 MB)能存下来,但正在跑的进程本身存不下来。 这三件事里,会话管理是重头戏。 一、 会话管理:社区真正要的,其实是按项目分开 聊会话管理前,咱们得先对齐一下概念:不同人嘴里的“会话管理”,指的往往根本不是一码事。 2026 年 5 月,Ghostty 讨论区 #12571 的发帖人把大家的心声拆得极其透彻:他就想要在一个窗口里,通过命令行或命令面板新建、列出、切换会话,一个 git 仓库就对应一套独立的工作区。他还特意写了一句大实话: I don’t care about session resurrection (though nice-to-have), but I do care about project isolation. 正在跑的进程能不能复活?他其实没那么在乎。他真正在乎的,是能 按项目把工作区彻底隔开 ,想切哪个随时切回去。遗憾的是,那条帖子底下,一位 Ghostty 成员坦白回复:据他了解,会话以及更多脚本能力,目前还没排进维护团队的优先列表。 而在 Polter 里,这个击中痛点的概念就叫「项目」。 所谓一个「项目」,其实就是一张完整的工作现场快照:你开了几个窗口,每个窗口里塞了哪些标签,每个标签又切成了怎样的左右上下分屏。存下来,把项目关掉;下次想用时,整套现场一键拉起。 怎么存,怎么取 我们用一套普通的命令行布局来演示。一个窗口,整整齐齐三个标签: 第一个标签叫「web」,切成左右分屏:左边挂着 python3 -m http.server 8123 ,右边挂着 tail -f logs/app.log 盯日志; 第二个标签叫「repo」:敲过 git log ,刚用 vim 改完一个文件; 第三个标签叫「notes」:零零散散跑了几条命令。 想要把这套现场打包带走,入口就在标签的右键菜单里:点一下「另存为项目…」,起个名字(比如叫 shop-web)。 弹出的对话框会把本窗口的每一页都列出来,每页一个勾选框,默认只勾当前这一页。想让「web」「repo」「notes」三个标签进同一个项目,就把三页都勾上。 只要存过一次,你的大脑就再也不用惦记着保存。界面上的原话是: 存下以后,这几页的布局一变就自动存回这个项目,不用再点保存。 点开以后是这样一个对话框,三个标签都勾上了: 还有另一条路:右键标签,选「加入项目 ▸ shop-web」,也能把一页加进已有的项目。 现在可以放心把项目关掉:用菜单里的「项目 → 关闭项目」。(注意:窗口左上角那个红色的关闭按钮只关当前这一页。当然,你也可以干脆彻底退出 Polter。) 下次想要开工时,从菜单里打开「加载项目…」,在列表里挑中它: 一眨眼,昔日的工作现场全都回来了。 每个窗口和它当初在屏幕上的位置、每一个标签、分屏的方向和比例,全回来了;更贴心的是,每一格各自对应的工作目录、按键盘上箭头就能翻出来的命令历史,以及最重要的—— 每一格的历史回滚内容,全都在老地方等着你。 所谓“回滚”,就是你用鼠标往上滚屏时看到的那些旧输出。新起点和旧时光之间,横着的就是开头那行分界线。有一点要留意:恢复之后画面停在最底下,旧输出一多,就要往上滚一下才看得到那条分界线。 但 dev server 没有在跑 仔细看看截图 S5 里「web」左边那一格:上半部分清清楚楚印着上次打印的日志,最底下却是一个刚起好的空白提示符——服务并没有在后台跑着。 为什么每一格恢复回来的,都是一个全新的 shell,而不是把旧终端的所有状态原模原样照搬回来? Polter 的设计文档给出了非常实在的解释:旧会话里留下的终端模式、备用屏、颜色搭配和鼠标上报事件,本质上服务的都是一个已经死掉、不在了的旧程序。要是全盘硬搬,新 shell 搞不好就直接撞进旧 vim 遗留的备用屏里,整个屏幕瞬间错位乱套。所以恢复时的策略非常讲究: 只搬主屏的内容和光标位置,剩下的所有终端模式,一律规规矩矩全部复位。 搞懂了这个底层逻辑,你就得知道这两件事: 跑着的东西要顺手重跑一遍 。好在命令历史跟着一起穿越了回来:把光标挪到那一格,伸手按一下上箭头就是 python3 -m http.server 8123 ,接着按回车就行。 全屏交互程序的画面回不来 。关掉时如果正开着 vim、htop、less 这些霸占整个屏幕的程序,恢复后是看不到它们当时那一屏画面的,只能看到你当初敲命令进入它们之前的输出。 想要「关掉终端窗口,进程还在后台接着跑」,那是 tmux、zellij 这类工具的老本行:它们靠后台驻留的 server 保住会话,窗口关了照样活蹦乱跳。但它们的 server 也是个普通进程,电脑一重启,server 跟着没了,会话也就没了,想把布局找回来还得另外装插件。 Polter 管的正好是这一段:哪怕电脑重启,布局、目录、命令历史和回滚都还在,只是进程要你自己重新跑一遍。所以这两边不是二选一,而是互补,在 Polter 的格子里照样能跑 tmux,叠着用最顺手。 断电和崩溃,会丢多少数据? 如果软件非要等你规规矩矩点“退出”才存一次盘,那遇上强制重启、意外断电、软件崩溃,所有东西瞬间打水漂——因为这几种意外根本不会给你留下“退出”那一刻。 Polter 采用的是“边跑边往硬盘写”的办法,掌控这套机制的有两项关键配置: project-scrollback-autosave-interval :默认 5 秒。项目里的每一格终端,每隔 5 秒就会往盘里写一次。而且它很聪明,只写新增的历史和当前这一屏,没有新输出的格子绝不瞎写。哪怕遭遇崩溃或突遭断电,最坏的情况,丢掉的也就是这 5 秒内的输出。 project-scrollback-limit-bytes :每一格最多存多大的内容,默认是 10 MB;直接设成 0 就是完全不存。 10 MB 放在终端里到底能装多少东西?配置说明里备了一张按标准 80 列宽度估算的粗算表: 密集纯文本 约 120,000 行 带颜色的 git log --stat 约 100,000 行 带颜色的 git log -p 约 65,000 行 每行带颜色和中日韩宽字符的输出 约 25,000 行 要是输出实在太多撑爆了上限,它会丢掉最旧的内容,把最近的输出死死守住。而且它没有任何自作主张的过期时间:哪怕某个项目扔了几个月没打开,重新载入时,当初留在那里的依然原封未动。 自动保存把误关也存进去了,怎么办 全自动保存也有个代价:假设你不小心手滑误关了三格,它也会毫不犹豫地立刻存盘。 为了不让你当场抓狂,Polter 的解法是留下一份「上一版」。只要自动保存检测到布局变了,或者你用某个标签覆盖了项目,系统都会悄悄封存一份上一版快照。一旦手滑,到设置窗口的「项目」栏里就能轻松找回来。 不过需要说明,这份上一版保的只是“布局骨架”。回滚内容本身是没有所谓“上一版”的:设计文档的说法很实在,追加写进来的内容丢不了,但主动删掉关掉的那些输出确实找不回来;毕竟每格上限 10 MB,留两代就是 20 MB,没必要把空间浪费在这里。 此外,还有几处客观上管不到的死角,提前说明白: Kitty 协议画的图存不下来 :恢复之后图片不会重现,只留下原先占着的那块空白。 Windows 上没存成项目的普通窗口 :如果没顺手存为项目,重启后仅仅恢复窗口位置,里头的标签和分屏全都不回来。 Linux 现状 :目前 Linux 版既没有项目功能,也没有现成的安装包。 二、 设置窗口:图形界面改的,还是那个配置文件 上游怎么想 Ghostty 原生依赖的是一份纯文本配置文件。关于图形化设置界面的讨论( #2354 ),早在 2023 年 9 月就开贴讨论了,作者 Mitchell Hashimoto 当天就表了态: I think a graphical preference window is desirable. Its something I’d like to see. But that doesn’t mean doing away with the text-based config, either! 他的意思很清楚:图形化的偏好设置窗口他确实想要,但这绝不意味着要把纯文本配置给革掉。在 2026 年 3 月发布的 Ghostty 1.3 中,路线图把「graphical preferences」列进了 1.4 的工作,不过紧接着也谨慎写着「I don’t want to promise any specific features」。截至 10 月 18 日,1.4 版本依然还在打磨。 Polter 现在有什么 不用再苦苦等待了。在 Mac 上按 ⌘, ,或者在 Windows 上按 Ctrl+, ,弹出来的就是一个正经的设置窗口,而不是冷冰冰的文本文件。 整个窗口条理清晰地分成了四栏:角色、项目、插件、通用。平时改动最频繁的项都规整收纳在「通用」里,做成了直观的图形表单:包含外观、字体、终端、窗口与标签等足足十一组。拨动开关或者切换下拉菜单立马实时生效,根本不用四处找保存按钮。 Windows 上的设置窗口长这样: 要是懒得一层层翻找,左上角的搜索框能直接精准定位,打中文也搜得到,比如敲入「字号」两字就能立刻跳到字号栏。 改完以后,配置文件还能手改吗 完全能。图形表单并不是另起炉灶搞第二套规则,而是 老老实实写回你的那份纯文本配置文件 : 文件里原有的项 :精准原地替换新值。你原先保留的缩进、等号两边的空格习惯统统保持原样。 文件里以前没有的项 :直接追加到文件末尾的一个专属块里,头部清晰标注着 # --- 由 Polter 设置窗口写入,可以手改 --- 。 防翻车机制 :每次软件启动后、第一次动笔写入文件之前,会先贴心地把原文件备份为 <配置文件>.polter-bak 。 在设置窗口里把字号改成 15,写进去的就是默认配置文件 config.polter : 有意思的是,这种做法和 Ghostty 官方的规划正好背道而驰。Mitchell 曾给未来的 GUI 立过规矩:“The GUI should not modify any user text configuration files.” 两种路线各有取舍。Polter 选的这条路,让配置从始至终只有一个权威源头,不会出现两套配置互相打架的情况。不过代价也摆在台面上:如果你的配置文件放在 git 仓库里管着,用表单调几下设置, git diff 里立马就会多出改动记录。 三、 可编程接口:别的程序能读你的终端,也能往里打字 Ghostty 社区里关于「Scripting API」(脚本化 API)的讨论( #2353 ),斩获了 200 多票,高居整个讨论区第五。 其实上游并非什么都没给。Ghostty 1.3 在 macOS 上专门加了 AppleScript 支持,能够操控窗口并往终端里输送文字,但这只是一项预览功能。至于更通用的跨平台脚本接口,Mitchell 讲得很透彻:核心难点在于终端天生不是 server 架构,且有安全顾虑;他不反对做,只是“工作量很大”。 更现实的壁垒在于:AppleScript 是 Mac 独享的特权,而 Ghostty 官方目前的预编译包也仅限 macOS。 Polter 给了什么 Polter 另辟蹊径: 在每一个终端内部直接内置了一个 MCP(Model Context Protocol)接口。 你可以把它想象成终端对外递出的一整排遥控器按钮。


  • 情报分类:硬件与数码
  • 分类依据:内容涉及硬件、数码产品或通信卡
  • 信息来源:服务器 / LINUX DO - 最新话题
  • 发布时间:2026/10/18 23:11:39