forked from mirrors/org-mode
Restore previous behavior for inherited tags, now just more flexible
* org.el (org-get-tags-at): Remove duplicate inherited tags. * org-agenda.el (org-agenda-show-inherited-tags): Allow to be set to 'always or to a list of agenda types. (org-agenda-finalize): Rework conditions under which inherited tags should be made available even when not displayed. (org-search-view, org-agenda-get-todos) (org-agenda-get-timestamps, org-agenda-get-sexps) (org-agenda-get-progress, org-agenda-get-scheduled) (org-agenda-get-blocks): Use new possible values of `org-agenda-show-inherited-tags'. Thanks to Karl Voit and Tassilo Horn who first reported this.
This commit is contained in:
parent
d5268b051b
commit
3c4df588e8
|
@ -1648,26 +1648,53 @@ When non-nil, this must be the number of minutes, e.g. 60 for one hour."
|
|||
(const :tag "No default duration")))
|
||||
|
||||
(defcustom org-agenda-show-inherited-tags t
|
||||
"Non-nil means show inherited tags in each agenda line."
|
||||
"Non-nil means show inherited tags in each agenda line.
|
||||
|
||||
When this option is set to 'always, it take precedences over
|
||||
`org-agenda-use-tag-inheritance' and inherited tags are shown
|
||||
in every agenda.
|
||||
|
||||
When this option is set to t (the default), inherited tags are
|
||||
shown when they are available, i.e. when the value of
|
||||
`org-agenda-use-tag-inheritance' has been taken into account.
|
||||
|
||||
This can be set to a list of agenda types in which the agenda
|
||||
must display the inherited tags. Available types are 'todo,
|
||||
'agenda, 'search and 'timeline.
|
||||
|
||||
When set to nil, never show inherited tags in agenda lines."
|
||||
:group 'org-agenda-line-format
|
||||
:type 'boolean)
|
||||
:group 'org-agenda
|
||||
:version "24.3"
|
||||
:type '(choice
|
||||
(const :tag "Show inherited tags when available" t)
|
||||
(const :tag "Always show inherited tags" 'always)
|
||||
(repeat :tag "Show inherited tags only in selected agenda types"
|
||||
(symbol :tag "Agenda type"))))
|
||||
|
||||
(defcustom org-agenda-use-tag-inheritance '(todo search timeline agenda)
|
||||
"List of agenda view types where to use tag inheritance.
|
||||
|
||||
In tags/tags-todo/tags-tree agenda views, tag inheritance is
|
||||
controlled by `org-use-tag-inheritance'. In other agenda types,
|
||||
`org-use-tag-inheritance' is not used when selecting the agenda
|
||||
entries, but you may want the agenda to use the inherited tags
|
||||
anyway, e.g. for later tag filtering.
|
||||
`org-use-tag-inheritance' is not used for the selection of the
|
||||
agenda entries. Still, you may want the agenda to be aware of
|
||||
the inherited tags anyway, e.g. for later tag filtering.
|
||||
|
||||
The default value reset tags in every agenda type. Setting this
|
||||
option to nil will speed up non-tags agenda view a lot.
|
||||
Allowed value are 'todo, 'search, 'timeline and 'agenda.
|
||||
|
||||
Allowed value are 'todo, 'search, 'timeline and 'agenda."
|
||||
:version "24.3"
|
||||
This variable has no effect if `org-agenda-show-inherited-tags'
|
||||
is set to 'always. In that case, the agenda is aware of those
|
||||
tags.
|
||||
|
||||
The default value sets tags in every agenda type. Setting this
|
||||
option to nil will speed up non-tags agenda view a lot."
|
||||
:group 'org-agenda
|
||||
:type '(repeat (symbol :tag "Agenda type")))
|
||||
:version "24.3"
|
||||
:type '(choice
|
||||
(const :tag "Use tag inheritance in all agenda types" t)
|
||||
(repeat :tag "Use tag inheritance in selected agenda types"
|
||||
(symbol :tag "Agenda type"))))
|
||||
|
||||
(defcustom org-agenda-hide-tags-regexp nil
|
||||
"Regular expression used to filter away specific tags in agenda views.
|
||||
|
@ -3569,8 +3596,14 @@ generating a new one."
|
|||
(save-excursion (next-single-property-change (point-min) 'org-habit-p)))
|
||||
(org-habit-insert-consistency-graphs))
|
||||
(setq org-agenda-type (org-get-at-bol 'org-agenda-type))
|
||||
(when (delq nil (mapcar (lambda (tp) (org-agenda-check-type nil tp))
|
||||
org-agenda-use-tag-inheritance))
|
||||
(unless (or (eq org-agenda-show-inherited-tags 'always)
|
||||
(and (listp org-agenda-show-inherited-tags)
|
||||
(memq org-agenda-type org-agenda-show-inherited-tags))
|
||||
(and (eq org-agenda-show-inherited-tags t)
|
||||
(or (eq org-agenda-use-tag-inheritance t)
|
||||
(and (listp org-agenda-use-tag-inheritance)
|
||||
(not (memq org-agenda-type
|
||||
org-agenda-use-tag-inheritance))))))
|
||||
(let (mrk)
|
||||
(save-excursion
|
||||
(goto-char (point-min))
|
||||
|
@ -4290,7 +4323,7 @@ in `org-agenda-text-search-extra-files'."
|
|||
'help-echo (format "mouse-2 or RET jump to location")))
|
||||
(full-words org-agenda-search-view-force-full-words)
|
||||
(org-agenda-text-search-extra-files org-agenda-text-search-extra-files)
|
||||
regexp rtn rtnall files file pos
|
||||
regexp rtn rtnall files file pos inherited-tags
|
||||
marker category category-pos tags c neg re boolean
|
||||
ee txt beg end words regexps+ regexps- hdl-only buffer beg1 str)
|
||||
(unless (and (not edit-at)
|
||||
|
@ -4444,7 +4477,13 @@ in `org-agenda-text-search-extra-files'."
|
|||
(setq marker (org-agenda-new-marker (point))
|
||||
category (org-get-category)
|
||||
category-pos (get-text-property (point) 'org-category-position)
|
||||
tags (org-get-tags-at nil t)
|
||||
inherited-tags
|
||||
(or (eq org-agenda-show-inherited-tags 'always)
|
||||
(memq 'todo org-agenda-show-inherited-tags)
|
||||
(and (eq org-agenda-show-inherited-tags t)
|
||||
(or (eq org-agenda-use-tag-inheritance t)
|
||||
(memq 'todo org-agenda-use-tag-inheritance))))
|
||||
tags (org-get-tags-at nil (not inherited-tags))
|
||||
txt (org-agenda-format-item
|
||||
""
|
||||
(buffer-substring-no-properties
|
||||
|
@ -5250,7 +5289,7 @@ the documentation of `org-diary'."
|
|||
"\\|") "\\)"))
|
||||
(t org-not-done-regexp))))
|
||||
marker priority category category-pos tags todo-state
|
||||
ee txt beg end)
|
||||
ee txt beg end inherited-tags)
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward regexp nil t)
|
||||
(catch :skip
|
||||
|
@ -5268,7 +5307,14 @@ the documentation of `org-diary'."
|
|||
category-pos (get-text-property (point) 'org-category-position)
|
||||
txt (org-trim
|
||||
(buffer-substring (match-beginning 2) (match-end 0)))
|
||||
tags (org-get-tags-at nil t)
|
||||
inherited-tags
|
||||
(or (eq org-agenda-show-inherited-tags 'always)
|
||||
(and (listp org-agenda-show-inherited-tags)
|
||||
(memq 'todo org-agenda-show-inherited-tags))
|
||||
(and (eq org-agenda-show-inherited-tags t)
|
||||
(or (eq org-agenda-use-tag-inheritance t)
|
||||
(memq 'todo org-agenda-use-tag-inheritance))))
|
||||
tags (org-get-tags-at nil (not inherited-tags))
|
||||
txt (org-agenda-format-item "" txt category tags t)
|
||||
priority (1+ (org-get-priority txt))
|
||||
todo-state (org-get-todo-state))
|
||||
|
@ -5395,7 +5441,8 @@ Do we have a reason to ignore this TODO entry because it has a time stamp?
|
|||
"\\|\\(<%%\\(([^>\n]+)\\)>\\)"))
|
||||
marker hdmarker deadlinep scheduledp clockp closedp inactivep
|
||||
donep tmp priority category category-pos ee txt timestr tags
|
||||
b0 b3 e3 head todo-state end-of-match show-all warntime habitp)
|
||||
b0 b3 e3 head todo-state end-of-match show-all warntime habitp
|
||||
inherited-tags)
|
||||
(goto-char (point-min))
|
||||
(while (setq end-of-match (re-search-forward regexp nil t))
|
||||
(setq b0 (match-beginning 0)
|
||||
|
@ -5447,7 +5494,14 @@ Do we have a reason to ignore this TODO entry because it has a time stamp?
|
|||
(assoc (point) deadline-position-alist))
|
||||
(throw :skip nil))
|
||||
(setq hdmarker (org-agenda-new-marker)
|
||||
tags (org-get-tags-at nil t))
|
||||
inherited-tags
|
||||
(or (eq org-agenda-show-inherited-tags 'always)
|
||||
(and (listp org-agenda-show-inherited-tags)
|
||||
(memq 'agenda org-agenda-show-inherited-tags))
|
||||
(and (eq org-agenda-show-inherited-tags t)
|
||||
(or (eq org-agenda-use-tag-inheritance t)
|
||||
(memq 'agenda org-agenda-use-tag-inheritance))))
|
||||
tags (org-get-tags-at nil (not inherited-tags)))
|
||||
(looking-at "\\*+[ \t]+\\([^\r\n]+\\)")
|
||||
(setq head (or (match-string 1) ""))
|
||||
(setq txt (org-agenda-format-item
|
||||
|
@ -5479,7 +5533,7 @@ Do we have a reason to ignore this TODO entry because it has a time stamp?
|
|||
(abbreviate-file-name buffer-file-name))))
|
||||
(regexp "^&?%%(")
|
||||
marker category extra category-pos ee txt tags entry
|
||||
result beg b sexp sexp-entry todo-state warntime)
|
||||
result beg b sexp sexp-entry todo-state warntime inherited-tags)
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward regexp nil t)
|
||||
(catch :skip
|
||||
|
@ -5497,7 +5551,14 @@ Do we have a reason to ignore this TODO entry because it has a time stamp?
|
|||
(setq marker (org-agenda-new-marker beg)
|
||||
category (org-get-category beg)
|
||||
category-pos (get-text-property beg 'org-category-position)
|
||||
tags (save-excursion (org-back-to-heading t) (org-get-tags-at nil t))
|
||||
inherited-tags
|
||||
(or (eq org-agenda-show-inherited-tags 'always)
|
||||
(and (listp org-agenda-show-inherited-tags)
|
||||
(memq 'agenda org-agenda-show-inherited-tags))
|
||||
(and (eq org-agenda-show-inherited-tags t)
|
||||
(or (eq org-agenda-use-tag-inheritance t)
|
||||
(memq 'agenda org-agenda-use-tag-inheritance))))
|
||||
tags (org-get-tags-at nil (not inherited-tags))
|
||||
todo-state (org-get-todo-state)
|
||||
warntime (get-text-property (point) 'org-appt-warntime)
|
||||
extra nil)
|
||||
|
@ -5628,7 +5689,7 @@ please use `org-class' instead."
|
|||
1 11))))
|
||||
(org-agenda-search-headline-for-time nil)
|
||||
marker hdmarker priority category category-pos tags closedp
|
||||
statep clockp state ee txt extra timestr rest clocked)
|
||||
statep clockp state ee txt extra timestr rest clocked inherited-tags)
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward regexp nil t)
|
||||
(catch :skip
|
||||
|
@ -5666,7 +5727,14 @@ please use `org-class' instead."
|
|||
(setq txt org-agenda-no-heading-message)
|
||||
(goto-char (match-beginning 0))
|
||||
(setq hdmarker (org-agenda-new-marker)
|
||||
tags (org-get-tags-at nil t))
|
||||
inherited-tags
|
||||
(or (eq org-agenda-show-inherited-tags 'always)
|
||||
(and (listp org-agenda-show-inherited-tags)
|
||||
(memq 'todo org-agenda-show-inherited-tags))
|
||||
(and (eq org-agenda-show-inherited-tags t)
|
||||
(or (eq org-agenda-use-tag-inheritance t)
|
||||
(memq 'todo org-agenda-use-tag-inheritance))))
|
||||
tags (org-get-tags-at nil (not inherited-tags)))
|
||||
(looking-at "\\*+[ \t]+\\([^\r\n]+\\)")
|
||||
(setq txt (match-string 1))
|
||||
(when extra
|
||||
|
@ -5944,7 +6012,7 @@ FRACTION is what fraction of the head-warning time has passed."
|
|||
deadline-results))
|
||||
d2 diff pos pos1 category category-pos tags donep
|
||||
ee txt head pastschedp todo-state face timestr s habitp show-all
|
||||
did-habit-check-p warntime)
|
||||
did-habit-check-p warntime inherited-tags)
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward regexp nil t)
|
||||
(catch :skip
|
||||
|
@ -6006,7 +6074,14 @@ FRACTION is what fraction of the head-warning time has passed."
|
|||
pastschedp))
|
||||
(setq mm (assoc pos1 deadline-position-alist)))
|
||||
(throw :skip nil)))
|
||||
(setq tags (org-get-tags-at nil t))
|
||||
(setq inherited-tags
|
||||
(or (eq org-agenda-show-inherited-tags 'always)
|
||||
(and (listp org-agenda-show-inherited-tags)
|
||||
(memq 'agenda org-agenda-show-inherited-tags))
|
||||
(and (eq org-agenda-show-inherited-tags t)
|
||||
(or (eq org-agenda-use-tag-inheritance t)
|
||||
(memq 'agenda org-agenda-use-tag-inheritance))))
|
||||
tags (org-get-tags-at nil (not inherited-tags)))
|
||||
(setq head (buffer-substring-no-properties
|
||||
(point)
|
||||
(progn (skip-chars-forward "^\r\n") (point))))
|
||||
|
@ -6061,7 +6136,7 @@ FRACTION is what fraction of the head-warning time has passed."
|
|||
(regexp org-tr-regexp)
|
||||
(d0 (calendar-absolute-from-gregorian date))
|
||||
marker hdmarker ee txt d1 d2 s1 s2 category category-pos
|
||||
todo-state tags pos head donep)
|
||||
todo-state tags pos head donep inherited-tags)
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward regexp nil t)
|
||||
(catch :skip
|
||||
|
@ -6087,8 +6162,15 @@ FRACTION is what fraction of the head-warning time has passed."
|
|||
(if (not (re-search-backward org-outline-regexp-bol nil t))
|
||||
(setq txt org-agenda-no-heading-message)
|
||||
(goto-char (match-beginning 0))
|
||||
(setq hdmarker (org-agenda-new-marker (point)))
|
||||
(setq tags (org-get-tags-at nil t))
|
||||
(setq hdmarker (org-agenda-new-marker (point))
|
||||
inherited-tags
|
||||
(or (eq org-agenda-show-inherited-tags 'always)
|
||||
(and (listp org-agenda-show-inherited-tags)
|
||||
(memq 'agenda org-agenda-show-inherited-tags))
|
||||
(and (eq org-agenda-show-inherited-tags t)
|
||||
(or (eq org-agenda-use-tag-inheritance t)
|
||||
(memq 'agenda org-agenda-use-tag-inheritance))))
|
||||
tags (org-get-tags-at nil (not inherited-tags)))
|
||||
(looking-at "\\*+[ \t]+\\([^\r\n]+\\)")
|
||||
(setq head (match-string 1))
|
||||
(let ((remove-re
|
||||
|
|
|
@ -13526,7 +13526,10 @@ ignore inherited ones."
|
|||
(error nil)))))
|
||||
(if local
|
||||
tags
|
||||
(append (org-remove-uninherited-tags org-file-tags) tags))))))
|
||||
(reverse (delete-dups
|
||||
(reverse (append
|
||||
(org-remove-uninherited-tags
|
||||
org-file-tags) tags)))))))))
|
||||
|
||||
(defun org-add-prop-inherited (s)
|
||||
(add-text-properties 0 (length s) '(inherited t) s)
|
||||
|
|
Loading…
Reference in a new issue