Org Babelを使用して変数ファイル名に絡ませる


16

ファイルに絡むコードスニペットがあるが、時間の経過とともにファイル名が変わると予想される場合、Query-replaceよりもファイル名を変更するよりクリーンな方法はありますか?

たとえば、コードを〜/ dir / my-file.elに絡めたとします。

#+BEGIN_SRC emacs-lisp :tangle ~/dir/my-file.el
(setq myvar1 "value1")
#+END_SRC

#+BEGIN_SRC emacs-lisp :tangle ~/dir/my-file.el
(defun foo (bar) ... )
#+END_SRC

etc.

その後、私はファイルが別の場所に配置される方が良いことに気付きます:

#+BEGIN_SRC emacs-lisp :tangle ~/dir/my/file.el
(setq myvar1 "value1")
#+END_SRC

#+BEGIN_SRC emacs-lisp :tangle ~/dir/my/file.el
(defun foo (bar) ... )
#+END_SRC

etc.

引数を:tangleに動的に変更する方法はありますか。

私は、elispを:tangle引数にフィードできることを調査し、発見しました。私が評価(setq myfile "~/dir/file.el)し、次を絡めた場合:

#+BEGIN_SRC emacs-lisp :tangle (print myfile)
(setq myvar1 "value1")
#+END_SRC

#+BEGIN_SRC emacs-lisp :tangle (print myfile)
(defun foo (bar) ... )
#+END_SRC

探している結果が得られました。それから、org-babelを使用してelispスニペットを実行して変数を設定できましたが、よりクリーンな方法があるかどうか疑問に思っていました。

:tangleヘッダーに関するドキュメントは、ネイティブな方法を規定していません。

回答:


17

このようなことを繰り返すべきではありませんが、1か所で定義する必要があります。たとえば、あなたは、出力ファイルを定義することができ、引き出しなどのヘッダー引数のために全体のツリーとサブツリー

* Header
:PROPERTIES:
:tangle: ~/dir/my/testfile.el
:END:

または:dir

* Header
:PROPERTIES:
:header-args: :dir ~/dir/my/dir/
:END:

ドキュメントで説明されているように、次のものを使用できます。

  • システム全体のヘッダー引数
  • 言語固有のヘッダー引数
  • 組織モードのプロパティのヘッダー引数
  • Orgモードプロパティの言語固有のヘッダー引数
  • コードブロック固有のヘッダー引数
  • 関数呼び出しのヘッダー引数

1

代わりに、組織の見出しのプロパティを使用できます setq

* Header
:PROPERTIES:
:PRJ-DIR: ~/prj/dir/
:END:

#+BEGIN_SRC emacs-lisp :tangle (concat (org-entry-get nil "PRJ-DIR" t) "file.el")
(setq myvar1 "value1")
#+END_SRC

#+BEGIN_SRC emacs-lisp :tangle (concat (org-entry-get nil "PRJ-DIR" t) "file.el")
(defun foo (bar) ... )
#+END_SRC

etc.

このようにして、ソースブロックごとに異なるファイル名を設定できます。

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