Bagaimana cara secara otomatis mengatasi blok sumber lain ke file ketika mengevaluasi blok sumber dalam mode-org?

9

Blok sumber apa yang ingin saya evaluasi (src2) perlu sumber file yang harus menjadi hasil kusut dari blok sumber lain (src1). Bagaimana itu bisa membuat kusut ke file secara otomatis setiap kali saya mengevaluasi blok sumber?

src1: harus kusut ke file:

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

src2: akan dievaluasi.

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

Jawaban:

3

Setelah melihat-lihat, saya mencari solusi untuk melakukannya dengan menetapkan variabel dummy untuk src2blok untuk kusut src1blok.

Solusi: 1. Pertama, Anda harus memberi nama src1blok untuk membuatnya mudah ditemukan. 2. Buat variabel dummy untuk menggunakan elisp untuk kusut src1.

Kode Contoh:

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

Solusi ini menyelesaikan masalah saya untuk saat ini. Tetapi ia memiliki banyak keterbatasan, seperti itu hanya dapat mengacaukan blok dalam file mode-org yang sama.

Berharap beberapa akan mencari cara yang lebih baik untuk melakukannya

Enze Chi
sumber
2

Jika Anda perlu segalanya untuk diselesaikan dalam satu file, Anda dapat menggunakan solusi yang sangat rumit ini yang menggunakan orgmode untuk mengubah tabel menjadi kode yang dihasilkan dalam bahasa kedua (atau ketiga!).

Meja Anda (1):

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

Pembuat kode Anda (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

Hasil generator Anda (3):

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

Blok boneka Anda yang mengompilasi blok-blok sebelumnya untuk kusut (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

Blok output Anda yang menyilang kode yang dihasilkan (5):

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

Eksekusi berjalan 4, 1, 2, 3, 5. Saya tidak yakin apakah saya harus bangga atau malu. Orgmode luar biasa.

pengguna16698
sumber