Function: mail-recover

mail-recover is an interactive and byte-compiled function defined in sendmail.el.gz.

Signature

(mail-recover)

Documentation

Recover interrupted mail composition from auto-save files.

If the mail buffer has a current valid auto-save file, the command recovers that file. Otherwise, it displays a buffer showing the existing auto-saved draft messages; you can move to one of them and type C-c C-c to recover that one.

Key Bindings

Source Code

;; Defined in /usr/src/emacs/lisp/mail/sendmail.el.gz
(defun mail-recover ()
  "Recover interrupted mail composition from auto-save files.

If the mail buffer has a current valid auto-save file,
the command recovers that file.  Otherwise, it displays a
buffer showing the existing auto-saved draft messages;
you can move to one of them and type C-c C-c to recover that one."
  (interactive)
  ;; In case they invoke us from some random buffer...
  (switch-to-buffer "*mail*")
  ;; If *mail* didn't exist, set its directory, so that auto-saved
  ;; drafts will be found.
  (let ((dir (expand-file-name
	      (file-name-as-directory mail-default-directory))))
    (if (file-exists-p dir)
	(setq default-directory dir)))
  (or (eq major-mode 'mail-mode)
      (mail-mode))
  (let ((file-name buffer-auto-save-file-name))
    (cond ((and file-name (file-exists-p file-name))
	   (let ((dispbuf
		  ;; This used to invoke `ls' via call-process, but
		  ;; dired-noselect is more portable to systems where
		  ;; `ls' is not a standard program (it will use
		  ;; ls-lisp instead).
		  (dired-noselect file-name
				  (concat dired-listing-switches " -t"))))
	     (save-selected-window
	       (switch-to-buffer-other-window dispbuf)
	       (goto-char (point-min))
	       (forward-line 2)
	       (dired-move-to-filename)
	       (setq dispbuf (rename-buffer "*Directory*" t)))
	     (if (not (yes-or-no-p
		       (format "Recover mail draft from auto save file %s? "
			       file-name)))
		 (error "mail-recover canceled")
	       (let ((buffer-read-only nil)
		     (buffer-coding buffer-file-coding-system)
		     ;; Auto-save files are written in internal
		     ;; representation of non-ASCII characters.
		     (coding-system-for-read 'utf-8-emacs-unix))
		 (erase-buffer)
		 (insert-file-contents file-name nil)
		 (setq buffer-file-coding-system buffer-coding)))))
	  (t (mail-recover-1)))))