From a8814962e73af61ebbbdeb20eceb53e09d030b06 Mon Sep 17 00:00:00 2001 From: Allen Li 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. * doc/org-manual.org (Using Column View in the Agenda): Updated reference to variable. * lisp/org-agenda.el (org-agenda-finalize): Set buffer local variable instead. * lisp/org-colview.el (org-overriding-columns-format): Renamed. (org-agenda-overriding-columns-format): Renamed. (org-local-columns-format): New buffer local variable. (org-columns-edit-value): Updated reference to variable. (org-columns-next-allowed-value): Updated reference to variable. (org-agenda-columns): Updated reference to variable. --- doc/org-manual.org | 2 +- lisp/org-agenda.el | 9 +++++---- lisp/org-colview.el | 20 +++++++++++++++----- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/doc/org-manual.org b/doc/org-manual.org index a1cc35608..a8c52681b 100644 --- a/doc/org-manual.org +++ b/doc/org-manual.org @@ -10477,7 +10477,7 @@ environment. This causes the following issues: the entries in the agenda are collected from different files, and different files may have different columns formats, this is a non-trivial problem. Org first checks if the variable - ~org-agenda-overriding-columns-format~ is currently set, and if so, + ~org-overriding-columns-format~ is currently set, and if so, takes the format from there. Otherwise it takes the format associated with the first item in the agenda, or, if that item does not have a specific format (defined in a property, or in its file), diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el index c1a8a44f2..4a0604a9b 100644 --- a/lisp/org-agenda.el +++ b/lisp/org-agenda.el @@ -3766,7 +3766,8 @@ FILTER-ALIST is an alist of filters we need to apply when (setq-local org-agenda-name name))) (setq buffer-read-only nil)))) -(defvar org-agenda-overriding-columns-format) ; From org-colview.el +(defvar org-overriding-columns-format) +(defvar org-local-columns-format) (defun org-agenda-finalize () "Finishing touch for the agenda buffer, called just before displaying it." (unless org-agenda-multi @@ -3781,9 +3782,9 @@ FILTER-ALIST is an alist of filters we need to apply when (org-agenda-align-tags)) (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 - org-agenda-overriding-columns-format)) + (when (bound-and-true-p org-overriding-columns-format) + (setq-local org-local-columns-format + org-overriding-columns-format)) (when org-agenda-view-columns-initially (org-agenda-columns)) (when org-agenda-fontify-priorities diff --git a/lisp/org-colview.el b/lisp/org-colview.el index 746426bc7..a7a441649 100644 --- a/lisp/org-colview.el +++ b/lisp/org-colview.el @@ -565,9 +565,18 @@ for the duration of the command.") (org-columns-next-allowed-value) (org-columns-edit-value "TAGS"))) -(defvar org-agenda-overriding-columns-format nil +(define-obsolete-variable-alias 'org-agenda-overriding-columns-format + 'org-overriding-columns-format "Org 9.2.2") + +(defvar org-overriding-columns-format nil + "When set, overrides any other format definition for the agenda. +Don't set this, this is meant for dynamic scoping. Set +`org-local-columns-format' instead.") + +(defvar-local org-local-columns-format nil "When set, overrides any other format definition for the agenda. -Don't set this, this is meant for dynamic scoping.") +This can be set as a buffer local value to avoid interfering with +dynamic scoping for `org-overriding-columns-format'.") (defun org-columns-edit-value (&optional key) "Edit the value of the property at point in column view. @@ -628,7 +637,7 @@ Where possible, use the standard interface for changing this line." (org-columns--call action) ;; The following let preserves the current format, and makes ;; sure that in only a single file things need to be updated. - (let* ((org-agenda-overriding-columns-format org-columns-current-fmt) + (let* ((org-overriding-columns-format org-columns-current-fmt) (buffer (marker-buffer pom)) (org-agenda-contributing-files (list (with-current-buffer buffer @@ -722,7 +731,7 @@ an integer, select that value." (org-columns--call action) ;; The following let preserves the current format, and makes ;; sure that in only a single file things need to be updated. - (let* ((org-agenda-overriding-columns-format org-columns-current-fmt) + (let* ((org-overriding-columns-format org-columns-current-fmt) (buffer (marker-buffer pom)) (org-agenda-contributing-files (list (with-current-buffer buffer @@ -1563,7 +1572,8 @@ PARAMS is a property list of parameters: (let* ((org-columns--time (float-time)) (fmt (cond - ((bound-and-true-p org-agenda-overriding-columns-format)) + ((bound-and-true-p org-overriding-columns-format)) + ((bound-and-true-p org-local-columns-format)) ((let ((m (org-get-at-bol 'org-hd-marker))) (and m (or (org-entry-get m "COLUMNS" t) -- 2.20.1