* 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