Function: mail-recover-1

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

Signature

(mail-recover-1)

Documentation

Pop up a list of auto-saved draft messages so you can recover one of them.

Key Bindings

Source Code

;; Defined in /usr/src/emacs/lisp/mail/sendmail.el.gz
(defun mail-recover-1 ()
  "Pop up a list of auto-saved draft messages so you can recover one of them."
  (interactive)
  (let ((file-name (make-auto-save-file-name))
	(ls-lisp-support-shell-wildcards t)
	non-random-len wildcard)
    ;; Remove the random part from the auto-save-file-name, and
    ;; create a wildcard which matches possible candidates.
    ;; Note: this knows that make-auto-save-file-name appends
    ;; "#<RANDOM-STUFF>#" to the buffer name, where RANDOM-STUFF
    ;; is the result of (make-temp-name "").
    (setq non-random-len
	  (- (length file-name) (length (make-temp-name "")) 1))
    (setq wildcard (concat (substring file-name 0 non-random-len) "*"))
    (if (null (file-expand-wildcards wildcard))
	(message "There are no auto-saved drafts to recover")
      ;; Bind dired-trivial-filenames to t because all auto-save file
      ;; names are normally ``trivial'', so Dired will set point after
      ;; all the files, at buffer bottom.  We want it on the first
      ;; file instead.
      ;; Require dired so that dired-trivial-filenames does not get
      ;; unbound on exit from the let.
      (require 'dired)
      (defvar dired-trivial-filenames)
      (let ((dired-trivial-filenames t))
	(dired-other-window wildcard (concat dired-listing-switches " -t")))
      (rename-buffer "*Auto-saved Drafts*" t)
      (save-excursion
	(goto-char (point-min))
	(or (looking-at " Move to the draft file you want to recover,")
	    (let ((inhibit-read-only t))
	      ;; Each line starts with a space so that Font Lock mode
	      ;; won't highlight the first character.
	      (insert "\
 Move to the draft file you want to recover, then type C-c C-c
 to recover text of message whose composition was interrupted.
 To browse text of a draft, type v on the draft file's line.

 You can also delete some of these files;
 type d on a line to mark that file for deletion.

 List of possible auto-save files for recovery:

"))))
      (use-local-map
       (let ((map (make-sparse-keymap)))
	 (set-keymap-parent map (current-local-map))
	 map))
      (define-key (current-local-map) "v"
	(lambda ()
	  (interactive)
	  (let ((coding-system-for-read 'utf-8-emacs-unix))
	    (dired-view-file))))
      (define-key (current-local-map) "\C-c\C-c"
	(lambda ()
	  (interactive)
	  (let ((fname (dired-get-filename))
		;; Auto-saved files are written in the internal
		;; representation, so they should be read accordingly.
		(coding-system-for-read 'utf-8-emacs-unix))
	    (switch-to-buffer-other-window "*mail*")
	    (let ((buffer-read-only nil))
	      (erase-buffer)
	      (insert-file-contents fname nil)
	      ;; insert-file-contents will set buffer-file-coding-system
	      ;; to utf-8-emacs, which is probably not what they want to
	      ;; use for sending the message.  But we don't know what
	      ;; was its value before the buffer was killed or Emacs
	      ;; crashed.  We therefore reset buffer-file-coding-system
	      ;; to the default value, so that either the default does
	      ;; TRT, or the user will get prompted for the right
	      ;; encoding when they send the message.
	      (setq buffer-file-coding-system
		    (default-value 'buffer-file-coding-system)))))))))