1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-11 09:20:51 +00:00

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
This commit is contained in:
Chong Yidong 2012-09-22 11:07:39 +08:00
parent fa42927fd0
commit 82f8cd940f
4 changed files with 24 additions and 6 deletions

View File

@ -1,3 +1,7 @@
2012-09-22 Chong Yidong <cyd@gnu.org>
* simple.el (undo): Handle indirect buffers (Bug#8207).
2012-09-21 Leo Liu <sdl.web@gmail.com>
IDO: Disable match re-ordering for buffer switching.

View File

@ -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))))

View File

@ -1,3 +1,8 @@
2012-09-22 Chong Yidong <cyd@gnu.org>
* buffer.c (Fset_buffer_modified_p): Handle indirect buffers
(Bug#8207).
2012-09-22 Kenichi Handa <handa@gnu.org>
* composite.c (composition_reseat_it): Handle the case that a

View File

@ -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))