使用 Marked 2 为 CotEditor 增加 markdown 预览功能
CotEditor 虽然各种好,但毕竟功能比较轻量,用来编辑 markdown 甚至没有一个预览功能。不过好在它还支持脚本拓展,可以自己动手,丰衣足食。翻阅 Github,coteditor_markdown_set Public这个仓库里有一系列预览脚本。不过它的预览能力依赖 Safari 实现,每次预览都会打开一个浏览器窗口。而且这些脚本颇有一些年久失修,很多 Markdown 特性都不支持。
最近突然想起来,我之前还买过 Marked 这个 Markdown 预览专用 app 嘛,正好拿来给 CotEditor 使用。
不过我使用 CotEditor 通常只在临时编辑,确定语法没啥问题的场景。而官方仓库中的示例大部分都是通过open file.md的方式来预览的,也就是说必须有一个文件。考虑到只是临时预览,如果专门保存一个临时文件,后面还要定期清理,不太合适。
官方文档中也提到可以直接创建一个临时预览区,并提到了这个 url schema:
x-marked://preview?text=Some%20text%20to%20%2A%2Apreview%2A%2A%0A
尝试了一下,这个方案比较适合临时预览。不过由于是通过 URL 发送文本,因此 url encode 是必须的。简单规划了一下,脚本内容分为以下几步:
- 读取所有输入
- url encode 编码
- 拼接成 url,并打开
具体内容如下,也可以直接在这里浏览。
#!/usr/bin/env python3
# %%%{CotEditorXInput=AllText}%%%
# %%%{CotEditorXOutput=Discard}%%%
import sys
import urllib.parse
import webbrowser
content = sys.stdin.read()
content = urllib.parse.quote(content)
webbrowser.open('x-marked://preview?text='+content)
然后把脚本文件保存到~/Library/Application Scripts/com.coteditor.CotEditor目录下,CotEditor 的脚本菜单下就会自动出现这个命令。
使用这个方案之前,我曾经担心完全通过参数传递文本,在内容过大时会不会卡顿。不过拿一段 1 万多字的文章试了下,基本是秒开。
这个方案的问题是没办法实时更新编辑器里的内容,每次预览都会生成一个新的预览窗口。如果要实时更新内容的话,得使用open file.md的方案。不过这个可以直接使用官方脚本,就不必自己手搓了。

浙公网安备 33010602011771号