开源桌面应用 · 原名 Lexora
Taleno
让阅读、写作和源码检查各有合适的位置,又不打断同一篇文档的思路。
Tauri 2 · Rust · SolidJS · Milkdown
01
为什么还想做一个写作工具?
一篇文档,并不总是处于「正在打字」的状态。有时只是想从头读一遍,有时想先把一个念头写下来,有时又得认真检查列表或某段语法。文件没有变,眼前要做的事却变了。
我想让 Taleno 照顾这些注意力的变化。它从一个普通的 Markdown 文件开始:不用先注册账号,可以自己保管,也能换个编辑器继续写。工具应该为写作服务,而不是让写作依附于工具。
02
三种模式,对应三种意图
我按「现在想做什么」划分界面,而不是按文件类型。默认进入写作模式;文档内容和未保存状态由同一套文档状态承载,切换的是显示模式。
- 阅读:只读地通读内容,减少误改,让注意力留在文字上。
- 写作:原位所见即所得,边写边看到格式,不必一直对照源码与预览。
- 代码:查看 Markdown 源码并同步行位置,需要精确调整语法时有直接入口。
03
先想文档怎么被对待,再选技术
编辑基础交给 Milkdown 与 ProseMirror,界面和状态交给 SolidJS。设计决策记录选择细粒度更新来承载频繁的编辑交互,也接受了生态较小、部分能力需要自己接起来的代价。
Tauri 提供桌面外壳,Rust 处理文件操作。保存时先写入同目录的临时文件,再替换目标文件,避免直接覆盖正文。这个选择也有约束:不只要能写文件,还需要所在目录的写入权限。
04
真正要较真的,是切换之后
三种视图只有在切换可预期时才有意义。相比多一个看起来很厉害的模式按钮,我更在意文档还在不在原来的状态,人能不能接着刚才的思路往下写。
技术上也有需要面对的取舍:编辑侧使用 Milkdown 的 Markdown 处理链,渲染与导出侧使用 Rust 的 pulldown-cmark。同一段 Markdown 的边界情况需要专门核对,不能因为用了成熟的库,就假定输出一定相同。
05
现在有了什么,还想继续问什么
目前公开项目已经包含本地 Markdown 文件、工作区标签、搜索、图表、公式与 HTML 导出。这些构成了写作环境的基础,但不代表每一种写作习惯都已经被照顾到。
我想持续追问的是:换了一种视图之后,你能不能自然地接着刚才那句话?对 Taleno 来说,这比再加长一点功能清单更值得打磨。
06