Allen Li writes: > Previously, placing an empty #+TAGS: in a file would override > org-file-tags for the file. In 9.4, an empty #+TAGS: is ignored and > org-file-tags is used. > > The relevant code in org.el: > > (setq org-current-tag-alist > (org--tag-add-to-alist > org-tag-persistent-alist > (let ((tags (mapconcat #'identity > (cdr (assoc "TAGS" alist)) > "\n"))) > (if (org-string-nw-p tags) (org-tag-string-to-alist tags) > org-tag-alist)))) > > This regression is undesirable because I have a set of common > org-file-tags for most files, but one particular file where > automatically detecting the existing tags in the file works better (the > default behavior when org-current-tag-alist is empty).
Thanks reporting. That change in behavior came with b4e91b7e9 (New function: org-collect-keywords, 2020-04-26), and I'm not seeing anything in that commit that indicates it was intentional. The following patch should restore the previous behavior. I'll apply it in a couple of days if no objections come in. -- >8 -- Subject: [PATCH] org.el: Fix regression in handling of empty #+TAGS * lisp/org.el (org-set-regexps-and-options): Allow an empty #+TAGS value to override org-tag-alist, as it did before v9.4. * testing/lisp/test-org.el (test-org/set-regexps-and-options): Add test. As of b4e91b7e9 (New function: org-collect-keywords, 2020-04-26), a "#+TAGS" header can no longer be used to override a value of org-tag-alist. This breaks the workflow where a set of tags for most files is defined via org-file-tags and then, in a particular file, an empty #+TAGS header is used to ignore org-file-tags and trigger collecting tags from the buffer instead. Rework the handling to restore this behavior. Reported-by: Allen Li <darkfel...@felesatra.moe> Ref: https://orgmode.org/list/80y2laly9v....@felesatra.moe --- lisp/org.el | 8 ++++---- testing/lisp/test-org.el | 5 +++++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/lisp/org.el b/lisp/org.el index efdf4e3fc..a1930a012 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -4279,10 +4279,10 @@ (defun org-set-regexps-and-options (&optional tags-only) (setq org-current-tag-alist (org--tag-add-to-alist org-tag-persistent-alist - (let ((tags (mapconcat #'identity - (cdr (assoc "TAGS" alist)) - "\n"))) - (if (org-string-nw-p tags) (org-tag-string-to-alist tags) + (let ((tags (cdr (assoc "TAGS" alist)))) + (if tags + (org-tag-string-to-alist + (mapconcat #'identity tags "\n")) org-tag-alist)))) (setq org-tag-groups-alist (org-tag-alist-to-groups org-current-tag-alist)) diff --git a/testing/lisp/test-org.el b/testing/lisp/test-org.el index 1d48bae72..38bab1af9 100644 --- a/testing/lisp/test-org.el +++ b/testing/lisp/test-org.el @@ -2457,6 +2457,11 @@ (ert-deftest test-org/set-regexps-and-options () (org-test-with-temp-text "#+TAGS: [ A : B C ]" (org-mode-restart) org-tag-groups-alist)))) + (should-not + (let ((org-tag-alist '(("A")))) + (org-test-with-temp-text "#+TAGS:" + (org-mode-restart) + org-current-tag-alist))) ;; FILETAGS keyword. (should (equal '("A" "B" "C") base-commit: 73c929e3b507db9ee2867d35d10c8f393ff4d38d -- 2.28.0