From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Stefan-W. Hahn" Subject: Re: Bug: buffer local variables handled wrong [9.0.5 (release_9.0.5-497-g5bc540 @ /home/hs/.emacs.d/lib/org-mode/lisp/)] Date: Sun, 4 Jun 2017 08:57:33 +0200 Message-ID: <20170604065733.GG7145@seven> References: <20170603114859.GE7145@seven> <87a85olrzq.fsf@nicolasgoaziou.fr> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:38594) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dHPTu-0000P1-MC for emacs-orgmode@gnu.org; Sun, 04 Jun 2017 02:57:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dHPTr-0001sj-JE for emacs-orgmode@gnu.org; Sun, 04 Jun 2017 02:57:46 -0400 Received: from mout.kundenserver.de ([212.227.126.133]:60190) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dHPTr-0001pG-8T for emacs-orgmode@gnu.org; Sun, 04 Jun 2017 02:57:43 -0400 Content-Disposition: inline In-Reply-To: <87a85olrzq.fsf@nicolasgoaziou.fr> 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: Nicolas Goaziou Cc: emacs-orgmode@gnu.org Mail von Nicolas Goaziou, Sat, 03 Jun 2017 at 22:46:01 +0200: Good morning, > > > > This error comes from org-clone-local-variables, because there the > > prediction for local variables is always to be a list. > > Fixed. Thank you for the report and the analysis. Thanks. Because for me pcase is magic, I tried to understand your corretion of the code. To understand it I expanded the pcase form with (macrostep-expand), e.g. in org-agenda-mode: ,---- | (defun org-agenda-mode () | ... | (mapc #'make-local-variable org-agenda-local-vars) | (dolist (elem save) | (if | (consp elem) | (let* | ((x | (car elem)) | (x | (cdr elem))) | (if | (consp x) | (let* | ((x | (car x)) | (x | (cdr x))) | (if | (null x) | (let | ((val x) | (var x)) | (when | (and val | (memq var org-agenda-local-vars)) | (set var val))) | nil)) | nil)) | nil))) | (setq-local org-agenda-this-buffer-is-sticky t)) | ... `---- for me it looks not correct, because var and val get expanded to (cdr (cdr elem)). Also the second one ,---- | (defun org-clone-local-variables (from-buffer &optional regexp) | ... | (dolist (pair (buffer-local-variables from-buffer)) | (if | (consp pair) | (let* | ((x | (car pair)) | (x | (cdr pair))) | (if | (consp x) | (let* | ((x | (cdr x))) | (if | (null x) | (let | ((name x)) | (when | (and | (not | (memq name org-unique-local-variables)) | (or | (null regexp) | (string-match-p regexp | (symbol-name name)))) | (set | (make-local-variable name) | (cdr pair)))) | nil)) | nil)) | nil))) `---- here name get expanded to (cdr (cdr pair)). For me both cases don't look correct or do I missinterpret something? With kind regards, Stefan -- Stefan-W. Hahn It is easy to make things. It is hard to make things simple.