forked from mirrors/org-mode
Ensure that org-get-tags returns all local tags
* lisp/org.el: (org-get-tags) Create a clearer separation between local and inherited tags in the function, so that org-remove-uninherited tags is only run on inherited tags. This is important to avoid destroying existing tags when adding new tags. * testing/lisp/test-org.el: (test-org/get-tags) Add regression test
This commit is contained in:
parent
ab1f7712de
commit
5e27b2fd32
15
lisp/org.el
15
lisp/org.el
|
@ -14722,14 +14722,15 @@ Inherited tags have the `inherited' text property."
|
||||||
(org-with-point-at (or pos (point))
|
(org-with-point-at (or pos (point))
|
||||||
(unless (org-before-first-heading-p)
|
(unless (org-before-first-heading-p)
|
||||||
(org-back-to-heading t)
|
(org-back-to-heading t)
|
||||||
(let ((tags (org--get-local-tags)))
|
(let ((ltags (org--get-local-tags)) itags)
|
||||||
(if (or local (not org-use-tag-inheritance)) tags
|
(if (or local (not org-use-tag-inheritance)) ltags
|
||||||
|
(setq itags org-file-tags)
|
||||||
(while (org-up-heading-safe)
|
(while (org-up-heading-safe)
|
||||||
(setq tags (append (mapcar #'org-add-prop-inherited
|
(setq itags (append (mapcar #'org-add-prop-inherited
|
||||||
(org--get-local-tags))
|
(org--get-local-tags))
|
||||||
tags)))
|
itags)))
|
||||||
(org-remove-uninherited-tags
|
(delete-dups
|
||||||
(delete-dups (append org-file-tags tags)))))))))
|
(append (org-remove-uninherited-tags itags) ltags))))))))
|
||||||
|
|
||||||
(defun org-get-buffer-tags ()
|
(defun org-get-buffer-tags ()
|
||||||
"Get a table of all tags used in the buffer, for completion."
|
"Get a table of all tags used in the buffer, for completion."
|
||||||
|
|
|
@ -6190,6 +6190,13 @@ Paragraph<point>"
|
||||||
(equal '("foo")
|
(equal '("foo")
|
||||||
(org-test-with-temp-text "* H1 :foo:\n* <point>H2 :bar:"
|
(org-test-with-temp-text "* H1 :foo:\n* <point>H2 :bar:"
|
||||||
(org-get-tags 1))))
|
(org-get-tags 1))))
|
||||||
|
;; Make sure tags excluded from inheritance are returned if local
|
||||||
|
(should
|
||||||
|
(equal '("foo")
|
||||||
|
(org-test-with-temp-text "* Test :foo:"
|
||||||
|
(let ((org-use-tag-inheritance t)
|
||||||
|
(org-tags-exclude-from-inheritance '("foo")))
|
||||||
|
(org-get-tags)))))
|
||||||
;; Pathological case: tagged headline with an empty body.
|
;; Pathological case: tagged headline with an empty body.
|
||||||
(should (org-test-with-temp-text "* :tag:" (org-get-tags))))
|
(should (org-test-with-temp-text "* :tag:" (org-get-tags))))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue