From f1e15e0634fffed4648aa11628a14e0a68c3b18d Mon Sep 17 00:00:00 2001 From: Tom Gillespie Date: Tue, 15 Aug 2023 13:46:08 -0700 Subject: [PATCH] ob-tangle.el: restore :tangle closure nil behavior * lisp/ob-tangle.el (org-babel-tangle-collect-blocks): * lisp/ob-tangle.el (org-babel-tangle--unbracketed-link): * lisp/ob-tangle.el (org-babel-tangle-single-block): src-tfile fix case where (cdr (assq :tangle params)) could be nil This patch restores the original behavior of the :tangle header argument when a closure returned nil, e.g. #+header: :tangle (or), by using (or (cdr (assq :tangle params)) "no"). Without this the call to `file-name-directory' in `org-babel-tangle--unbracketed-link' can fail with a wrong-type-argument stringp nil error. --- lisp/ob-tangle.el | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lisp/ob-tangle.el b/lisp/ob-tangle.el index 4566e03ad..0df649d7e 100644 --- a/lisp/ob-tangle.el +++ b/lisp/ob-tangle.el @@ -473,14 +473,14 @@ code blocks by target file." (org-in-archived-heading-p)) (let* ((info (org-babel-get-src-block-info 'no-eval)) (src-lang (nth 0 info)) - (src-tfile (cdr (assq :tangle (nth 2 info))))) + (src-tfile (or (cdr (assq :tangle (nth 2 info))) "no"))) (unless (or (string= src-tfile "no") (and tangle-file (not (equal tangle-file src-tfile))) (and lang-re (not (string-match-p lang-re src-lang)))) ;; Add the spec for this block to blocks under its tangled ;; file name. (let* ((block (org-babel-tangle-single-block counter)) - (src-tfile (cdr (assq :tangle (nth 4 block)))) + (src-tfile (or (cdr (assq :tangle (nth 4 block))) "no")) (file-name (org-babel-effective-tangled-filename buffer-fn src-lang src-tfile)) (by-fn (assoc file-name blocks))) @@ -510,7 +510,7 @@ The PARAMS are the 3rd element of the info for the same src block." (concat "file:" (file-relative-name (substring bare (match-end 0)) (file-name-directory - (cdr (assq :tangle params))))) + (or (cdr (assq :tangle params)) "no")))) bare)))))) (defvar org-outline-regexp) ; defined in lisp/org.el @@ -580,7 +580,7 @@ non-nil, return the full association list to be used by (match-end 0) (point-min)))) (point))))) - (src-tfile (cdr (assq :tangle params))) + (src-tfile (or (cdr (assq :tangle params)) "no")) (result (list start-line (if org-babel-tangle-use-relative-file-links -- 2.41.0