【存档】Org ID Remap


更新

基于 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