специфические функции файла орг-режима


Я работаю над грамотной программой в орг-режиме. У меня есть пара функций в моем .emacs, которые я использую для настройки repl для программы, можно ли переместить эти функции в файл org-mode, и они оцениваются каждый раз, когда файл открывается (например, buffer local vars, но с функциями.)

1 3

1 ответ:

Вы должны быть в состоянии сделать это с помощью специального eval файл-локальная переменная (Курсив мой):

Некоторые "имена переменных" имеют специальные значения в списке локальных переменных:

  • mode включает указанный основной режим.
  • eval вычисляет указанное выражение Lisp (значение, возвращаемое этим выражением, игнорируется).
  • coding задает систему кодирования для преобразования символьного кода этого файла. Видеть кодирование Системы .
  • unibyte говорит, чтобы загрузить или скомпилировать файл Emacs Lisp в режиме unibyte, если значение равно t. См. Раздел Отключение Многобайтовый .

Так, например, файл организации, который имеет эту первую строку

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