使用 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 万多字的文章试了下,基本是秒开。

CleanShot 2024-05-29 at 15.47.54@2x.

这个方案的问题是没办法实时更新编辑器里的内容,每次预览都会生成一个新的预览窗口。如果要实时更新内容的话,得使用open file.md的方案。不过这个可以直接使用官方脚本,就不必自己手搓了。

posted @ 2024-05-29 16:03  gloryxie  阅读(439)  评论(0)    收藏  举报