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)))))))))