更新
基于 org-exec 的构建。
构建脚本(可复用):
#+name: 2025-08-03-11-27
#+header: :var tangle=(ignore) load=(ignore)
#+header: :var target=(ignore) map-table=(ignore)
#+begin_src emacs-lisp :results silent :eval no :lexical t
(progn
;; 指向映射表的链接集
;; (unless map-table (error "No mapping."))
(unless target (error "No target."))
(!let
((load load) (tangle tangle)
(target target)
(map-table map-table)
(setup-mapping
(lambda (map-table)
(mapc
(lambda (link)
(let* ((mapping
(org-noweb-expand-link link))
(mapping
(read
(concat "(" mapping ")"))))
(apply #'org-id-remap mapping)))
map-table)))
(do-load
(lambda (f) (load f nil nil t))))
;; 建立映射表
(setup-mapping map-table)
;; Tangle 及 Eval
(when (and (stringp tangle)
(length> tangle 0)
(not (string= tangle "no")))
(org-exec target #'org-babel-tangle
'(4) tangle))
(when (string= load "yes")
(let ((f (make-temp-file "org-tangle")))
(org-exec target #'org-babel-tangle
'(4) f)
(do-load f)))
"yes"))
#+end_src
当前版本的构建入口:
#+name: 2025-08-03-11-22
#+header: :var tangle="no" load="no"
#+begin_src emacs-lisp :results silent :noweb yes :eval no
(org-id-remap 'reset)
(org-id-remap
"build-script"
"https://emacs-china.org/t/org-id-remap/29814::2025-08-03-11-27"
"build-target"
"https://emacs-china.org/t/org-id-remap/29814::2025-07-25-20-36"
"map-table"
"https://emacs-china.org/t/org-id-remap/29814::2025-07-25-21-38")
(org-id-remap t)
(org-exec "[[id:build-script]]" nil
:eval "yes"
'target "[[id:build-target]]"
'map-table ''("[[id:map-table]]")
'tangle (or tangle "~/org/org-id-remap.el")
'load (or load "yes"))
#+end_src
构建:
#+begin_src emacs-lisp :eval no
(org-exec
"[[https://emacs-china.org/t/org-id-remap/29814::2025-08-03-11-22]]" nil
:eval "yes" 'tangle "~/org/org-id-remap.el")
#+end_src