把熟悉的操作带回来:快捷键和 Markdown 预览
窗口和预览包有了之后,砚继续补一些每天会碰到的功能。这一篇放在一起的两件事,是自定义快捷键和 Markdown 预览。
它们都和“熟悉感”有关:已经形成的按键习惯能不能带进来,一份文档能不能舒服地看完。
支持熟悉的配置格式
砚新增了 keybindings.json,沿用 VS Code 的配置形状。文件菜单可以打开它,在砚里保存后重新加载。
例如下面是一条编辑器有焦点时保存的绑定:
[
{
"key": "ctrl+alt+s",
"command": "workbench.action.files.save",
"when": "editorTextFocus"
}
]
实际解析还支持注释和尾逗号,也就是常见的 JSONC 写法。连按如 cmd+k cmd+s、命令名前加 - 移除绑定,以及 runCommands 组合命令也纳入了支持范围。
前期沿用命令 ID 的决定,到这里开始减少适配成本。用户不必为相同的保存或切换动作,再记一套完全不同的名字。
兼容格式,需要同时交代边界
when 不是一个装饰字段。只有焦点在编辑区时生效的键,不能在搜索输入框里也抢走输入。
砚把支持的条件映射到全局、编辑器、树和浮层上下文,并处理系统条件。未知条件、未知命令或不支持的参数会产生提示,不能假装整份 VS Code 配置都已生效。
目前也没有完整覆盖终端焦点、依赖选区等动态状态的条件;除 runCommands 外的带参数命令存在限制。外部程序改了这个配置,也不能把“在砚里保存立即生效”扩展理解成已有持续监听。
做兼容时,我更愿意说明支持的子集。用户知道某条配置为什么被跳过,比按了半天不知道被谁吞掉要好排查。
快捷键还要留下跨平台入口
虽然当前发的是 macOS 窗口预览版,命令和菜单不能把平台符号写死在所有地方。
砚通过 keymap.Profile.OS 和平台辅助函数处理键位,以及文件管理器、回收站的叫法。这里打通的是接口和文案入口,并不意味着 Windows、Linux 的窗口版已经发行。
把这件事提前放到共同层里,后续移植时才不用逐页找“Cmd”和“访达”。
Markdown 从源码视图切到阅读视图
窗口版用 Cmd+Shift+V 在 Markdown 文本与预览之间切换,延续了已有 SVG 预览的入口。
目前支持标题、列表和任务列表、引用、代码高亮、表格、本地图片与链接等常用内容。可以把同一文件放在另一栏,一边编辑,一边看预览更新。网页链接交给浏览器,本地链接在砚里打开。
解析和显示由窗口层处理,内核提供文本与版本。后台解析完成时仍要确认对应版本有效,避免快速输入时把旧文档渲染回来。这和搜索里的异步有效期问题很相似。
看的是预览,就不能改隐藏的源码
这次顺便修了一个很容易被忽略的交互:标签显示 SVG 或 Markdown 预览时,键盘输入不能继续修改背后的隐藏文本。
否则用户眼前没看见编辑内容,文件却已经变脏,自动保存还可能把它写出去。现在会提示先切回文字视图。
预览当前也有明确边界:文字栏和预览栏没有滚动同步,面包屑里的专用预览按钮还没补上。这是阅读预览,也不等于 Markdown 所见即所得编辑器,更没有据此宣称支持 Mermaid 或数学公式渲染。
这批功能进入 alpha.4。到这一步,砚越来越适合原来的核心场景:在代码和中文文档之间切换,做一点编辑,再继续往下读。