emacs组织模式文件本地密钥绑定

emacs组织模式文件本地密钥绑定,emacs,org-mode,Emacs,Org Mode,我在emacs中与ox reveal一起使用组织模式。后者定义了命令org-reveal-export-to-html,我想将它绑定到一个键,用于缓存org文件,这些文件是演示文稿(所以不是所有的org文件) 所以问题是:如何在组织模式下定义文件本地键绑定 我目前拥有的是: #+BEGIN_COMMENT Local Variables: eval: (local-set-key [f5] 'org-reveal-export-to-html) End: #+END_COMMENT 但是我觉得

我在emacs中与ox reveal一起使用组织模式。后者定义了命令org-reveal-export-to-html,我想将它绑定到一个键,用于缓存org文件,这些文件是演示文稿(所以不是所有的org文件)

所以问题是:如何在组织模式下定义文件本地键绑定

我目前拥有的是:

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

但是我觉得这不是很优雅。

您可以使用org defkey为org模式定义一个键,基本上是将以下内容添加到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 leave
的值为t,或者相对于org文件存在一个文件'leave.js',则函数
export with leave或html
,如果是这样,则函数
export with leave或html
,或者返回默认的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 -*-

我提出了以下解决方案,它利用局部变量hook 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

是的,但我不希望所有的org文件都使用这种绑定,只希望对某些特定的文件(在我的例子中,我不想使用revealJS导出为html的文件)使用这种绑定。如果我可以在org模式下定义一个buffer局部变量,那么我就可以编写一个函数来处理我希望导出的缓冲区。但是我对组织模式非常陌生,所以,有这样的可能性吗(尽管上面提到了局部变量)?好的,这可以通过组织模式钩子完成,当你点击
f5
,你想对其他组织模式文件做什么?例如导出到html,但不显示,所以(导出html导出到html)。好的,这可以完成,是否有任何标准可用于确定是否需要使用“显示”导出当前缓冲区?类似于某个特定文件夹中的文件或具有特定名称的文件?我已更新了我的答案,它允许您指定用于导出文件的函数谢谢,您的答案正是我所搜索的。我很高兴它对您有所帮助,只需注意确保变量名称是唯一的,否则可能会导致冲突。我忘记处理了对不起,会更新答案吗?