Wie bekomme ich den org-Modus, um Code mehrfach in einer Datei ohne Redundanz zu generieren?

(Follow-up zu Gibt es eine Möglichkeit, den generierten Code mithilfe des Organisationsmodus zu rendern? )

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

Erlaubt mir, Haskell-Code aus einer Datei zu extrahieren, um sie im Export des Organisationsmodus anzuzeigen. Es ist effektiv eine sicherere und idiomatischere Version des Hacks, den ich mir ausgedacht habe:

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

Jetzt will ich mehr Abstraktion. Beispielsweise:

#+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")

Die zwei Kriterien, die ich zu erfüllen versuche (und Probleme haben) sind:

  1. Ich sollte einen Link zu der Datei haben, der automatisch oberhalb des Haskell-Codes eingefügt wird.
  2. Der Anruf sollte so minimal wie möglich sein.

Ich habe nicht herausgefunden, wie man das erste Kriterium mit : wrap erfüllt, und das Beste, was ich in Bezug auf das zweite Kriterium tun kann, ist # + CALL: inline (FILE = "Heap01.hs "): Wrap SRC Haskell , das ist nur ein bisschen zu schwer für meinen Geschmack.

Vielen Dank!

0

1 Antworten

Wie wäre es (Anmerkung: nach dem Namen und der: var-Definition):

#+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

Und dann (mit Ergebnissen roh):

#+CALL: inline(FILE="Heap01.hs") :results raw
1
hinzugefügt
(Das Fehlen eines Doppelpunktes war nur ein Übertragungsfehler meinerseits) Dies wird brechen, wenn die Haskell-Datei "# + END_SRC" in dem extrahierten Abschnitt enthält, richtig? Ich habe versucht, eine org-mode -Funktion zu schreiben, die eine org-mode -Funktion aufruft, aber ich konnte das nicht zum Laufen bringen. Ich frage mich, ob ich nur ein wenig auf das Problem werfen sollte.
hinzugefügt der Autor jasonwryan, Quelle
Kein guter Grund. Teilweise erkunde ich die Funktionalität von org-mode ; Teilweise war mein erster Instinkt, eine Menge ähnlicher Haskell-Dateien zu erstellen, um eine Progression zu demonstrieren, aber nur Teile von ihnen inline anzuzeigen, und ich folge ihr nur.
hinzugefügt der Autor jasonwryan, Quelle
Sie möchten die # + END_SRC als, # + END_SRC entkommen lassen. Entkommen Sie auch allen Zeilen, die mit * as, * beginnen. Es scheint, dass Sie den umgekehrten Weg der Verwirrung gehen. Warum steckst du deinen Haskell-Code nicht in die Org und verwendest Tangle, um rauszukommen, anstatt das Gegenteil?
hinzugefügt der Autor Maximus Minimus, Quelle