emacs org-mode文件本地密钥绑定

时间:2014-02-14 07:54:37

标签: emacs org-mode

我在emacs中使用org-mode和ox-reveal。后者定义了命令org-reveal-export-to-html,我想将其绑定到带有org文件的缓冲区的密钥,这些文件是演示文稿(因此不适用于所有组织文件)。

所以问题是:如何在org-mode中定义文件本地密钥绑定?

我现在拥有的是:

#+BEGIN_COMMENT
Local Variables:
eval: (local-set-key [f5] 'org-reveal-export-to-html)
End:
#+END_COMMENT

但imho这不是很优雅。

2 个答案:

答案 0 :(得分:2)

您可以使用org-defkey仅为org-mode定义一个键,基本上将以下内容添加到您的init文件

(org-defkey org-mode-map [f5] 'org-reveal-export-to-html)

<强>更新

您可以使用文件局部变量。

(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)

函数export-with-reveal-or-html如果变量export-with-reveal具有值t或者存在相对于org文件的文件'reveal.js',如果是,则导出reveal或者它回退默认html导出。您可以通过将以下内容添加到组织文件的顶部来指定要导出为显示的文件

# -*- export-with-reveal: t -*-

更新2

您还可以通过使用文件局部变量

来定义任意导出功能
(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)

然后在文件顶部,您可以设置要使用的导出功能,例如

# -*- export-fn: org-reveal-export-to-html -*-

答案 1 :(得分:0)

我想出了以下解决方案,它利用了局部变量钩子hack并定义了缓冲区lokal hook:

(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)))))

然后在组织模式中我添加:

#+BEGIN_COMMENT
Local Variables:
my-org-export: org-reveal-export-to-html
End:
#+END_COMMENT

我仍然希望看到这样的东西,没有任何钩子黑客攻击:

#+EXPORT: org-reveal-export-to-html