写到 alpha.6:现在有什么,还有哪些账没还
这一组开发日志先记到 2026 年 10 月 14 日,提交历史截止 063fc58,这一截止点最近的本地版本标签是 v0.1.0-alpha.6。
从最初的终端骨架,到窗口版、Git、预览、项目标签和终端,砚走得比最早那张线性路线图更曲折。回头看,我更想留下的是每次变化的原因,以及它还欠着什么。
已经形成的一条使用路径
现在可以从打开项目开始,在文件树和快速打开里定位文件,编辑与搜索,查看 Git 改动和历史,在窗口终端里运行命令,再保存会话继续工作。
| 区域 | 当前已有的内容 | 仍需留意的边界 |
|---|---|---|
| 内核 | 不可变文本快照、多选区、撤销、文件分档、保存保护 | 仍是平铺叶子结构,大文件不因此变成全功能编辑 |
| 导航 | 文件树、快速打开、命令面板、标签、分栏、符号、面包屑、粘性作用域 | 不等于具备语言服务器的语义理解 |
| 编辑 | 行命令、自动闭合、缩进、搜索替换、Vim 模式 | Vim 宏、Ex 命令行、选区内查找等仍未完成 |
| 窗口 | MyGo、图片/SVG/Markdown 预览、自动换行、多窗口、项目标签 | Windows/Linux 窗口包尚未交付,部分交互仍缺人工验证 |
| Git | 状态、diff、blame、SCM、提交图、worktree、提交操作和冲突过程入口 | 历史限最近 200 个提交,不是完整图形合并工具 |
| 终端 | 运行 shell、复制选择、截图粘贴路径、项目提醒 | 依赖原生终端库和应用协议行为 |
| 分发 | macOS arm64 预览包、哈希、声明、版本展示、发布脚本 | ad-hoc 签名、未公证,没有自动更新 |
这张表说的是实现和版本范围,并不表示每个格子都经过所有机器、所有输入法的真实操作验证。
alpha.6 之后:行级改动操作
写这篇时,项目还在继续往前走。行级改动操作已经进入提交 063fc58:点击行号旁的 Git 标记,在改动下面展开 HEAD 中的内容,提供还原和暂存入口。
代码里已经能看到内核状态、Frame、前端接线和测试文件;Unreleased 也已有相应说明。可以用 Alt+F3、Shift+Alt+F3 打开下一处、上一处改动,Ctrl+K R 还原、Ctrl+K S 暂存,Esc 关闭。但它不属于 alpha.6,本次写稿也没有执行这组功能的测试,所以记录为已提交、未纳入该发布标签。
这里最值得记录的两个语义是:
- 还原某处改动,要成为编辑器的一步事务,能够撤销。
- 暂存某处改动,需要面对已有暂存区,不能顺手把其他未选择的修改也全部放进去。
第二项尤其容易低估:屏幕上的变化通常相对 HEAD,暂存时却要考虑索引里可能已经有别的内容。当前实现读取索引再做比较,这正是接下来需要严密验证的地方。
开发日志先把问题和提交记下,等验证与发布记录齐全,再补上对应版本。
采样时工作区还出现了另一个方向:「所有改动」标签,把已暂存、更改、未跟踪文件等分组放到一页查看,并补充按文件、按改动跳转及折叠等翻阅操作。相关 changes.go 和测试文件当时尚未提交,也没有本轮测试结果。这里只记为正在开发的内容,不提前列进已发布功能。
还有几类很明确的欠账
第一类是实际体验验证。中文输入法候选位置、不同输入法、部分真实拖放、对话框和视觉效果,需要在真正使用的环境中持续检查。模拟事件与原生 selftest 已经有价值,但各自覆盖范围仍然有限。
第二类是尚未完成的产品能力:LSP、自动更新、标签拖到另一栏、选区内查找、Vim 宏与命令行、Markdown 双栏滚动同步、终端图片显示等。快捷键兼容也仍然只是一个有说明的子集。
第三类是工程和分发边界。跨平台键位与叫法已经留口子,但还没有 Windows/Linux 窗口版交付;B+ 树仍是后续工作;Apple 受信任分发需要补证书和公证。已有报告也没有给砚自身选择开源许可证,所以不能把使用开源依赖等同于项目已经开源。
让版本迭代留下可追溯记录
这几轮开发后,仓库补了 CHANGELOG、发布脚本和 PR CI。
用户能看见的变化先写进 Unreleased,用英文说明做了什么、怎么使用。scripts/bump.sh 再把内容整理进版本段落,更新版本文档、提交和标签;安装包与发布走各自脚本。
CI 在 Linux 上做格式、vet、测试与 macOS 交叉编译,文档改动会跳过。同一 PR 的旧运行会被新提交取消。本机 make check 另外承担竞态检测、架构边界和体积门禁,打包签名再走发布流程。
这意味着 PR CI 通过,只能说明那条工作流包含的项目通过,不能顺势说 macOS 安装、真实输入法或公证都没问题。
开发运行还有独立配置目录,make dev 使用 build/dev-config,避免试新代码时把日常会话弄乱。等自己真的开始使用这个工具,这种隔离就很有必要。
写日志也暴露了文档债
整理时还能看到,旧文档有些地方仍写着 Gio、6 MB 门禁,或把自动换行、多窗口列为未完成。代码和后续 release notes 已经往前走了。
所以这组文章没有只拿一份旧清单来讲现状,而是按提交、当前代码和版本记录重新串了一遍。遇到矛盾就说明历史位置,也不把没找到证据的部分补成一个漂亮故事。
到目前为止,这个项目给我的一个具体收获是:一个工具的成长,经常藏在那些"不该发生"的情况里。旧查询不要写进新项目,输入法不要把字送到另一个标签,自动保存不要悄悄盖掉磁盘变化。
后面继续开发,日志也沿着这个方式写。每次解决一个真实问题,留下实现、验证和限制,慢慢把砚做成自己愿意长期用的小工具。