Sử dụng Org Babel để đánh rối tên tệp biến


16

Nếu tôi có một đoạn mã mà tôi vướng vào một tệp, nhưng tôi hy vọng tên tệp sẽ thay đổi theo thời gian, Có cách nào để thay đổi tên tệp hơn Truy vấn thay thế không?

Ví dụ: giả sử tôi rối mã đến ~ / 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.

Sau đó, tôi nhận ra rằng tập tin sẽ được đặt tốt hơn ở một vị trí khác:

#+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.

Có cách nào để thay đổi đối số thành: rối động.

Tôi đã điều tra và phát hiện ra rằng tôi có thể đưa elisp vào đối số: rối. Nếu tôi đánh giá (setq myfile "~/dir/file.el)và sau đó rối như sau:

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

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

Tôi nhận được kết quả mong muốn mà tôi đang tìm kiếm. Sau đó tôi có thể thực thi một đoạn elisp để đặt biến bằng cách sử dụng org-babel, nhưng tôi đã tự hỏi liệu có cách nào sạch hơn để làm như vậy không.

Các tài liệu trên: tiêu đề rối không quy định một cách riêng.

Câu trả lời:


17

Bạn không nên lặp lại những điều như vậy, nhưng xác định chúng ở một nơi. Ví dụ: bạn có thể định nghĩa tệp đầu ra trong ngăn kéo dưới dạng đối số tiêu đề cho toàn bộ cây và cây con :

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

hoặc cho : dir

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

Như được mô tả trong các tài liệu bạn có thể có:

  • Đối số tiêu đề toàn hệ thống
  • Đối số tiêu đề cụ thể theo ngôn ngữ
  • Đối số tiêu đề trong thuộc tính chế độ Org
  • Đối số tiêu đề dành riêng cho ngôn ngữ trong thuộc tính chế độ Org
  • Đối số tiêu đề cụ thể khối mã
  • Đối số tiêu đề trong các cuộc gọi chức năng

1

Bạn có thể sử dụng một thuộc tính của tiêu đề org thay vì một 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.

Bằng cách này, bạn có thể đặt các tên tệp khác nhau cho mỗi khối nguồn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.