org-modeでソースブロックを評価するときに、別のソースブロックを自動的にファイルにもつれさせるにはどうすればよいですか?


9

評価したいソースブロック(src2)は、別のソースブロック(src1)のもつれの結果となるファイルをソースする必要があります。ソースブロックを評価するたびに、もつれを自動的にファイリングさせるにはどうすればよいですか?

src1:ファイルへのもつれである必要があります:

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

src2:評価されます。

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

回答:


3

周りsrc2を見回した後、ブロックにもつれさせるためにブロックのダミー変数を設定することによって、それを行うための回避策を考え出しsrc1ます。

解決策:1.まず、src1ブロックを簡単に見つけられるように名前を付ける必要があります。2. elispを使用してもつれさせるダミー変数を作成しますsrc1

コード例:

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

この解決策は今のところ私の問題を解決します。ただし、同じorg-modeファイル内のブロックのみをもつれることができるなど、多くの制限があります。

誰かがそれを行うためのより良い方法を考え出すことを願っています。


2

すべてを1つのファイルにもつれる必要がある場合は、orgmodeを使用するこの信じられないほどハックな回避策を使用して、テーブルを2番目(または3番目)の言語で生成されたコードに変換できます。

あなたのテーブル(1):

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

あなたのコードジェネレーター(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

あなたのジェネレーターの結果(3):

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

ブロックをプリコンパイルしてもつれさせるダミーブロック(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

生成されたコードを処理する出力ブロック(5):

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

処刑は4、1、2、3、5になります。私が誇りに思うべきか、恥ずかしいべきかはわかりません。Orgmodeは素晴らしいです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.