jbw@bucsb.UUCP (Joe Wells) (10/08/88)
GNU Emacs 18.52.2 There is a bug in the treatment of buffer-local-variables by specbind() and unbind_to() in eval.c. This bug manifests itself in the following general situation: (make-variable-buffer-local 'variable) (set-buffer "foo") (setq variable 'old-value) (let ((variable 'new-value)) (set-buffer "bar")) The result is as follows: in buffer "foo", symbol "variable" has value 'new-value in buffer "bar", symbol "variable" has value 'old-value This bug is triggered by shrink-window-if-larger-than-buffer, in electric.el. If the window argument to this function displays a buffer other than the current buffer, this results in trashing the values of buffer-read-only and buffer-file-name in both buffers. I have not developed a fix to the general problem, as I unfortunately lack the disk space (or permission) required to hack the C code, but here is a short fix for shrink-window-if-larger-than-buffer, so that it no longer triggers this bug. Joe Wells INTERNET: jbw%bucsf.bu.edu@bu-it.bu.edu UUCP: ...!harvard!bu-cs!bucsf!jbw *** electric-fix.el Fri Oct 7 20:11:03 1988 --- /usr/gnu/dist-18.52/lisp/electric.el Sat May 16 02:22:00 1987 *************** *** 32,39 (n 0) (window-min-height 0) (buffer-read-only nil) ! (modified (buffer-modified-p)) ! (buffer (current-buffer))) (unwind-protect (progn (select-window window) --- 32,38 ----- (n 0) (window-min-height 0) (buffer-read-only nil) ! (modified (buffer-modified-p))) (unwind-protect (progn (select-window window) *************** *** 46,54 (delete-region (point-min) (point)) (set-buffer-modified-p modified) (goto-char p) ! (select-window w) ! (set-buffer buffer))))) ! ;; This loop is the guts for non-standard modes which retain control ;; until some event occurs. It is a `do-forever', the only way out is to --- 45,52 ----- (delete-region (point-min) (point)) (set-buffer-modified-p modified) (goto-char p) ! (select-window w))))) ! ;; This loop is the guts for non-standard modes which retain control ;; until some event occurs. It is a `do-forever', the only way out is to