【问题标题】:org-mode File Specific Functionsorg-mode 文件特定函数
【发布时间】:2014-04-18 12:36:30
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    您应该可以使用特殊的 eval file-local variable 来做到这一点(强调我的):

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

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

    因此,例如,具有此第一行的 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
    

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

    【讨论】:

    • 是否可以评估来自 org 文件的命名源块?
    • @HamzaYerlikaya,我找不到非常干净的方法,但我已经用似乎可行的方法更新了我的答案。
    • # -*- eval: (progn (org-babel-goto-named-src-block "foo") (org-babel-execute-src-block-maybe)) -*- 可以替换为# -*- eval: (org-sbe "foo") -*-
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多