]> git.eshelyaron.com Git - emacs.git/commitdiff
(recover-file): It's ok if the visited file doesn't exist.
authorRichard M. Stallman <rms@gnu.org>
Sun, 13 Aug 1995 16:48:13 +0000 (16:48 +0000)
committerRichard M. Stallman <rms@gnu.org>
Sun, 13 Aug 1995 16:48:13 +0000 (16:48 +0000)
(recover-session-finish): Compute "file name" from autosave file
if no visited file.

lisp/files.el

index ad4aab933ffa0ba4d0851efb867e4d43e07a3f48..7c2b5b64e97ee97e7c246e96e3e3c997f8e58098 100644 (file)
@@ -2079,7 +2079,9 @@ beginning and `after-revert-hook' at the end."
       (error "%s is an auto-save file" file))
   (let ((file-name (let ((buffer-file-name file))
                     (make-auto-save-file-name))))
-    (cond ((not (file-newer-than-file-p file-name file))
+    (cond ((if (file-exists-p file)
+              (not (file-newer-than-file-p file-name file))
+            (not (file-exists-p file-name)))
           (error "Auto-save file %s not current" file-name))
          ((save-window-excursion
             (if (not (eq system-type 'vax-vms))
@@ -2129,14 +2131,41 @@ This command is used in the special Dired buffer created by
          (set-buffer buffer)
          (erase-buffer)
          (insert-file-contents file)
+         ;; The file contains a pair of line for each auto-saved buffer.
+         ;; The first line of the pair contains the visited file name
+         ;; or is empty if the buffer was not visiting a file.
+         ;; The second line is the auto-save file name.
          (map-y-or-n-p  "Recover %s? "
                         (lambda (file) (save-excursion (recover-file file)))
                         (lambda ()
                           (if (eobp)
                               nil
                             (prog1
-                                (buffer-substring-no-properties
-                                 (point) (progn (end-of-line) (point)))
+                                (if (eolp)
+                                    ;; If the first line of the pair is empty,
+                                    ;; it means this was a non-file buffer
+                                    ;; that was autosaved.
+                                    ;; Make a file name from 
+                                    ;; the auto-save file name.
+                                    (let ((autofile
+                                           (buffer-substring-no-properties
+                                            (save-excursion
+                                              (forward-line 1)
+                                              (point))
+                                            (save-excursion
+                                              (forward-line 1)
+                                              (end-of-line)
+                                              (point)))))
+                                      (expand-file-name
+                                       (concat "temp"
+                                               (substring
+                                                (file-name-nondirectory autofile)
+                                                1 -1))
+                                       (file-name-directory autofile)))
+                                  ;; This pair of lines is a file-visiting
+                                  ;; buffer.  Use the visited file name.
+                                  (buffer-substring-no-properties
+                                   (point) (progn (end-of-line) (point))))
                               (while (and (eolp) (not (eobp)))
                                 (forward-line 2)))))
                         '("file" "files" "recover")))