org-preview-impatient 是一个 Emacs 软件包,通过异步导出和轻量级 Web 服务器,为 Org-mode 提供极致流畅、接近零延迟的浏览器实时预览体验。
- 实时预览:输入即所得,采用防抖(Debounce)机制优化性能。
- 非阻塞导出:利用
async.el在后台进程执行渲染,绝不卡顿 Emacs。 - 一致性保证:自动将本地图片转换为 Base64 编码嵌入 HTML,确保浏览器预览效果与源文件完美一致。
- 自动交互:开启模式后自动打开默认浏览器并跳转至预览页面。
- 双向同步滚动:Emacs 编辑视口与浏览器预览区无缝双向滚动同步,追踪每一行。
- Excalidraw 支持:深度集成
org-excalidraw。 - 自定义主题与 SETUPFILE:完全支持 Org 的
#+SETUPFILE:指令加载自定义主题及宏。
推荐使用 use-package 配合 quelpa 从 GitHub 直接安装:
(use-package org-preview-impatient
:quelpa (org-preview-impatient :fetcher github :repo "4honor/org-preview-impatient")
:config
;; 默认端口为 8888,如果需要修改:
;; (setq org-preview-impatient-port 8888)
;; 如果你的 #+SETUPFILE 中包含需要在 <head> 中加载的 HTML 样式(如 istyle.theme),请将其设置为 nil
;; (setq org-preview-impatient-body-only nil)
;; 如果你希望为所有预览设定一个全局的默认主题 (配合 body-only 为 nil 使用):
;; (setq org-preview-impatient-default-setupfile "~/GitHub/wiki/static/themes/istyle/istyle.theme")
;; 如果你在 org 文件中使用了 htmlize 或其他特殊的代码块/媒体资源(如图表或公式)
;; 请将相关的 Emacs Lisp 包名称添加到此处,以便它们能在后台渲染进程中被拉起和加载。
;; (setq org-preview-impatient-extra-packages '(org-excalidraw htmlize ob-mermaid))
)本软件包依赖以下插件(通过上述方式安装会自动处理):
asyncsimple-httpdimpatient-mode
- 打开一个
.org文件。 - 运行
M-x org-preview-impatient-mode。 - 你的默认浏览器将自动打开预览页面。
- 开始编辑,查看实时变化!
| 变量名 | 默认值 | 描述 |
|---|---|---|
org-preview-impatient-port |
8888 |
Web 服务器监听端口 |
org-preview-impatient-debounce-interval |
0.5 |
触发预览更新的防抖时间(秒) |
org-preview-impatient-extra-packages |
'(org-excalidraw) |
异步导出进程需要额外加载的包 |
org-preview-impatient-body-only |
t |
导出时是否只输出 <body> 内容。若设为 nil,将包含完整的 <head> 信息,以便应用 #+SETUPFILE 引入的主题样式 |
org-preview-impatient-default-setupfile |
nil |
全局默认的 SETUPFILE 文件路径。设定后等效于在每个导出的 org 文件头部自动加入 #+SETUPFILE: xxx |
org-preview-impatient-sync-scroll |
t |
是否开启 Emacs 滚动时浏览器自动跟随同步 |
org-preview-impatient-sync-scroll-bidirectional |
nil |
是否开启浏览器滚动时 Emacs 自动跟随定位(双向同步) |
详见 TESTING.md。