emacs org-mode file local key binding
我在 emacs 中使用 org-mode 和 ox-reveal。后者定义了命令 org-reveal-export-to-html,我想将它绑定到带有 org 文件的缓冲区的键,这些文件是演示文稿(因此不适用于所有 org 文件)。
所以问题是:如何在 org-mode 中定义文件本地键绑定?
我目前拥有的是:
1 2 3 4 5 | #+BEGIN_COMMENT Local Variables: eval: (local-set-key [f5] 'org-reveal-export-to-html) End: #+END_COMMENT |
但是恕我直言,这不是很优雅。
您可以使用 org-defkey 只为 org-mode 定义一个密钥,基本上将以下内容添加到您的 init 文件中
1 | (org-defkey org-mode-map [f5] 'org-reveal-export-to-html) |
更新
你可以使用文件局部变量。
1 2 3 4 5 6 7 8 9 | (defvar export-with-reveal nil) (defun export-with-reveal-or-html () (interactive) (if (or export-with-reveal (file-exists-p"reveal.js")) (call-interactively 'org-reveal-export-to-html) (call-interactively 'org-export-as-html))) (org-defkey org-mode-map [f5] 'export-with-reveal-or-html) |
函数
的顶部来指定要导出为显示的文件
1 | # -*- export-with-reveal: t -*- |
更新 2
您还可以通过使用文件局部变量来定义任意导出函数
1 2 3 4 5 6 7 8 9 | (defvar my-export-fn nil) (defun my-export () (interactive) (if my-export-fn (call-interactively my-export-fn) (call-interactively 'org-export-as-html))) (org-defkey org-mode-map [f5] 'my-export) |
然后在文件顶部你可以设置你要使用的导出功能 eg
1 | # -*- export-fn: org-reveal-export-to-html -*- |
我想出了以下解决方案,它利用了局部变量 hook hack 并定义了缓冲区 lokal hook:
1 2 3 4 5 6 7 | (add-hook 'org-mode-hook 'my-org-mode-hook) (defun my-org-mode-hook () (add-hook 'hack-local-variables-hook (lambda () (local-set-key [f5] (if (boundp 'my-org-export) my-org-export 'org-html-export-to-html))))) |
然后在 org 模式下添加:
1 2 3 4 5 | #+BEGIN_COMMENT Local Variables: my-org-export: org-reveal-export-to-html End: #+END_COMMENT |
我仍然希望看到这样的东西,没有任何钩子黑客:
1 | #+EXPORT: org-reveal-export-to-html |