工作原理,逐个部分讲解
一条规则支撑起整个程序:窗口的状态存在内存中,配置存在文件里。下面的一切都是从这条规则推导出来的。
贯穿始终的规则
一个窗口容纳标签页。一个标签页容纳区块。区块可以是终端、正在编辑的文件、文件面板、网页、图片、PDF、Markdown 页面、diff、系统监视器、设置界面,或者某个附加组件的面板。它们可以向任意方向嵌套拆分,用同一套规则拖动、调整大小和关闭,而不是每有一个新功能就多一套规则。太大而不适合分给所有人的东西,以来自 vobuda 自己目录的附加组件提供,目前是 Design 和 Director,一键整体安装、整体移除。
这种布局不会存储在数据库里,因为根本没有数据库。窗口当下的状态存在内存中,你做出的决定存在文件里。这就是为什么按钮、快捷键、菜单栏、Cmd+K 和命令行都会按名称调用同一个动作,也是为什么想让它表现不同,几乎总是意味着去编辑 JSON。
这也是为什么,对于它所服务的这类工作而言,Mac 上最好的终端模拟器应该是一个你可以随时查看内部的程序。只要有一项设置存在,就一定有一行文件保存着它。只要有一个动作存在,就一定有一个名字可以调用它。
通向同一个动作的五种方式
动作这么多,一个程序的大部分其实是藏起来的。Cmd+K 回答的是“它能做什么”,而不是“做这件事”。
-
它是在教你用快捷键,而不是取代快捷键
每一行都会显示自己的快捷键。一个人为同一个动作打开两次列表,第三次就已经记住那个快捷键了。
-
它不是第五本字典
每一行都是按名称运行一个动作,和其他四种方式完全一样。有一项检查会将它所展示的表格与核心程序中可绑定的动作列表进行双向比对:只要有一个动作存在却没有在这里出现,构建就会失败。
-
命令行调用的是同一套动作
vobuda do block.split-down、vobuda button files、vobuda theme catppuccin-mocha、vobuda send、vobuda signal、vobuda state、vobuda log,在任意 vobuda 区块里输入,
vobuda mcp则把同样的命令作为 MCP 工具提供给智能体。它不是给脚本开的后门:界面测试就是通过它驱动整个程序的,这正是它值得信任的原因,也是智能体能重新排布你的窗口、而你能准确读到它做了什么的原因。
区块,以及它们的承诺
区块可以在 shell 保持运行的情况下切换标签页
抓住区块的标题栏拖到标签栏中的某个标签页上,它就会落在那里:同样的 id、同样的 shell、同样的文件夹,原本在运行的东西继续运行。区块悬停在标签页上方时,该标签页会以主题色高亮。这个动作也有对应的名字,block.to-tab:2,因此可以绑定到某个快捷键上,不用鼠标的检查也能触发它。
尺寸会被记住,并且有一个下限
每个区块单独记忆自己的尺寸,而且没有一个区块能被压缩到无法使用的程度。一个只有 200 点宽的面板,谁也用不了。
你的东西不会悄悄消失
关闭正在运行的东西之前会先询问,并指明名称,因为丢掉某个人的工作一次所损失的信任,比一整个功能赢得的还多。出于同样的原因,项目文件夹会在智能体的每一轮之前做快照,一键就能还原;粘贴给智能体的密钥会在智能体看到之前被拦下;你还可以打开一道围栏,拒绝智能体在项目之外写入和删除。
会话默认会恢复
标签页、区块和每个区块的工作文件夹在重启后会恢复,并且默认是开启的;“通用”部分的一个开关可以把它关掉。来自另一台机器的会话会打开它能打开的,并说明哪些没能打开,而不是悄悄丢掉区块。
设置文件夹,逐个文件讲解
~/.config/vobuda 里的一切都是可读的 JSON,程序运行期间会被持续监听。保存文件,窗口就会重新绘制。
| 文件 | 保存的内容 |
|---|---|
| settings.json | 主题、外观、终端、shell、窗口、提示音:十个部分里的每一项设置 |
| themes/*.json | 终端和窗口的配色。内置 25 套配色方案,其中两套专为色觉缺陷设计 |
| looks/*.json | 窗口的形状:圆角、阴影、面板颜色、透明度。内置 29 种 |
| skins/*.json | 决定绘制哪些监视器面板,以及如何绘制 |
| buttons.json | 程序坞:按钮、顺序、位置、形状,以及给少数需要标记的按钮上色 |
| agents.json | 如何识别一个智能体,以及为它提供什么 |
| keys.json | 所有快捷键。原生 macOS 菜单也是由这个文件构建出来的 |
| workspaces/*.json | 项目:每个都是一个窗口,有自己的标签页、文件夹、主题和程序坞 |
内置主题存放在程序内部,文件夹里的内容会覆盖它们,所以更新会带来新的颜色,同时不会覆盖你改过的任何东西。整个文件夹可以存成一个归档,在另一台 Mac 上恢复;在 Mac 上,它的一份副本放在 iCloud Drive 里,默认开启,用一个开关就能关掉。
系统监视器,由一个文件来编排
十二种面板,你看到哪些是由一个皮肤决定的,而不是某个人一次设计好的屏幕。
-
数字对自己诚实
系统只能估算而非实测的数值会带一个波浪号,不存在的硬件会显示为空值而不是零。没有独立 GPU 的机器,不会出现一个显示百分之零的 GPU 面板。
-
两个地址,各自都带一个复制按钮
地址面板先显示互联网看到的地址,再在它下面显示这台机器在自己网络里的地址。它只在面板显示时才去询问,大约每十分钟一次,在还不知道任何地址时每三十秒一次,请求里不带有关于这台机器的任何信息。
-
和其他一切一样,靠拖动来重新排序
监视器的面板、程序坞的按钮、智能体栏的各个部分,都用同一个手势拿起来放到该去的位置。设置行是靠它左侧的把手拿起来的,而不是行上任意位置,这样从文本框开始的拖动就不会妨碍你选中想要修改的那个词。
文件在 shell 旁边打开
这是终端通常会把你打发到别处去做的事:输出里出现一个路径,有两行需要修改,直到现在,这都意味着要离开去打开一个编辑器,回来时 shell 的上下文已经丢失了。
-
保存是刻意为之的动作
在按下 Cmd+S 之前不会写入任何内容。一个边打字边写入的编辑器,放在笔记软件里很好,放在正运行的 shell 旁边就很糟糕。保存是一个动作而不只是一次按键,这也让它和这里的其他一切一样,拥有菜单项、快捷键和命令行入口。
-
拒绝去做的事,和写入一样重要
打开之后在磁盘上被修改过的文件不会被覆盖。二进制文件不会被显示成乱码文本。文件夹根本不会被打开。未保存的改动会带一个可见的标记,关闭已编辑过的文件时会先询问。
-
查找文件
文件面板会在你当前所在的文件夹下按名称搜索,每个结果都会标出它所在的上两级文件夹,因为光靠名字分不清两个 index.ts。它会跳过 node_modules、.git、target 之类的目录,最多搜索八层或两百个结果就停止,输入不满两个字母则什么都不做。
设置,既是一个界面,也是一堆文件
十个部分,从“通用”到“数据与隐私”,可以搜索每一项设置,并且每一项都是文件里的一行,你也可以手动编辑。
-
设置会主动来到区块面前
在一个面板上右键的意思是“这里的这个,改一下”。所以在区块自己的菜单里选择一条设置项,会在菜单的角落处、窗口之上打开对应的部分,而不是把你带到设置界面去。它和其他一切一样是一个操作:settings.here:themes、settings.here:monitor。
-
选中即可听到的提示音
选择一个提示音或终端响铃时,它会立即播放。从一堆听不到的名字里挑一个声音,那只是在挑一个名字。
-
没有任何东西需要重启
设置文件夹会被持续监听,包括核心程序自己管理的那两样东西:由你的快捷键文件构建的 macOS 菜单栏,以及下拉窗口的全局快捷键,旧的键会在新的键注册之前先被释放,以免两个键同时响应。有一项检查会读取设置界面里的每一条提示文字,一旦出现重启这个词就会失败。
说话,以及被朗读
两者都使用系统自带的语音功能,在你自己的机器上运行。音频从不离开这台电脑。
语音输入
Cmd+Shift+V 会把你说的话打进你正在工作的区块里,标签栏会用两个字母标出当前使用的听写语言。听写出来的内容只会被打出来,绝不会自动运行:识别会出错,一条被听错的命令如果自己就执行,那就成了一个因为收音机开着而删掉东西的程序。而在智能体旁边,一句话是一条消息而不是一条命令,这时它可以自动发送,这是在这句话结束的那一刻读取的一项设置。
把回答朗读出来
Cmd+Shift+R 会把智能体最后一条回答大声朗读出来,再按一次就会停止。朗读的是这条回答,不是整个屏幕。行首的项目符号、强调词两侧的星号、名称两侧的反引号、边框线、本该只用文件名却写成了完整路径的部分:这些都会被去掉,而其中的文字会保留。朗读的边界是由界面形状而不是文字内容决定的,下边界是智能体的输入行,上边界是它的标志,因为智能体界面的这些元素每次更新都会变。
决定你是否会留下它的那些小事
右键属于我们
在窗口的每个角落都是如此:区块内部的区块菜单、区块外部的窗口菜单、标签栏、程序坞、区块之间的缝隙。每一行都是一个动作,菜单本身也有自己的动作,block.menu,所以一个只有手才能触发的手势,并不会变成一个无法被检查的手势。唯一保留系统菜单的地方是文本框,在那里它提供剪切、复制、粘贴和词典查询。
从任何地方打开一个文件夹
vobuda://open?path=/some/path 会在那个文件夹里打开一个标签页,可以来自 Finder 的操作、一个脚本或另一个应用。macOS 没有系统级的默认终端设置,所以这是这项功能诚实的实现方式,而不是一个它兑现不了的承诺。
在区块内搜索
Cmd+F。搜索框属于它所搜索的那个区块,关闭它之后,视图会停留在找到匹配项的位置。
把区块的内容带走
Cmd+Shift+X 复制一个区块的文本,这是向终端本身要来的,所以在开启 GPU 渲染时它也照样有效,因为那时页面里没有可选的文本。给区块截图是 Cmd+K 上的两个操作:“区块截图到剪贴板”和“区块截图存为文件”。
更新检查不是一项作业
核心每天在自己的线程里检查一次,你看到的是布局上方的一条提示栏,而不是盖在布局上面,因为盖住终端的通知,是人们学会不看就关掉的那种。你没有点击之前,什么都不会安装:对智能体来说,更新是输入到当前区块里的一条命令,输出就在眼前;对 Mac 上的 Vobuda 来说,按钮会在后台安装新版本,然后提示重启,如果没有任何东西在运行,十秒后会自动重启。
四十种语言,每种都有完整指南
包括 macOS 菜单栏,这是系统在核心程序中构建的。阿拉伯语和希伯来语会镜像整个窗口,唯独终端本身不镜像,因为镜像会让输出和路径变得无法阅读。翻译的键名就是英文原文字符串本身,所以没有翻译的字符串会回退到可读的英文,而不是空白或一串标识符。
试试你刚刚读到的这些部分
第一次运行回答两个简短的问题之后,它只打开一个终端区块,别的什么都没有。上面的一切,都是你想要时才打开的。
curl -fsSL https://vobuda.com/install.sh | sh