diff options
author | Kyle Meyer <kyle@kyleam.com> | 2020-11-09 01:02:45 -0500 |
---|---|---|
committer | Kyle Meyer <kyle@kyleam.com> | 2020-11-09 01:07:35 -0500 |
commit | 95af0a244f2166835baea4089807c175eb540463 (patch) | |
tree | 60acdccf86ffd4402621ad6eb8563cf4ed802c63 | |
parent | 49f4c364fd09c19c59ce8d41a2e7f99e271e580f (diff) | |
download | org-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.el | 61 | ||||
-rw-r--r-- | testing/lisp/test-org-agenda.el | 15 |
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 () |