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