组织模式文件特定功能

Ham*_*aya 3 emacs literate-programming org-mode org-babel

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

Chr*_*ris 5

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

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

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

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

# -*- eval: (message "foo"); -*-
Run Code Online (Sandbox Code Playgroud)

或者在文件的最后3000个字符内的这样的块

# Local Variables:
# eval: (message "foo")
# End:
Run Code Online (Sandbox Code Playgroud)

将评估(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
Run Code Online (Sandbox Code Playgroud)

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