组织模式文件特定功能

时间:2014-04-18 12:36:31

标签: emacs org-mode literate-programming org-babel

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

1 个答案:

答案 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