tangle対象のファイル名にelisp式を使う Emacs EmacsLisp OrgMode
Org Mode で tangle
を使うとコードブロックの内容をファイルを出力することができますが、
Emacs Lispを記載することで対象のファイルを動的に指定できます。
簡単な例
(defun my-tangle-path (file) (file-name-concat "/tmp/hoge/" file))
#+begin_src text :tangle (my-tangle-path "hoge.txt") :mkdirp t hello #+end_src
Propertyから値をとってくる
Lispで変数や関数を定義するのではなく、ヘッダーのpropertyから値をとってこれると便利です。
次のように table-base-dir
に指定したディレクトリ以下にファイルを作成するようにしてみましょう。
* heading :PROPERTIES: :CREATED: [2024-04-24 18:11:28] :MODIFIED: [2024-04-24 18:14:33] :tangle-base-dir: /tmp :END:
my-tagle-path
の中で property の値をとってくるように変更するだけです。
(defun my-tangle-path (file) (let* ((dir (org-entry-get (point) "tangle-base-dir")) (path (file-name-concat dir file))) path))