summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaushal Modi <kaushal.modi@gmail.com>2019-01-04 16:43:10 -0500
committerKaushal Modi <kaushal.modi@gmail.com>2019-01-08 11:29:58 -0500
commit34e5dcfb06800802a5e06f13340d646b6d829f04 (patch)
tree647fa97103530a7f59d17f93c49d643321652902
parente8ad394c74ae612e6283747b20fdeaaf0e20aee2 (diff)
downloadorg-mode-34e5dcfb06800802a5e06f13340d646b6d829f04.tar.gz
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 <https://code.orgmode.org/bzg/org-mode/commit/5e27b2fd326810e4ed876b094df852338909c1f8>. Bug reported in <https://lists.gnu.org/r/emacs-orgmode/2019-01/msg00052.html>.
-rw-r--r--lisp/org.el32
-rw-r--r--testing/lisp/test-org.el11
2 files changed, 29 insertions, 14 deletions
diff --git a/lisp/org.el b/lisp/org.el
index d299356..c6bd702 100644
--- a/lisp/org.el
+++ b/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."
diff --git a/testing/lisp/test-org.el b/testing/lisp/test-org.el
index a77c0f7..38df73d 100644
--- a/testing/lisp/test-org.el
+++ b/testing/lisp/test-org.el
@@ -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))))