On Wed, Feb 13, 2019 at 8:17 AM Allen Li <darkfel...@felesatra.moe> wrote: > > 0. Make /tmp/tmp.org containing > > * TODO foo bar > > 1. emacs -Q > 2. Eval (setq org-agenda-custom-commands '(("n" "n" alltodo "" > ((org-agenda-overriding-columns-format "%TODO"))))) > 3. Eval (setq org-agenda-files '("/tmp/tmp.org")) > 4. M-x org-agenda RET n > 5. Move point to item > 6. C-c C-x C-c (column view) > 7. g > > Expected: > > Column format is preserved > > Actual: > > Column format is reset > > (The example uses the version of Org shipped with Emacs, but I can > reproduce with my personal config using latest org-contrib-plus)
I think the right way to fix this is by using a separate variable for setting buffer local values. I have attached a patch implementing this on maint. > > Emacs : GNU Emacs 26.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.22.30) > of 2018-07-05 > Package: Org mode version 9.2.1 (9.2.1-2-gc6d37c-elpaplus @ > /home/ionasal/.emacs.d/elpa/org-plus-contrib-20190204/)
From eba87f9de87cc661c99d12ef31b961c36b3d528b Mon Sep 17 00:00:00 2001 From: Allen Li <darkfel...@felesatra.moe> Date: Sat, 16 Feb 2019 17:21:04 -0800 Subject: [PATCH] Fix buffer local org-agenda-overriding-columns-format bug Setting org-agenda-overriding-columns-format as a buffer local value interferes with how it is used as a dynamically scoped var, so use a separate variable for buffer local setting. --- lisp/org-agenda.el | 3 ++- lisp/org-colview.el | 9 ++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el index 489ecec95..054c0b268 100644 --- a/lisp/org-agenda.el +++ b/lisp/org-agenda.el @@ -3768,6 +3768,7 @@ FILTER-ALIST is an alist of filters we need to apply when (setq buffer-read-only nil)))) (defvar org-agenda-overriding-columns-format) ; From org-colview.el +(defvar org-agenda-local-overriding-columns-format) ; From org-colview.el (defun org-agenda-finalize () "Finishing touch for the agenda buffer, called just before displaying it." (unless org-agenda-multi @@ -3783,7 +3784,7 @@ FILTER-ALIST is an alist of filters we need to apply when (unless org-agenda-with-colors (remove-text-properties (point-min) (point-max) '(face nil))) (when (bound-and-true-p org-agenda-overriding-columns-format) - (setq-local org-agenda-overriding-columns-format + (setq-local org-agenda-local-overriding-columns-format org-agenda-overriding-columns-format)) (when org-agenda-view-columns-initially (org-agenda-columns)) diff --git a/lisp/org-colview.el b/lisp/org-colview.el index 746426bc7..2fbb5aa6c 100644 --- a/lisp/org-colview.el +++ b/lisp/org-colview.el @@ -567,7 +567,13 @@ for the duration of the command.") (defvar org-agenda-overriding-columns-format nil "When set, overrides any other format definition for the agenda. -Don't set this, this is meant for dynamic scoping.") +Don't set this, this is meant for dynamic scoping. Set +`org-agenda-local-overriding-columns-format' instead.") + +(defvar-local org-agenda-local-overriding-columns-format nil + "When set, overrides any other format definition for the agenda. +This can be set as a buffer local value to avoid interfering with +dynamic scoping for `org-agenda-overriding-columns-format'.") (defun org-columns-edit-value (&optional key) "Edit the value of the property at point in column view. @@ -1564,6 +1570,7 @@ PARAMS is a property list of parameters: (fmt (cond ((bound-and-true-p org-agenda-overriding-columns-format)) + ((bound-and-true-p org-agenda-local-overriding-columns-format)) ((let ((m (org-get-at-bol 'org-hd-marker))) (and m (or (org-entry-get m "COLUMNS" t) -- 2.20.1