diff --git a/lisp/ob-tangle.el b/lisp/ob-tangle.el index 946039869..1fb26a71d 100644 --- a/lisp/ob-tangle.el +++ b/lisp/ob-tangle.el @@ -471,9 +471,9 @@ non-nil, return the full association list to be used by file) (if (and org-babel-tangle-use-relative-file-links (string-match org-link-types-re link) - (string= (match-string 0 link) "file")) + (string= (match-string 1 link) "file")) (concat "file:" - (file-relative-name (match-string 1 link) + (file-relative-name (substring link (match-end 0)) (file-name-directory (cdr (assq :tangle params))))) link) diff --git a/testing/lisp/test-ob-tangle.el b/testing/lisp/test-ob-tangle.el index 301f7aff7..df45c97fa 100644 --- a/testing/lisp/test-ob-tangle.el +++ b/testing/lisp/test-ob-tangle.el @@ -120,6 +120,43 @@ echo 1 (search-forward "[H:2]]" nil t)))) (delete-file "test-ob-tangle.el"))))) +(ert-deftest ob-tangle/comment-links-relative-file () + "Test relative file name handling when commenting with links." + (should + (org-test-with-temp-text-in-file + "* H +#+header: :tangle \"test-ob-tangle.el\" :comments link +#+begin_src emacs-lisp +1 +#+end_src" + (unwind-protect + (let ((org-babel-tangle-use-relative-file-links t)) + (org-babel-tangle) + (with-temp-buffer + (insert-file-contents "test-ob-tangle.el") + (buffer-string) + (goto-char (point-min)) + (search-forward + (concat "[file:" (file-name-nondirectory file)) + nil t))) + (delete-file "test-ob-tangle.el")))) + (should + (org-test-with-temp-text-in-file + "* H +#+header: :tangle \"test-ob-tangle.el\" :comments link +#+begin_src emacs-lisp +1 +#+end_src" + (unwind-protect + (let ((org-babel-tangle-use-relative-file-links nil)) + (org-babel-tangle) + (with-temp-buffer + (insert-file-contents "test-ob-tangle.el") + (buffer-string) + (goto-char (point-min)) + (search-forward (concat "[file:" file) nil t))) + (delete-file "test-ob-tangle.el"))))) + (ert-deftest ob-tangle/jump-to-org () "Test `org-babel-tangle-jump-to-org' specifications." ;; Standard test.