Come aggrovigliare automaticamente un altro blocco sorgente su file quando si valuta un blocco sorgente in modalità org?


9

Il blocco sorgente che voglio valutare (src2) deve generare un file che dovrebbe essere il risultato tangente di un altro blocco sorgente (src1). Come potrebbe rendere il groviglio di archiviare automaticamente tutto il tempo in cui valuto il blocco sorgente?

src1: dovrebbe essere groviglio al file:

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

src2: verrebbe valutato.

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

Risposte:


3

Dopo essermi guardato intorno, ho elaborato una soluzione alternativa per farlo impostando una variabile fittizia affinché il src2blocco potesse aggrovigliare il src1blocco.

Soluzione: 1. Innanzitutto, è necessario src1assegnare un nome al blocco per semplificarne l'individuazione. 2. Creare una variabile fittizia per utilizzare elisp per aggrovigliare src1.

Codice di esempio:

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

Questa soluzione risolve il mio problema per ora. Ma ha molte limitazioni, in quanto può solo aggrovigliare il blocco nello stesso file in modalità org.

Spero che qualcuno possa trovare un modo migliore per farlo.


2

Se hai bisogno di tutto per aggrovigliare in un singolo file, puoi usare questa soluzione incredibilmente confusa che utilizza orgmode per trasformare una tabella in codice generato in una seconda (o terza!) Lingua.

Il tuo tavolo (1):

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

Il tuo generatore di codice (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

I risultati del tuo generatore (3):

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

Il tuo blocco fittizio che precompila i blocchi per aggrovigliare (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

Il tuo blocco di output che aggroviglia il codice generato (5):

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

L'esecuzione va 4, 1, 2, 3, 5. Non sono sicuro se dovrei essere orgoglioso o vergognarmi. Orgmode è sorprendente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.