diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el index 3255d7323..eaeddb662 100644 --- a/lisp/org-agenda.el +++ b/lisp/org-agenda.el @@ -2191,30 +2191,29 @@ The following commands are available: face-remapping-alist)) (save (buffer-local-variables))) (kill-all-local-variables) - (cond (org-agenda-doing-sticky-redo - ;; Refreshing sticky agenda-buffer - ;; - ;; Preserve the value of `org-agenda-local-vars' variables. - (mapc #'make-local-variable org-agenda-local-vars) - (dolist (elem save) - (pcase elem - (`(,var . ,val) ;ignore unbound variables - (when (and val (memq var org-agenda-local-vars)) - (set var val))))) - (setq-local org-agenda-this-buffer-is-sticky t)) - (org-agenda-sticky - ;; Creating a sticky Agenda buffer for the first time - (mapc 'make-local-variable org-agenda-local-vars) - (setq-local org-agenda-this-buffer-is-sticky t)) - (t - ;; Creating a non-sticky agenda buffer - (setq-local org-agenda-this-buffer-is-sticky nil))) - (mapc #'make-local-variable agenda-local-vars-to-keep) - (dolist (elem save) - (pcase elem - (`(,var . ,val) ;ignore unbound variables - (when (and val (memq var agenda-local-vars-to-keep)) - (set var val)))))) + (cl-flet ((reset-saved (var-set) + "Reset variables in VAR-SET to possibly stored value in SAVE." + (dolist (elem save) + (pcase elem + (`(,var . ,val) ;ignore unbound variables + (when (and val (memq var var-set)) + (set var val))))))) + (cond (org-agenda-doing-sticky-redo + ;; Refreshing sticky agenda-buffer + ;; + ;; Preserve the value of `org-agenda-local-vars' variables. + (mapc #'make-local-variable org-agenda-local-vars) + (reset-saved org-agenda-local-vars) + (setq-local org-agenda-this-buffer-is-sticky t)) + (org-agenda-sticky + ;; Creating a sticky Agenda buffer for the first time + (mapc 'make-local-variable org-agenda-local-vars) + (setq-local org-agenda-this-buffer-is-sticky t)) + (t + ;; Creating a non-sticky agenda buffer + (setq-local org-agenda-this-buffer-is-sticky nil))) + (mapc #'make-local-variable agenda-local-vars-to-keep) + (reset-saved agenda-local-vars-to-keep))) (setq org-agenda-undo-list nil org-agenda-pending-undo-list nil org-agenda-bulk-marked-entries nil) diff --git a/testing/lisp/test-org-agenda.el b/testing/lisp/test-org-agenda.el index 552792fe5..6aaa88fc3 100644 --- a/testing/lisp/test-org-agenda.el +++ b/testing/lisp/test-org-agenda.el @@ -123,6 +123,27 @@ (org-toggle-sticky-agenda) (org-test-agenda--kill-all-agendas)) + +;; agenda redo + +(require 'face-remap) + +(ert-deftest test-org-agenda/rescale () + "Text scale survives `org-agenda-redo'." + (org-test-agenda--kill-all-agendas) + (unwind-protect + (let ((org-agenda-span 'day) + org-agenda-files) + (org-agenda-list) + (set-buffer org-agenda-buffer-name) + (text-scale-mode) + (text-scale-set 11) + (cl-assert (and (boundp text-scale-mode) text-scale-mode)) + (org-agenda-redo) + (should text-scale-mode) + (should (= 11 text-scale-mode-amount))) + (org-test-agenda--kill-all-agendas))) + (provide 'test-org-agenda)