Clément Pit--Claudel <clement....@gmail.com> writes: > On 2017-01-19 19:52, npost...@users.sourceforge.net wrote: >> because even after doing (make-variable-buffer-local 'var), (let >> ((var 'foo))...) still makes a global binding. >> `make-variable-buffer-local' only has effect for `setq', which I >> think will hardly ever happen for `inhibit-modification-hooks'. > > On 2017-01-19 19:52, npost...@users.sourceforge.net wrote: >> because even after doing (make-variable-buffer-local 'var), (let >> ((var 'foo))...) still makes a global binding. >> `make-variable-buffer-local' only has effect for `setq', which I >> think will hardly ever happen for `inhibit-modification-hooks'. > > Hi Noam, > > Can you explain a bit more? I'm not sure what you meant. > > I tried the following to illustrate your point: > > (defvar aa 0) > > (with-temp-buffer > (setq-local aa 1) > (let ((b1 (current-buffer))) > (with-temp-buffer > (let ((aa 2)) > (message "In b2: %S" aa) > (with-current-buffer b1 > (message "In b1: %S" aa))))))
My point was that the setq-local (or make-local-variable) is required and that defvar-local (or make-variable-buffer-local) is not enough. Compare: (defvar-local bb 0) (with-temp-buffer (let ((b1 (current-buffer))) (with-temp-buffer (let ((bb 2)) (message "In b2: %S" bb) (with-current-buffer b1 (message "In b1: %S" bb))))))