У меня есть elisp-код, который я хотел бы запускать в файлах orgmode при их загрузке (различается для разных файлов и определяется в самом файле). Есть ли способ сделать это? Я ничего не видел в http://orgmode.org/manual/In_002dbuffer-settings.html
Если я могу добавить что-то в инициализацию emacs, которая запускает блок кода со специальным именем при загрузке файла orgmode, это может быть решением, но я не уверен, как это сделать, и в идеале что-то встроено.
# -*- eval: (lisp code here) -*-
но вы также должны знать об опасностях. Даже если вы не передадите эти документы кому-либо еще, интерпретируемая природа Emacs Lisp будет означать, что изменение может случайно привести к потере данных. Кроме того, режим ловушки звучит как лучший вариант, если вы хотите запустить один и тот же код для более чем одного файла.Ответы:
Это решение не требует изменений
init.el
(с незначительными изменениями). Это включает в себя локальные оценки файлов - но это именно то, о чем просил OP. Преимущества решения:init.el
файле orgmode, оно может быть передано (доверенным) пользователямЯ перефразирую решение здесь.
Добавьте src-блок где-нибудь в вашем файле:
Затем поместите это в конец вашего файла orgmode:
Я добавил,
(outline-hide-sublevels 1)
потому что мне нравится скрывать блок src внутри заголовка и хочу, чтобы подуровни были скрыты при запуске. Без этого утверждения подуровни будут расширяться(org-babel-goto-named-src-block "startup")
.В этом решении emacs дважды запросит разрешение на выполнение (1-е: применить локальные переменные; 2-е: выполнить «startup» -src-block). Поскольку в моем файле много блоков src, я установил другую переменную file-local-variable
org-confirm-babel-evaluate
, например так:Предупреждение: с этим дополнением, emacs будет запрашивать разрешение на выполнение только один раз - все src-блоки в этом файле теперь могут выполняться без дальнейшего подтверждения. Как уже отмечали другие, такое поведение может быть опасным, и вы должны быть очень осторожны с этим параметром.
Тем не менее, я бы утверждать , что это решение (особенно первая версия) является более безопасным , чем один данным Джо Corneli , потому что по крайней мере у вас будет предложены для подтверждения для выполнения. Решение Джо оценит специальный блок без подтверждения, если он найден в файле. Злоумышленник, конечно, должен угадать название специального блока ...
Я использую этот подход для написания больших документов, которые требуют, например, адаптации к механизмам экспорта в орг.
источник
Итак, в вашем init.el:
источник
Так как вы просите
затем попробуйте это решение .
источник
Я согласен с предложением @Joe Corneli об использовании крючка.
Мне также кажется, что вы могли бы использовать закладки здесь: поставить конкретный прыжок закладки на крючок. Преимущество закладки для блока кода состоит в том, что она, как правило, перемещается автоматически (например, при изменении содержимого файла), поэтому о местонахождении блока обычно следует заботиться автоматически.
[Но мне не понятно, почему у вас есть код в файлах режима Org, а не где-то еще. Мы принимаем это как данность, согласно постановке задачи, но мне интересно, почему вы это делаете. Дайте нам знать больше о дизайне в этом отношении, может помочь лучше.]
источник
Я пытался улучшить код от Джо Корнели:
Это необходимо в вашем файле init.el:
Каждый раз, когда вы открываете буфер режима org, он будет искать исходный блок с именем startblock, если он найден, он будет выполнять его.
В файлы org-mode вы можете поместить:
источник