3

我正在 org 模式下开发一个识字程序。我的 .emacs 中有几个函数用于为程序设置 repl,是否可以将这些函数移动到 org-mode 文件并在每次打开文件时对其进行评估(如缓冲区本地变量,但使用功能。)

4

1 回答 1

5

您应该能够使用特殊的eval 文件局部变量(强调我的)来做到这一点:

一些“变量名”在局部变量列表中具有特殊含义:

  • mode启用指定的主要模式。
  • eval计算指定的 Lisp 表达式(该表达式返回的值被忽略)。
  • coding指定此文件的字符代码转换的编码系统。请参阅编码系统
  • unibyte表示以单字节模式加载或编译 Emacs Lisp 文件,如果值为t. 请参阅禁用多字节

因此,例如,具有此第一行的 Org 文件

# -*- 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

不幸的是,我没有看到任何直接调用命名块的方法,这样你会得到两次安全提示:一次用于 the eval,一次用于代码块foo

于 2014-04-18T14:17:06.257 回答