Fix the order of org-get-tags collected tags from #+filetags
* lisp/org.el (org-get-tags): Now org-get-tags returns tags list with
tags from #+filetags in the beginning.
* testing/lisp/test-org.el (test-org/get-tags): Add test.
Fixes regression caused by commit
<5e27b2fd32
>.
Bug reported in
<https://lists.gnu.org/r/emacs-orgmode/2019-01/msg00052.html>.
This commit is contained in:
parent
e8ad394c74
commit
34e5dcfb06
32
lisp/org.el
32
lisp/org.el
|
@ -14714,26 +14714,30 @@ When argument POS is non-nil, retrieve tags for headline at POS.
|
|||
|
||||
According to `org-use-tags-inheritance', tags may be inherited
|
||||
from parent headlines, and from the whole document, through
|
||||
`org-file-tags'. However, when optional argument LOCAL is
|
||||
non-nil, only return tags specified at the headline.
|
||||
`org-file-tags'. In this case, the returned list of tags
|
||||
contains tags in this order: file tags, tags inherited from
|
||||
parent headlines, local tags.
|
||||
|
||||
However, when optional argument LOCAL is non-nil, only return
|
||||
tags specified at the headline.
|
||||
|
||||
Inherited tags have the `inherited' text property."
|
||||
(if (and org-trust-scanner-tags
|
||||
(or (not pos) (eq pos (point)))
|
||||
(not local))
|
||||
(or (not pos) (eq pos (point)))
|
||||
(not local))
|
||||
org-scanner-tags
|
||||
(org-with-point-at (or pos (point))
|
||||
(unless (org-before-first-heading-p)
|
||||
(org-back-to-heading t)
|
||||
(let ((ltags (org--get-local-tags)) itags)
|
||||
(if (or local (not org-use-tag-inheritance)) ltags
|
||||
(setq itags org-file-tags)
|
||||
(while (org-up-heading-safe)
|
||||
(setq itags (append (mapcar #'org-add-prop-inherited
|
||||
(org--get-local-tags))
|
||||
itags)))
|
||||
(delete-dups
|
||||
(append (org-remove-uninherited-tags itags) ltags))))))))
|
||||
(org-back-to-heading t)
|
||||
(let ((ltags (org--get-local-tags)) itags)
|
||||
(if (or local (not org-use-tag-inheritance)) ltags
|
||||
(while (org-up-heading-safe)
|
||||
(setq itags (append (mapcar #'org-add-prop-inherited
|
||||
(org--get-local-tags))
|
||||
itags)))
|
||||
(setq itags (append org-file-tags itags))
|
||||
(delete-dups
|
||||
(append (org-remove-uninherited-tags itags) ltags))))))))
|
||||
|
||||
(defun org-get-buffer-tags ()
|
||||
"Get a table of all tags used in the buffer, for completion."
|
||||
|
|
|
@ -6217,6 +6217,17 @@ Paragraph<point>"
|
|||
(let ((org-use-tag-inheritance t)
|
||||
(org-tags-exclude-from-inheritance '("foo")))
|
||||
(org-get-tags)))))
|
||||
;; Test the collection of tags from #+filetags and parent tags.
|
||||
(should
|
||||
(equal '("a" "b" "c" "d")
|
||||
(org-test-with-temp-text (concat "#+filetags: a\n"
|
||||
"* Level 1 :b:\n"
|
||||
"** Level 2 :c:\n"
|
||||
"*** Level 3 :d:\n"
|
||||
"<point>")
|
||||
(let ((org-use-tag-inheritance t))
|
||||
(org-mode-restart) ;So that `org-file-tags' get populated from #+filetags
|
||||
(org-get-tags)))))
|
||||
;; Pathological case: tagged headline with an empty body.
|
||||
(should (org-test-with-temp-text "* :tag:" (org-get-tags))))
|
||||
|
||||
|
|
Loading…
Reference in New Issue