Example Org file: * Parent :foo:bar:baz: ** Child :foo:bar:spam:
Invoking org-set-tags-command with point on Child prepopulates the minibuffer prompt with only the tags :spam: This is because org-get-tags doesn't distinguish between inherited only tags and inherited tags which are also explicitly set on a heading, so org-set-tags-command treats :foo:bar: as inherited only rather than also set locally on the heading. This is undesirable because having tags set directly on a heading has different semantics even if they are also inherited (e.g., the TAGS special property, or when headings will be refiled to a different location later). Attached patch.
>From 934d65537e46c68c10edbfa2d7140cebfe89d271 Mon Sep 17 00:00:00 2001 From: Allen Li <darkfel...@felesatra.moe> Date: Tue, 18 Aug 2020 15:34:38 -0700 Subject: [PATCH] org.el: Don't exclude local tags that are also inherited * lisp/org.el (org-set-tags-command): Don't exclude local tags even if inherited. --- lisp/org.el | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lisp/org.el b/lisp/org.el index fb95590fc..49d7d24f2 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -11880,9 +11880,7 @@ in Lisp code use `org-set-tags' instead." (org-global-tags-completion-table (org-agenda-files))) (or org-current-tag-alist (org-get-buffer-tags))))) - (current-tags - (cl-remove-if (lambda (tag) (get-text-property 0 'inherited tag)) - all-tags)) + (current-tags (org-get-tags nil t)) (inherited-tags (cl-remove-if-not (lambda (tag) (get-text-property 0 'inherited tag)) all-tags)) -- 2.28.0
Emacs : GNU Emacs 27.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.22) of 2020-08-11 Package: Org mode version 9.3.7 (9.3.7-18-g093b47-elpaplus @ /home/ionasal/.emacs.d/elpa/org-plus-contrib-20200810/)