summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyle Meyer <kyle@kyleam.com>2020-11-09 01:02:45 -0500
committerKyle Meyer <kyle@kyleam.com>2020-11-09 01:07:35 -0500
commit95af0a244f2166835baea4089807c175eb540463 (patch)
tree60acdccf86ffd4402621ad6eb8563cf4ed802c63
parent49f4c364fd09c19c59ce8d41a2e7f99e271e580f (diff)
downloadorg-mode-95af0a244f2166835baea4089807c175eb540463.tar.gz
agenda: Consistently clear temporary agenda name
* lisp/org-agenda.el (org-agenda--get-buffer-name): New function. (org-agenda-list): Move buffer name logic to shared function. (org-search-view): (org-todo-list): (org-tags-view): Use org-agenda--get-buffer-name. * testing/lisp/test-org-agenda.el (test-org-agenda/sticky-agenda-name): Add test. The different agenda commands repeat similar logic for determining the buffer name, mixing in a tailored sticky buffer format. However, only org-agenda-list falls back to "*Org Agenda*" when org-agenda-sticky is nil. As a result, a buffer generated with org-follow-timestamp-link, which gets a custom name, is not reset when commands other than org-agenda-list generate a new agenda. Move the logic from org-agenda-list to a helper function and use it across the agenda-generating commands. Reported-by: Garjola Dindi <garjola@garjola.net> Ref: https://orgmode.org/list/87tuuj4lo9.fsf@pc-117-162.ovh.com
-rw-r--r--lisp/org-agenda.el61
-rw-r--r--testing/lisp/test-org-agenda.el15
2 files changed, 44 insertions, 32 deletions
diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el
index 5815519..b6d15e7 100644
--- a/lisp/org-agenda.el
+++ b/lisp/org-agenda.el
@@ -3760,6 +3760,14 @@ generating a new one."
;; does not have org variables local
org-agenda-this-buffer-is-sticky))))
+(defvar org-agenda-buffer-tmp-name nil)
+
+(defun org-agenda--get-buffer-name (sticky-name)
+ (or org-agenda-buffer-tmp-name
+ (and org-agenda-doing-sticky-redo org-agenda-buffer-name)
+ sticky-name
+ "*Org Agenda*"))
+
(defun org-agenda-prepare-window (abuf filter-alist)
"Setup agenda buffer in the window.
ABUF is the buffer for the agenda window.
@@ -4210,7 +4218,6 @@ See the docstring of `org-read-date' for details.")
(defvar org-starting-day nil) ; local variable in the agenda buffer
(defvar org-arg-loc nil) ; local variable
-(defvar org-agenda-buffer-tmp-name nil)
;;;###autoload
(defun org-agenda-list (&optional arg start-day span with-hour)
"Produce a daily/weekly view from all files in variable `org-agenda-files'.
@@ -4238,15 +4245,13 @@ items if they have an hour specification like [h]h:mm."
(user-error "Agenda creation impossible for this span(=%d days)." span)))
(catch 'exit
(setq org-agenda-buffer-name
- (or org-agenda-buffer-tmp-name
- (and org-agenda-doing-sticky-redo org-agenda-buffer-name)
- (when org-agenda-sticky
+ (org-agenda--get-buffer-name
+ (and org-agenda-sticky
(cond ((and org-keys (stringp org-match))
(format "*Org Agenda(%s:%s)*" org-keys org-match))
(org-keys
(format "*Org Agenda(%s)*" org-keys))
- (t "*Org Agenda(a)*")))
- "*Org Agenda*"))
+ (t "*Org Agenda(a)*")))))
(org-agenda-prepare "Day/Week")
(setq start-day (or start-day org-agenda-start-day))
(when (stringp start-day)
@@ -4536,12 +4541,15 @@ is active."
(edit-at string))
'org-agenda-search-history)))
(catch 'exit
- (when org-agenda-sticky
- (setq org-agenda-buffer-name
- (if (stringp string)
- (format "*Org Agenda(%s:%s)*"
- (or org-keys (or (and todo-only "S") "s")) string)
- (format "*Org Agenda(%s)*" (or (and todo-only "S") "s")))))
+ (setq org-agenda-buffer-name
+ (org-agenda--get-buffer-name
+ (and org-agenda-sticky
+ (if (stringp string)
+ (format "*Org Agenda(%s:%s)*"
+ (or org-keys (or (and todo-only "S") "s"))
+ string)
+ (format "*Org Agenda(%s)*"
+ (or (and todo-only "S") "s"))))))
(org-agenda-prepare "SEARCH")
(org-compile-prefix-format 'search)
(org-set-sorting-strategy 'search)
@@ -4788,12 +4796,13 @@ for a keyword. A numeric prefix directly selects the Nth keyword in
(completion-ignore-case t)
kwds org-select-this-todo-keyword rtn rtnall files file pos)
(catch 'exit
- (when org-agenda-sticky
- (setq org-agenda-buffer-name
- (if (stringp org-select-this-todo-keyword)
- (format "*Org Agenda(%s:%s)*" (or org-keys "t")
- org-select-this-todo-keyword)
- (format "*Org Agenda(%s)*" (or org-keys "t")))))
+ (setq org-agenda-buffer-name
+ (org-agenda--get-buffer-name
+ (and org-agenda-sticky
+ (if (stringp org-select-this-todo-keyword)
+ (format "*Org Agenda(%s:%s)*" (or org-keys "t")
+ org-select-this-todo-keyword)
+ (format "*Org Agenda(%s)*" (or org-keys "t"))))))
(org-agenda-prepare "TODO")
(setq kwds org-todo-keywords-for-agenda
org-select-this-todo-keyword (if (stringp arg) arg
@@ -4880,13 +4889,15 @@ The prefix arg TODO-ONLY limits the search to TODO entries."
(when (and (stringp match) (not (string-match "\\S-" match)))
(setq match nil))
(catch 'exit
- ;; TODO: this code is repeated a lot...
- (when org-agenda-sticky
- (setq org-agenda-buffer-name
- (if (stringp match)
- (format "*Org Agenda(%s:%s)*"
- (or org-keys (or (and todo-only "M") "m")) match)
- (format "*Org Agenda(%s)*" (or (and todo-only "M") "m")))))
+ (setq org-agenda-buffer-name
+ (org-agenda--get-buffer-name
+ (and org-agenda-sticky
+ (if (stringp match)
+ (format "*Org Agenda(%s:%s)*"
+ (or org-keys (or (and todo-only "M") "m"))
+ match)
+ (format "*Org Agenda(%s)*"
+ (or (and todo-only "M") "m"))))))
(setq matcher (org-make-tags-matcher match))
;; Prepare agendas (and `org-tag-alist-for-agenda') before
;; expanding tags within `org-make-tags-matcher'
diff --git a/testing/lisp/test-org-agenda.el b/testing/lisp/test-org-agenda.el
index 1782227..7c1bfb2 100644
--- a/testing/lisp/test-org-agenda.el
+++ b/testing/lisp/test-org-agenda.el
@@ -111,13 +111,14 @@
(buf (get-buffer org-agenda-buffer-name))
org-agenda-files)
(when buf (kill-buffer buf))
- (org-test-with-temp-text "<2017-03-17 Fri>"
- (org-follow-timestamp-link)) ;creates a sticky agenda
- (org-test-agenda--kill-all-agendas)
- (org-agenda-list)
- (should (= 1 (length (org-test-agenda--agenda-buffers))))
- (should (string= "*Org Agenda*"
- (buffer-name (car (org-test-agenda--agenda-buffers))))))
+ (dolist (fn '(org-agenda-list org-todo-list))
+ (org-test-with-temp-text "<2017-03-17 Fri>"
+ (org-follow-timestamp-link)) ;creates a sticky agenda
+ (org-test-agenda--kill-all-agendas)
+ (funcall fn)
+ (should (= 1 (length (org-test-agenda--agenda-buffers))))
+ (should (string= "*Org Agenda*"
+ (buffer-name (car (org-test-agenda--agenda-buffers)))))))
(org-test-agenda--kill-all-agendas))
(ert-deftest test-org-agenda/sticky-agenda-name-after-reload ()