即使切换模式,文档仍是同一份
打开预览时,会觉得窗口被一分为二;切换模式时,会觉得文档被重新打开了吗?mote 的实时、源码和阅读模式是查看同一缓冲区的三个视角,因此切换时既不转换,也不保存,更不会重新解析。

Markdown 编辑器通常会把画面分成两部分。在左侧写作,在右侧查看结果。由于同一份文档要绘制两次,因此必须不断同步滚动位置和选区位置。
mote 的做法不同。只保留一份文档,仅切换查看方式。
一份文档,三种画面
mote 有三种模式。
- 实时(Live):隐藏标记,直接显示格式。
- 源码(Source):原样显示文件中保存的内容。
- 阅读(Reading):显示完全去除 Markdown 标记后的结果。
核心会读取文档并生成装饰列表。类型只有三种:在哪个区间应用样式、隐藏哪个区间,以及用小组件代替绘制哪个区间。
三种模式就是对这份列表应用不同过滤器后的结果。即使切换模式,也不会重新打开或分析文档。块树和行内结果都会保持不变,只切换过滤器。
性能预算中也是这样写的。模式切换必须在一帧和过渡动画之内完成。如果涉及重新解析,就算违规。由于切换成本不随文档大小成比例增长,大文档也能以相同速度切换。
光标和选区也会保持不变。在源码模式中编辑的文字,在实时模式中仍位于相同位置;在实时模式中选中的句子,在源码模式中也仍然保持选中。
这并不是移动到文档的另一个副本,而是从不同视角查看同一份文档。
写作、检查和阅读
写作时,实时模式很方便。画面中只留下内容,Markdown 标记会在光标触及时出现。表格、公式和图片会在原位以小组件的形式绘制。可以一边看着网格,一边修改单元格中的内容。
需要准确检查标记时,可以使用源码模式。它很适合检查表格的竖线是否错位、代码块是否闭合,以及行尾是否有空格。
阅读模式是查看最终结果的画面。它不只是隐藏标记,而是将标记从画面中彻底移除。打印和 PDF 也以这个画面为基准生成。虽然无法编辑,但可以选择和复制内容,也可以打开链接。

实现阅读模式的过程并不简单。去除标记后,画面中的位置与文件中的位置变得不同。搜索结果发生横向偏移,点击的位置也与光标位置对不上。
现在,核心会同时记录被移除字符的位置和长度。这样就能把画面中点击的位置映射回文件中的准确位置。
在阅读的位置直接切换
点击页眉中想要的模式,或使用 Ctrl+Shift+1、2、3 即可。
切换后,画面的第一行和光标位置都会保持不变。交叉淡化是一个时长 160ms 的有限动画,结束后不会留下任何调度任务。可以在设置的编辑选项卡中选择新窗口以哪种模式打开。
快捷键方面曾有过一次小小的失误。有一段时间,说明中写着 Ctrl+1/2/3 用于切换模式,但实际上那是创建标题的快捷键。窗口会先接管按键输入,因此模式切换代码根本不会执行。
现在已经明确区分了各自的作用。Ctrl+Shift+1/2/3 用于切换模式,Ctrl+1 到 Ctrl+6 用于设置标题。命令面板、快捷键列表和网站文档也都已改成相同的内容。
专注模式轻轻叠加在画面之上
按下 F8 后,只有光标所在的块会清晰显示。其余行仅将文字的不透明度降低到 32%。
只有颜色发生变化,文字的位置不会移动。由于没有模糊效果或动画,在段落之间移动时,无需重新计算整个画面。
专注模式并不是第四种模式。它是叠加在实时画面上的选项,因此可以在保持开启的状态下切换到其他模式。

不把画面一分为二的理由
mote 没有分屏预览。
如果把同一份文档绘制两次,就必须同步滚动、移动选区,并管理两个画面的状态。mote 从一开始就决定不制造这个问题。
撤销历史、选区和滚动状态都只有一份。
之所以有三种模式,并不是因为有三份文档,而是因为查看同一份文档的时刻有三种。