Как получить org-режим для генерации кода несколько раз в одном файле без избыточности?

(Последующие действия Есть ли способ использования org-mode для рендеринга сгенерированного кода? )

#+BEGIN_SRC sh :exports results :results output :wrap SRC haskell
sed '/^elts/,$p' -n Heap03.hs
#+END_SRC

позволяет мне извлечь код Haskell из файла, который будет отображаться в экспорте org-mode. Это действительно более безопасная и более идиоматическая версия взлома, с которой я столкнулся:

#+BEGIN_SRC sh :exports results :results output verbatim raw
echo '#+BEGIN_SRC haskell'
sed '/^elts/,$p' -n Heap03.hs
echo '#+END_SRC'
#+END_SRC

Теперь я хочу больше абстракции. Например:

#+NAME: inline
#+BEGIN_SRC sh :exports none :results output verbatim raw
echo '#+BEGIN_SRC haskell'
echo "[[./$FILE][$FILE]]"
sed '/^elts/,$p' -n $FILE
echo '#+END_SRC'
#+END_SRC

#+CALL: inline(FILE="Heap01.hs")
#+CALL: inline(FILE="Heap02.hs")

Два критерия, которые я пытаюсь удовлетворить (и испытываю проблемы):

  1. У меня должна быть ссылка на файл, автоматически вставленный над кодом Haskell.
  2. Вызов должен быть как можно меньше.

Я не понял, как выполнить первый критерий, используя : wrap , и лучшее, что я могу сделать для второго критерия, - # + CALL: inline (FILE = "Heap01.hs "): оберните SRC haskell , что для меня немного слишком тяжело.

Благодаря!

0

1 ответы

Как насчет (примечание: после имени и определения: var):

#+name: inline
#+BEGIN_SRC sh :exports none :results output verbatim raw :var FILE=""
echo "[[./$FILE][$FILE]]"
echo '#+BEGIN_SRC haskell'
sed '/^elts/,$p' -n $FILE
cat $FILE
echo '\n#+END_SRC'
#+END_SRC

А потом (с результатами raw):

#+CALL: inline(FILE="Heap01.hs") :results raw
1
добавлено
(Отсутствие двоеточия было только ошибкой транскрипции с моей стороны). Это сломается, если файл Haskell содержит «# + END_SRC» в извлеченном разделе, правильно? Я попытался написать функцию org-mode , которая вызывает функцию org-mode , но я не мог заставить ее работать. Мне интересно, нужно ли мне просто выбросить элис на проблему.
добавлено автор jasonwryan, источник
Нет веской причины. Частично я изучаю функциональность org-mode ; частично, мой первый инстинкт состоял в том, чтобы собрать кучу подобных файлов Haskell, чтобы продемонстрировать прогрессию, но отображать только части из них встроенные, и я просто следую за ним.
добавлено автор jasonwryan, источник
вы хотели бы избежать # + END_SRC as, # + END_SRC. Также избегайте любых строк, начинающихся с * as, *. Кажется, вы идете в обратную сторону запутывания. Почему бы не поместить свой код хэскелла в org и использовать путаницу, чтобы выбраться, а не наоборот?
добавлено автор Maximus Minimus, источник