From mboxrd@z Thu Jan 1 00:00:00 1970 From: Allen Li Subject: Re: Bug: org-agenda-overriding-columns-format destroyed on revert [9.2.1 (9.2.1-2-gc6d37c-elpaplus)] Date: Wed, 13 Feb 2019 09:11:07 +0000 Message-ID: References: <808syk5cis.fsf@felesatra.moe> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Return-path: Received: from eggs.gnu.org ([209.51.188.92]:57084) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gtqZe-0002Se-Mo for emacs-orgmode@gnu.org; Wed, 13 Feb 2019 04:11:24 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gtqZc-000437-N0 for emacs-orgmode@gnu.org; Wed, 13 Feb 2019 04:11:22 -0500 Received: from mail-it1-x129.google.com ([2607:f8b0:4864:20::129]:39096) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1gtqZb-00041J-M2 for emacs-orgmode@gnu.org; Wed, 13 Feb 2019 04:11:20 -0500 Received: by mail-it1-x129.google.com with SMTP id p4so2202493itc.4 for ; Wed, 13 Feb 2019 01:11:19 -0800 (PST) In-Reply-To: List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: "Emacs-orgmode" To: Org Mode List On Wed, Feb 13, 2019 at 8:37 AM Allen Li wrote: > > I'm suspicious of org-agenda-mode -> kill-all-local-variables= > > One oddity is that repeatedly reverting the buffer swaps between the > "correct" overriding column format and the default. It seems like what is happening is that the org-agenda-prepare and org-agenda-finalize calls in org-tags-view are swapping org-agenda-overriding-columns-format (ocf) on and off. I added debug messages around these points, and a cycle looks like: @@@@@@@ before prepare "%TODO %60ITEM %SCHEDULED" @@@@@@@ after prepare "%TODO %60ITEM %SCHEDULED" @@@@@@@ before finalize "%TODO %60ITEM %SCHEDULED" @@@@@@@ after finalize "%TODO %60ITEM %SCHEDULED" @@@@@@@ before prepare "%TODO %60ITEM %SCHEDULED" @@@@@@@ after prepare nil @@@@@@@ before finalize nil @@@@@@@ after finalize nil During the first cycle, prepare doesn't unset the local value for ocf because it's not set, then in finalize the local value of ocf is set using the current dynamic value. During the second cycle, ocf is set locally so prepare wipes the local value. It looks like this also wipes the current let-bound dynamic value for ocf, so during finalize ocf is not (re)set as a local value. Go back to first cycle. I don't see an easy good fix due to how Emacs's dynamic variable binding works with respect to buffer local variables. One way to fix is redefine: (defun org-let (list &rest body) (eval `(with-temp-buffer ,(cons 'let (cons list body))))) That way, the let doesn't use the buffer local value for ocf, so the kill-all-local-variables doesn't wipe it. I can confirm that this fixes this bug. However, I have no idea what effect this may have on all of Org mode.