Subject: bug#11930: closed (Re: bug#11930: 24.1.50; kill-all-local-variables ignores some non-permanent-local vars)

From: [email-masked] (GNU bug Tracking System)
Date: Fri, 13 Jul 2012 14:33:02 +0000

Your bug report

#11930: 24.1.50; kill-all-local-variables ignores some non-permanent-local vars

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
11930: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=11930
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#11930: 24.1.50; kill-all-local-variables ignores some non-permanent-local vars
From: Chong Yidong <[email-masked]>
To: [email-masked]
Date: Fri, 13 Jul 2012 22:26:27 +0800
List-Id: <debbugs-submit.debbugs.gnu.org>

> We should assign a non-nil `permanent-local' property to these
> variables.  Even if the internal code doesn't need the property to work
> for these variables, it would be a useful signal for Lisp programmers.

Done in r109073.

Subject: 24.1.50; kill-all-local-variables ignores some non-permanent-local vars
From: Chong Yidong <[email-masked]>
To: [email-masked]
Date: Fri, 13 Jul 2012 15:43:16 +0800
List-Id: <debbugs-submit.debbugs.gnu.org>

The documentation of `kill-all-local-variables' says only that it does
not reset variables marked as `permanent-local'.  But it also seems to
ignore certain per-buffer variables that lack the `permanent-local'
property.  One such variable is `buffer-read-only':

emacs -Q
M-: (setq buffer-read-only t) RET     (or just C-x C-q)
M-: (kill-all-local-variables) RET
C-h v buffer-read-only RET

  buffer-read-only is a variable defined in `C source code'.
  Its value is t
  Local in buffer *scratch*; global value is nil

M-: (get 'buffer-read-only 'permanent-local)
  => nil

The `default-directory' variable also behaves this way.  Other
per-buffer variables, like `line-spacing', ARE reset by
`kill-all-local-variables'.

We should assign a non-nil `permanent-local' property to these
variables.  Even if the internal code doesn't need the property to work
for these variables, it would be a useful signal for Lisp programmers.

Off the top of my head, I'm guessing the affected variables are those
listed in buffer.c:4961 (with a -1 index in buffer_local_flags).

In GNU Emacs 24.1.50.1 (x86_64-unknown-linux-gnu, GTK+ Version 3.4.2)
 of 2012-07-13 on ulysses
Bzr revision: 109067 [email-masked]