Hoe kan org-mode worden opgeroepen om meerdere keren code te genereren in één bestand zonder redundantie?

(Follow-up van Is er een manier om de org-modus te gebruiken om gegenereerde code weer te geven? )

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

laat me Haskell-code extraheren uit een bestand dat in de export van org-mode wordt weergegeven. Het is in feite een veiliger en meer idiomatische versie van de hack die ik bedacht:

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

Nu wil ik meer abstractie. Bijvoorbeeld:

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

De twee criteria die ik probeer te bevredigen (en problemen hebben) zijn:

  1. Ik zou een link naar het bestand moeten laten plaatsen die automatisch boven de Haskell-code is geplaatst.
  2. De oproep moet zo minimaal mogelijk zijn.

Ik heb niet berekend hoe ik aan het eerste criterium kan voldoen met behulp van : wrap , en het beste wat ik kan doen met het tweede criterium is # + CALL: inline (FILE = "Heap01.hs "): verpak SRC haskell , wat naar mijn smaak een beetje te zwaar is.

Bedankt!

0

1 antwoord

Hoe zit het met (opmerking: na naam en de: var-definitie):

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

En dan (met ruwe resultaten):

#+CALL: inline(FILE="Heap01.hs") :results raw
1
toegevoegd
(Het ontbreken van een dubbele punt was slechts een transcriptiefout van mijn kant). Dit zal breken als het Haskell-bestand "# + END_SRC" bevat in de sectie die wordt geëxtraheerd, nietwaar? Ik heb geprobeerd een org-modus -functie te schrijven die een org-modus -functie aanroept, maar ik kon het niet laten werken. Ik vraag me af of ik gewoon wat vragen over het probleem zou moeten gooien.
toegevoegd de auteur jasonwryan, de bron
Geen goede reden. Gedeeltelijk verken ik de functionaliteit van org-modus ; gedeeltelijk, mijn eerste instinct was om een ​​aantal soortgelijke Haskell-bestanden te maken om een ​​voortgang te demonstreren, maar slechts een deel ervan inline weer te geven, en ik volg het gewoon.
toegevoegd de auteur jasonwryan, de bron
je zou willen ontsnappen aan de # + END_SRC als, # + END_SRC. Ontsnap ook aan lijnen die beginnen met * als, *. Het lijkt erop dat je de tegenovergestelde manier van klitten gaat. Waarom zet u uw haskell-code niet in org, en gebruikt u een kluwen om eruit te komen in plaats van het tegenovergestelde?
toegevoegd de auteur Maximus Minimus, de bron