From: Ian Dunn <dunni@gnu.org>
To: emacs-orgmode@gnu.org
Subject: Re: Bug in Sticky Agendas
Date: Fri, 05 Jan 2018 18:15:05 -0500 [thread overview]
Message-ID: <87incfrj7q.fsf@gnu.org> (raw)
In-Reply-To: <87shbriot5.fsf@gnu.org> (Ian Dunn's message of "Sat, 30 Dec 2017 22:00:54 -0500")
[-- Attachment #1: Type: text/plain, Size: 1526 bytes --]
>>>>> "Ian" == Ian Dunn <dunni@gnu.org> writes:
Ian> I've got a few tasks that I don't want appearing in the
Ian> daily agenda, so I tag them with agenda_exclude and set
Ian> org-agenda-skip-function to skip any entries with that tag for
Ian> my daily agenda:
Ian> (defun id/org-skip-by-tag (&rest tags) (if (not (apply
Ian> 'org-entry-has-tags-p tags)) nil (save-excursion
Ian> (outline-next-visible-heading 1) (point))))
Ian> (let* ((agenda-skip '(org-agenda-skip-function (lambda nil
Ian> (id/org-skip-by-tag "agenda_exclude"))))) (setq
Ian> org-agenda-custom-commands `(("d" "Day View" agenda ""
Ian> ((org-agenda-span 'day) ,agenda-skip)) ("T" . "Tags View")
Ian> ("Tn" "Nightly" tags-todo "nightly&TODO==\"TODO\""))))
Ian> As you can see, I've got a second agenda view for my nightly
Ian> checklist. So here's my problem: the skip-function is unset if
Ian> I try using the nightly view.
I went ahead and looked into this myself. Looks like the issue is that the properties (lprops) are set using symbol properties with org-agenda-redo-command, which is buffer-local. However, according to the elisp manual (at least for the upcoming 26.1 release), symbol properties aren't buffer-local; only the value itself is. Thus, lprops are overridden by a new agenda.
I've created the following patch to address this. The symbol property is used as a temporary variable, but the actual lprops are stored as a buffer-local variable to each agenda buffer.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: org.diff --]
[-- Type: text/x-patch, Size: 1754 bytes --]
diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el
index a9ebb793b..5226ef486 100644
--- a/lisp/org-agenda.el
+++ b/lisp/org-agenda.el
@@ -2142,6 +2142,7 @@ When nil, `q' will kill the single agenda buffer."
(defvar org-agenda-this-buffer-is-sticky nil)
(defvar org-agenda-last-indirect-buffer nil
"Last buffer loaded by `org-agenda-tree-to-indirect-buffer'.")
+(defvar org-agenda-lprops nil)
(defconst org-agenda-local-vars
'(org-agenda-this-buffer-name
@@ -2170,6 +2171,7 @@ When nil, `q' will kill the single agenda buffer."
org-agenda-filtered-by-category
org-agenda-filter-form
org-agenda-cycle-counter
+ org-agenda-lprops
org-agenda-last-prefix-arg)
"Variables that must be local in agenda buffers to allow multiple buffers.")
@@ -3749,6 +3751,10 @@ FILTER-ALIST is an alist of filters we need to apply when
(org-uniquify org-done-keywords-for-agenda))
(setq org-agenda-last-prefix-arg current-prefix-arg)
(setq org-agenda-this-buffer-name org-agenda-buffer-name)
+ ;; Don't set these until we know we're in the agenda buffer,
+ ;; and we know they're valid.
+ (setq org-agenda-lprops (or org-agenda-lprops
+ (get 'org-agenda-redo-command 'org-lprops)))
(and name (not org-agenda-name)
(setq-local org-agenda-name name)))
(setq buffer-read-only nil))))
@@ -7312,7 +7318,7 @@ in the agenda."
(cols org-agenda-columns-active)
(line (org-current-line))
(window-line (- line (org-current-line (window-start))))
- (lprops (get 'org-agenda-redo-command 'org-lprops))
+ (lprops org-agenda-lprops)
(redo-cmd (get-text-property p 'org-redo-cmd))
(last-args (get-text-property p 'org-last-args))
(org-agenda-overriding-cmd (get-text-property p 'org-series-cmd))
[-- Attachment #3: Type: text/plain, Size: 14 bytes --]
--
Ian Dunn
next prev parent reply other threads:[~2018-01-05 23:16 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-31 3:00 Bug in Sticky Agendas Ian Dunn
2018-01-05 23:15 ` Ian Dunn [this message]
2018-01-06 9:15 ` Nicolas Goaziou
2018-01-06 22:35 ` Ian Dunn
2018-01-07 1:11 ` Nicolas Goaziou
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87incfrj7q.fsf@gnu.org \
--to=dunni@gnu.org \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.