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로 동적으로 변경하는 방법이 있습니까?

나는 조사하고 : tangle 인수에 elisp를 공급할 수 있음을 발견했습니다. 내가 평가 (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

그러한 것들을 반복해서는 안되며 한 곳에서 정의해야합니다. 예를 들어 서랍 에서 출력 파일 을 전체 트리 및 하위 트리에 대한 헤더 인수 로 정의 할 수 있습니다 .

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

또는 : dir

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

문서에 설명 된대로 다음을 수행 할 수 있습니다.

  • 시스템 전체 헤더 인수
  • 언어 별 헤더 인수
  • 조직 모드 속성의 헤더 인수
  • 조직 모드 속성의 언어 별 헤더 인수
  • 코드 블록 특정 헤더 인수
  • 함수 호출의 헤더 인수

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.