From: Chong Yidong Date: Sat, 22 Sep 2012 03:07:39 +0000 (+0800) Subject: Fix auto-save and locking for indirect buffers. X-Git-Tag: emacs-24.2.90~268 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=82f8cd940f097af95cb1100f7f38a1f08778cb1d;p=emacs.git Fix auto-save and locking for indirect buffers. * lisp/simple.el (undo): Handle indirect buffers. * buffer.c (Fset_buffer_modified_p): Handle indirect buffers. Fixes: debbugs:8207 --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e6fa549e867..950e7e4b4da 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-09-22 Chong Yidong + + * simple.el (undo): Handle indirect buffers (Bug#8207). + 2012-09-21 Leo Liu IDO: Disable match re-ordering for buffer switching. diff --git a/lisp/simple.el b/lisp/simple.el index d87ae3c5c15..3e11e6838c7 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -1855,9 +1855,13 @@ as an argument limits undo to changes within the current region." ;; another undo command will find the undo history empty ;; and will get another error. To begin undoing the undos, ;; you must type some other command. - (let ((modified (buffer-modified-p)) - (recent-save (recent-auto-save-p)) - message) + (let* ((modified (buffer-modified-p)) + ;; For an indirect buffer, look in the base buffer for the + ;; auto-save data. + (base-buffer (or (buffer-base-buffer) (current-buffer))) + (recent-save (with-current-buffer base-buffer + (recent-auto-save-p))) + message) ;; If we get an error in undo-start, ;; the next command should not be a "consecutive undo". ;; So set `this-command' to something other than `undo'. @@ -1935,7 +1939,8 @@ as an argument limits undo to changes within the current region." ;; Record what the current undo list says, ;; so the next command can tell if the buffer was modified in between. (and modified (not (buffer-modified-p)) - (delete-auto-save-file-if-necessary recent-save)) + (with-current-buffer base-buffer + (delete-auto-save-file-if-necessary recent-save))) ;; Display a message announcing success. (if message (message "%s" message)))) diff --git a/src/ChangeLog b/src/ChangeLog index 0d441761ce5..439b5c06e27 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2012-09-22 Chong Yidong + + * buffer.c (Fset_buffer_modified_p): Handle indirect buffers + (Bug#8207). + 2012-09-22 Kenichi Handa * composite.c (composition_reseat_it): Handle the case that a diff --git a/src/buffer.c b/src/buffer.c index b020edb9962..22624e33a4b 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -1341,9 +1341,13 @@ A non-nil FLAG means mark the buffer modified. */) /* If buffer becoming modified, lock the file. If buffer becoming unmodified, unlock the file. */ - fn = BVAR (current_buffer, file_truename); + struct buffer *b = current_buffer->base_buffer + ? current_buffer->base_buffer + : current_buffer; + + fn = BVAR (b, file_truename); /* Test buffer-file-name so that binding it to nil is effective. */ - if (!NILP (fn) && ! NILP (BVAR (current_buffer, filename))) + if (!NILP (fn) && ! NILP (BVAR (b, filename))) { bool already = SAVE_MODIFF < MODIFF; if (!already && !NILP (flag))