我正在以组织模式开发一个有文化的程序。我在.emacs中有几个函数用于为程序设置repl,是否可以将这些函数移动到org-mode文件,并且每次打开文件时都会对它们进行评估(比如缓冲区本地变量,但是功能。)
答案 0 :(得分:5)
你应该可以使用特殊的eval
file-local variable(强调我的)来做到这一点:
一些"变量名称"在局部变量列表中有特殊含义:
mode
启用指定的主要模式。eval
计算指定的Lisp表达式(忽略该表达式返回的值)。coding
指定此文件的字符代码转换的编码系统。见Coding Systems。unibyte
表示如果值为t
,则以unibyte模式加载或编译Emacs Lisp文件。见Disabling Multibyte。
因此,例如,具有第一行的组织文件
# -*- eval: (message "foo"); -*-
或文件的最后3000个字符内的这样的块
# Local Variables:
# eval: (message "foo")
# End:
将在文件打开时评估(message "foo")
。
这是一个安全风险,因此在您打开文件时会提示您。您可以使用y
对其进行一次评估或!
将其保存为自定义文件中的安全评估,并避免将来出现提示。
修改强>
这有点尴尬,但这是一种在文件加载时评估命名源块的方法:
# -*- eval: (progn (org-babel-goto-named-src-block "foo") (org-babel-execute-src-block-maybe)) -*-
#+NAME: foo
#+BEGIN_SRC emacs-lisp :results silent
(message "Yes, it worked")
#+END_SRC
不幸的是,我没有看到任何直接调用命名块的方法,这样会提示您安全两次:一次为eval
,一次为代码块foo
。