Comment emmêler automatiquement un autre bloc source dans un fichier lors de l'évaluation d'un bloc source en mode org?


9

Le bloc source que je veux évaluer (src2) doit générer un fichier qui devrait être le résultat d'enchevêtrement d'un autre bloc source (src1). Comment pourrait-il faire enchevêtrer pour déposer automatiquement tout ce que j'évalue le bloc source?

src1: devrait être enchevêtré dans le fichier:

+begin_src tcl :tangle /tmp/compile_lib.tcl
  <some tcl code>
+end_src

src2: serait évalué.

+begin_src sh
   vivado -mode batch -source /tmp/compile_lib.tcl    # source the file tangled from <src1>
+end_src

Réponses:


3

Après avoir regardé autour, je travaille sur une solution de contournement pour le faire en définissant une variable fictive pour le src2bloc afin d'enchevêtrer le src1bloc.

Solution: 1. Tout d'abord, vous devez nommer le src1bloc pour faciliter sa localisation. 2. Créez une variable fictive pour utiliser elisp pour emmêler src1.

Exemple de code:

#+NAME: my_hello
#+BEGIN_SRC emacs-lisp :tangle /tmp/hello.el
  (message "Hello")
#+END_SRC

#+BEGIN_SRC sh :var DUMMY=(progn (org-babel-goto-named-src-block "my_hello") (org-babel-tangle '(4))) :results output
  cat /tmp/hello.el
  rm -f /tmp/hello.el
#+END_SRC

#+RESULTS:
: (message "Hello")

Cette solution résout mon problème pour l'instant. Mais il a beaucoup de limitations, car il ne peut emmêler le bloc que dans le même fichier en mode org.

J'espère que certains trouveront une meilleure façon de le faire.


2

Si vous avez besoin de tout pour vous emmêler dans un seul fichier, vous pouvez utiliser cette solution de contournement incroyablement hacky qui utilise orgmode pour transformer une table en code généré dans une deuxième (ou troisième!) Langue.

Votre table (1):

#+tblname: personae-table
| Set | Description        | variable | Value |
|-----+--------------------+----------+-------|
| DEP | Fam Med Department | famDep   | 23    |

Votre générateur de code (2):

#+name: python-generate-new-and-set-vars-blocks
#+BEGIN_SRC python :var records=personae-table :exports results :results output verbatim drawer
  print("#+name: variables")
  print("#+BEGIN_SRC mumps")

  print("n " + ",".join(line[3] for line in records))
  print("s " +
        ",".join(
            "{}={}".format([line[2], str(line[3])]) for line in records))
  print()
  print("#+END_SRC")
#+END_SRC

Les résultats de votre générateur (3):

#+results: python-generate-new-and-set-vars-blocks
:RESULTS:
#+name: variables
#+BEGIN_SRC mumps
n famDep
s famDep=23
#+END_SRC
:END:

Votre bloc factice qui précompile les blocs à emmêler (4):

#+BEGIN_SRC emacs-lisp :tangle yes :var DUMMY=(progn (org-babel-goto-named-src-block "python-generate-new-and-set-vars-blocks") (org-ctrl-c-ctrl-c))
; run pre-tangle hooks by putting them in the var.
#+END_SRC

Votre bloc de sortie qui emmêle le code généré (5):

#+BEGIN_SRC mumps :tangle fixed.m :noweb tangle :padline no
  run()
    <<variables>>
#+END_SRC

L'exécution va 4, 1, 2, 3, 5. Je ne sais pas si je devrais être fier ou avoir honte. Orgmode est incroyable.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.