[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: reverting buffer from non-existent file
From: |
martin rudalics |
Subject: |
Re: reverting buffer from non-existent file |
Date: |
Tue, 07 Feb 2006 10:44:11 +0100 |
User-agent: |
Mozilla Thunderbird 1.0 (Windows/20041206) |
> I think it is cleaner to bind
> buffer-read-only and buffer-undo-list only once.
On the one hand I don't want to compromise the original behavior for
`revert-buffer-insert-file-contents-function' non-nil. On the other I
don't want to bind `buffer-undo-list' when generating the "File no
longer exists ..." errors. With `debug-on-error' non-nil, switching to
*Backtrace* would leave me without undo information again. Hence the -
admittedly ugly - two bindings. I added a comment to explain this.
* files.el (revert-buffer): Do not discard undo list when buffer
cannot be reverted because file does not exist.
*** files.el Wed Feb 1 10:17:44 2006
--- files.el Tue Feb 7 10:32:00 2006
***************
*** 3815,3821 ****
buffer-auto-save-file-name
(file-readable-p buffer-auto-save-file-name)
(y-or-n-p
! "Buffer has been auto-saved recently. Revert from auto-save file? ")))
(file-name (if auto-save-p
buffer-auto-save-file-name
buffer-file-name)))
--- 3815,3821 ----
buffer-auto-save-file-name
(file-readable-p buffer-auto-save-file-name)
(y-or-n-p
! "Buffer has been auto-saved recently. Revert
from auto-save file? ")))
(file-name (if auto-save-p
buffer-auto-save-file-name
buffer-file-name)))
***************
*** 3840,3845 ****
--- 3840,3848 ----
(setq buffer-backed-up nil))
;; Get rid of all undo records for this buffer.
(or (eq buffer-undo-list t)
+ ;; Do not clear buffer-undo-list if reverting will fail.
+ (and (not (file-readable-p file-name))
+ (not revert-buffer-insert-file-contents-function))
(setq buffer-undo-list nil))
;; Effectively copy the after-revert-hook status,
;; since after-find-file will clobber it.
***************
*** 3847,3863 ****
(local-hook-p (local-variable-p 'after-revert-hook))
(local-hook (and (local-variable-p 'after-revert-hook)
after-revert-hook)))
! (let (buffer-read-only
! ;; Don't make undo records for the reversion.
! (buffer-undo-list t))
! (if revert-buffer-insert-file-contents-function
! (funcall revert-buffer-insert-file-contents-function
! file-name auto-save-p)
! (if (not (file-exists-p file-name))
! (error (if buffer-file-number
! "File %s no longer exists!"
! "Cannot revert nonexistent file %s")
! file-name))
;; Bind buffer-file-name to nil
;; so that we don't try to lock the file.
(let ((buffer-file-name nil))
--- 3850,3876 ----
(local-hook-p (local-variable-p 'after-revert-hook))
(local-hook (and (local-variable-p 'after-revert-hook)
after-revert-hook)))
! (cond
! (revert-buffer-insert-file-contents-function
! (let (buffer-read-only
! ;; Don't make undo records for the reversion.
! (buffer-undo-list t))
! (funcall revert-buffer-insert-file-contents-function
! file-name auto-save-p)))
! ;; Don't bind buffer-undo-list around the error reporting
! ;; clauses to avoid that undo information gets lost when
! ;; calling the debugger.
! ((not (file-exists-p file-name))
! (error (if buffer-file-number
! "File %s no longer exists!"
! "Cannot revert nonexistent file %s")
! file-name))
! ((not (file-readable-p file-name))
! (error "File %s is not readable" file-name))
! (t
! (let (buffer-read-only
! ;; Don't make undo records for the reversion.
! (buffer-undo-list t))
;; Bind buffer-file-name to nil
;; so that we don't try to lock the file.
(let ((buffer-file-name nil))
***************
*** 3865,3871 ****
(unlock-buffer)))
(widen)
(let ((coding-system-for-read
! ;; Auto-saved file shoule be read by Emacs'
;; internal coding.
(if auto-save-p 'auto-save-coding
(or coding-system-for-read
--- 3878,3884 ----
(unlock-buffer)))
(widen)
(let ((coding-system-for-read
! ;; Auto-saved file should be read by Emacs'
;; internal coding.
(if auto-save-p 'auto-save-coding
(or coding-system-for-read
***************
*** 3881,3887 ****
(insert-file-contents file-name (not auto-save-p)
nil nil t))
(insert-file-contents file-name (not auto-save-p)
! nil nil t)))))
;; Recompute the truename in case changes in symlinks
;; have changed the truename.
(setq buffer-file-truename
--- 3894,3900 ----
(insert-file-contents file-name (not auto-save-p)
nil nil t))
(insert-file-contents file-name (not auto-save-p)
! nil nil t))))))
;; Recompute the truename in case changes in symlinks
;; have changed the truename.
(setq buffer-file-truename