Comment obtenir le mode org pour générer du code plusieurs fois dans un fichier sans redondance?

(Suivi de Est-il possible d'utiliser le mode org pour restituer le code généré? )

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

me permet d'extraire le code Haskell d'un fichier pour l'afficher dans l'exportation d'org-mode. C'est effectivement une version plus sûre et plus idiomatique du hack que j'ai créé:

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

Maintenant, je veux plus d'abstraction. Par exemple:

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

Les deux critères que j'essaie de satisfaire (et d'avoir des problèmes) sont les suivants:

  1. Un lien vers le fichier devrait être automatiquement inséré au-dessus du code Haskell.
  2. L'appel doit être aussi minime que possible.

Je n'ai pas trouvé comment obtenir le premier critère satisfait en utilisant : wrap , et le mieux que je puisse faire pour le second critère est # + CALL: inline (FILE = "Heap01.hs "): encapsule SRC haskell , qui est un peu trop lourd à mon goût.

Merci!

0

1 Réponses

Qu'en est-il de (remarque: après le nom et la définition de: 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

Et puis (avec des résultats bruts):

#+CALL: inline(FILE="Heap01.hs") :results raw
1
ajouté
(L'absence de deux points était juste une erreur de transcription de ma part). Cela se briserait si le fichier Haskell contenait "# + END_SRC" dans la section en cours d'extraction, non? J'ai essayé d'écrire une fonction org-mode qui appelle une fonction org-mode , mais cela n'a pas fonctionné. Je me demande si je ne devrais pas lancer un problème au problème.
ajouté l'auteur jasonwryan, source
Aucune bonne raison. En partie, j'explore les fonctionnalités de org-mode ; partiellement, mon premier instinct a été de créer une série de fichiers Haskell similaires pour démontrer une progression, mais n'en afficher que des parties en ligne, et je ne fais que suivre.
ajouté l'auteur jasonwryan, source
vous voulez échapper à # + END_SRC en tant que, # + END_SRC. Également échapper à toutes les lignes commençant par * comme, *. On dirait que vous allez dans le sens opposé de l'enchevêtrement. Pourquoi ne pas mettre votre code haskell dans une organisation et utiliser un enchevêtrement pour sortir, plutôt que le contraire?
ajouté l'auteur Maximus Minimus, source