Commit 847b8219 authored by Karl Heuer's avatar Karl Heuer
Browse files

New version from author.

parent b6d4ab05
This diff is collapsed.
This diff is collapsed.
;;; mh-funcs --- mh-e functions not everyone will use right away
;; Time-stamp: <94/03/08 16:00:54 gildea>
;; Time-stamp: <95/01/25 16:35:24 gildea>
;; Copyright 1993 Free Software Foundation, Inc.
;; Copyright (C) 1993, 1995 Free Software Foundation, Inc.
;; This file is part of mh-e.
......@@ -25,18 +25,35 @@
;;; Putting these functions in a separate file lets mh-e start up faster,
;;; since less Lisp code needs to be loaded all at once.
;;; Change Log:
;; $Id: mh-funcs.el,v 1.9 95/03/02 04:53:58 gildea Exp $
;;; Code:
(provide 'mh-funcs)
(require 'mh-e)
;;; customization
(defvar mh-sortm-args nil
"Extra arguments to have \\[mh-sort-folder] pass to the \"sortm\" command.
The arguments are passed to sortm if \\[mh-sort-folder] is given a
prefix argument. Normally default arguments to sortm are specified in the
MH profile.
For example, '(\"-nolimit\" \"-textfield\" \"subject\") is a useful setting.")
(defvar mh-note-copied "C"
"String whose first character is used to notate copied messages.")
(defvar mh-note-printed "P"
"String whose first character is used to notate printed messages.")
;;; functions
(defun mh-burst-digest ()
"Burst apart the current message, which should be a digest.
The message is replaced by its table of contents and the letters from the
The message is replaced by its table of contents and the messages from the
digest are inserted into the folder after that message."
(interactive)
(let ((digest (mh-get-msg-num t)))
......@@ -44,22 +61,26 @@ digest are inserted into the folder after that message."
(mh-set-folder-modified-p t) ; lock folder while bursting
(message "Bursting digest...")
(mh-exec-cmd "burst" mh-current-folder digest "-inplace")
(mh-scan-folder mh-current-folder (format "%d-last" mh-first-msg-num))
(with-mh-folder-updating (t)
(beginning-of-line)
(delete-region (point) (point-max)))
(mh-regenerate-headers (format "%d-last" digest) t)
(mh-goto-cur-msg)
(message "Bursting digest...done")))
(defun mh-copy-msg (dest msg-or-seq)
"Copy to another FOLDER the specified MESSAGE(s) without deleting them.
(defun mh-copy-msg (msg-or-seq folder)
"Copy the specified MESSAGE(s) to another FOLDER without deleting them.
Default is the displayed message. If optional prefix argument is
provided, then prompt for the message sequence."
(interactive (list (mh-prompt-for-folder "Copy to" "" t)
(if current-prefix-arg
(interactive (list (if current-prefix-arg
(mh-read-seq-default "Copy" t)
(mh-get-msg-num t))))
(mh-exec-cmd "refile" msg-or-seq "-link" "-src" mh-current-folder dest)
(mh-get-msg-num t))
(mh-prompt-for-folder "Copy to" "" t)))
(mh-exec-cmd "refile" msg-or-seq "-link" "-src" mh-current-folder folder)
(if (numberp msg-or-seq)
(mh-notate msg-or-seq ?C mh-cmd-note)
(mh-notate-seq msg-or-seq ?C mh-cmd-note)))
(mh-notate msg-or-seq mh-note-copied mh-cmd-note)
(mh-notate-seq msg-or-seq mh-note-copied mh-cmd-note)))
(defun mh-kill-folder ()
"Remove the current folder."
......@@ -73,6 +94,7 @@ provided, then prompt for the message sequence."
(mh-exec-cmd-daemon "rmf" folder)
(setq mh-folder-list
(delq (assoc folder mh-folder-list) mh-folder-list))
(run-hooks 'mh-folder-list-change-hook)
(message "Folder %s removed" folder)
(mh-set-folder-modified-p nil) ; so kill-buffer doesn't complain
(if (get-buffer mh-show-buffer)
......@@ -84,9 +106,9 @@ provided, then prompt for the message sequence."
(defun mh-list-folders ()
"List mail folders."
(interactive)
(with-output-to-temp-buffer " *mh-temp*"
(with-output-to-temp-buffer mh-temp-buffer
(save-excursion
(switch-to-buffer " *mh-temp*")
(switch-to-buffer mh-temp-buffer)
(erase-buffer)
(message "Listing folders...")
(mh-exec-cmd-output "folders" t (if mh-recursive-folders
......@@ -99,7 +121,7 @@ provided, then prompt for the message sequence."
(defun mh-pack-folder (range)
"Renumber the messages of a folder to be 1..n.
First, offer to execute any outstanding commands for the current folder.
If optional prefix argument provided, prompt for the range of messages
If optional prefix argument provided, prompt for the RANGE of messages
to display after packing. Otherwise, show the entire folder."
(interactive (list (if current-prefix-arg
(mh-read-msg-range
......@@ -116,7 +138,8 @@ to display after packing. Otherwise, show the entire folder."
(message "Packing folder...")
(mh-set-folder-modified-p t) ; lock folder while packing
(save-excursion
(mh-exec-cmd-quiet t "folder" mh-current-folder "-pack"))
(mh-exec-cmd-quiet t "folder" mh-current-folder "-pack"
"-norecurse" "-fast"))
(mh-regenerate-headers range))
......@@ -126,14 +149,16 @@ If INCLUDE-HEADERS (prefix argument) is provided, send the entire message.
Otherwise just send the message's body without the headers."
(interactive
(list (read-string "Shell command on message: ") current-prefix-arg))
(let ((file-name (mh-msg-filename (mh-get-msg-num t))))
(let ((msg-file-to-pipe (mh-msg-filename (mh-get-msg-num t)))
(message-directory default-directory))
(save-excursion
(set-buffer (get-buffer-create " *mh-temp*"))
(set-buffer (get-buffer-create mh-temp-buffer))
(erase-buffer)
(insert-file-contents file-name)
(insert-file-contents msg-file-to-pipe)
(goto-char (point-min))
(if (not include-headers) (search-forward "\n\n"))
(shell-command-on-region (point) (point-max) command nil))))
(let ((default-directory message-directory))
(shell-command-on-region (point) (point-max) command nil)))))
(defun mh-page-digest ()
......@@ -145,7 +170,7 @@ Otherwise just send the message's body without the headers."
(let ((case-fold-search nil))
;; Search for blank line and then for From:
(or (and (search-forward "\n\n" nil t)
(search-forward "From:" nil t))
(re-search-forward "^From:" nil t))
(error "No more messages in digest")))
;; Go back to previous blank line, then forward to the first non-blank.
(search-backward "\n\n" nil t)
......@@ -162,7 +187,7 @@ Otherwise just send the message's body without the headers."
(let ((case-fold-search nil))
(beginning-of-line)
(or (and (search-backward "\n\n" nil t)
(search-backward "From:" nil t))
(re-search-backward "^From:" nil t))
(error "No previous message in digest")))
;; Go back to previous blank line, then forward to the first non-blank.
(if (search-backward "\n\n" nil t)
......@@ -212,8 +237,8 @@ The messages are formatted by mhl. See the variable mhl-formfile."
(mh-exec-cmd-daemon shell-file-name "-c" print-command)
(call-process shell-file-name nil nil nil "-c" print-command))
(if (numberp msg-or-seq)
(mh-notate msg-or-seq ?P mh-cmd-note)
(mh-notate-seq msg-or-seq ?P mh-cmd-note))
(mh-notate msg-or-seq mh-note-printed mh-cmd-note)
(mh-notate-seq msg-or-seq mh-note-printed mh-cmd-note))
(mh-add-msgs-to-seq msg-or-seq 'printed t)
(if (numberp msg-or-seq)
(message "Printing message...done")
......@@ -225,23 +250,23 @@ The messages are formatted by mhl. See the variable mhl-formfile."
(mapconcat (function (lambda (msg) (mh-msg-filename msg folder))) msgs " "))
(defun mh-sort-folder (&optional no-args)
(defun mh-sort-folder (&optional extra-args)
"Sort the messages in the current folder by date.
Calls the MH program sortm to do the work.
The arguments in the list mh-sortm-args are passed to sortm
unless this function is passed an argument."
if this function is passed an argument."
(interactive "P")
(mh-process-or-undo-commands mh-current-folder)
(setq mh-next-direction 'forward)
(mh-set-folder-modified-p t) ; lock folder while sorting
(message "Sorting folder...")
(mh-exec-cmd "sortm" mh-current-folder (if (not no-args) mh-sortm-args))
(mh-exec-cmd "sortm" mh-current-folder (if extra-args mh-sortm-args))
(message "Sorting folder...done")
(mh-scan-folder mh-current-folder "all"))
(defun mh-undo-folder (&rest ignore)
"Undo all commands in current folder."
"Undo all pending deletes and refiles in current folder."
(interactive)
(cond ((or mh-do-not-confirm
(yes-or-no-p "Undo all commands in folder? "))
......@@ -256,7 +281,7 @@ unless this function is passed an argument."
(sit-for 2))))
(defun mh-store-msg (dir)
(defun mh-store-msg (directory)
"Store the file(s) contained in the current message into DIRECTORY.
The message can contain a shar file or uuencoded file.
Default directory is the last directory used, or initially the value of
......@@ -264,48 +289,65 @@ mh-store-default-directory or the current directory."
(interactive (list (let ((udir (or mh-store-default-directory default-directory)))
(read-file-name "Store message in directory: "
udir udir nil))))
(let ((file-name (mh-msg-filename (mh-get-msg-num t))))
(let ((msg-file-to-store (mh-msg-filename (mh-get-msg-num t))))
(save-excursion
(set-buffer (get-buffer-create " *mh-temp*"))
(set-buffer (get-buffer-create mh-temp-buffer))
(erase-buffer)
(insert-file-contents file-name)
(mh-store-buffer dir))))
(insert-file-contents msg-file-to-store)
(mh-store-buffer directory))))
(defun mh-store-buffer (dir)
(defun mh-store-buffer (directory)
"Store the file(s) contained in the current buffer into DIRECTORY.
The buffer can contain a shar file or uuencoded file.
Default directory is the last directory used, or initially the value of
`mh-store-default-directory' or the current directory."
(interactive (list (let ((udir (or mh-store-default-directory default-directory)))
(read-file-name "Store buffer in directory: "
udir udir nil))))
(let ((store-directory (expand-file-name dir))
(start (save-excursion
(goto-char (point-min))
(if (or (re-search-forward "^#![ \t]*/bin/sh" nil t)
(and (re-search-forward "^[^a-z0-9\"]*cut here\\b" nil t)
(read-file-name "Store buffer in directory: "
udir udir nil))))
(let ((store-directory (expand-file-name directory))
(sh-start (save-excursion
(goto-char (point-min))
(if (re-search-forward
"^#![ \t]*/bin/sh\\|^#\\|^: " nil t)
(progn
;; The "cut here" pattern was removed from above
;; because it seemed to hurt more than help.
;; But keep this to make it easier to put it back.
(if (looking-at "^[^a-z0-9\"]*cut here\\b")
(forward-line 1))
(re-search-forward "^#" nil t)
(re-search-forward "^: " nil t))
(progn (beginning-of-line) (point)))))
(beginning-of-line)
(if (looking-at "^[#:]....+\n\\( ?\n\\)?end$")
nil ;most likely end of a uuencode
(point))))))
(log-buffer (get-buffer-create "*Store Output*"))
(command "sh"))
(command "sh")
(uudecode-filename "(unknown filename)"))
(if (not sh-start)
(save-excursion
(goto-char (point-min))
(if (re-search-forward "^begin [0-7]+ " nil t)
(setq uudecode-filename
(buffer-substring (point)
(progn (end-of-line) (point)))))))
(save-excursion
(set-buffer log-buffer)
(erase-buffer)
(if (not (file-directory-p store-directory))
(progn
(insert "mkdir " dir "\n")
(insert "mkdir " directory "\n")
(call-process "mkdir" nil log-buffer t store-directory)))
(insert "cd " dir "\n")
(if (not start)
(insert "cd " directory "\n")
(setq mh-store-default-directory directory)
(if (not sh-start)
(progn
(setq command "uudecode")
(insert "uudecoding...\n"))))
(insert uudecode-filename " being uudecoded...\n"))))
(set-window-start (display-buffer log-buffer) 0) ;watch progress
(let ((default-directory (file-name-as-directory store-directory)))
(call-process-region start (point-max) command nil log-buffer t))
(setq mh-store-default-directory dir)
(set-buffer log-buffer)
(let (value)
(let ((default-directory (file-name-as-directory store-directory)))
(setq value (call-process-region sh-start (point-max) command
nil log-buffer t)))
(set-buffer log-buffer)
(mh-handle-process-error command value))
(insert "\n(mh-store finished)\n")))
;;; mh-mime --- mh-e support for composing MIME messages
;; Time-stamp: <94/03/08 08:41:27 gildea>
;; Time-stamp: <94/11/18 17:48:19 gildea>
;; Copyright 1993 Free Software Foundation, Inc.
;; Copyright (C) 1993, 1995 Free Software Foundation, Inc.
;; This file is part of mh-e.
......@@ -25,6 +25,10 @@
;;; Support for generating an mhn composition file.
;;; MIME is supported only by MH 6.8 or later.
;;; Change Log:
;; $Id: mh-mime.el,v 1.5 94/12/27 22:38:10 gildea Exp $
;;; Code:
(provide 'mh-mime)
......@@ -40,6 +44,15 @@
;; MIME option to mh-forward
;; command to move to content-description insertion point
(defvar mh-mhn-args nil
"Extra arguments to have \\[mh-edit-mhn] pass to the \"mhn\" command.
The arguments are passed to mhn if \\[mh-edit-mhn] is given a
prefix argument. Normally default arguments to mhn are specified in the
MH profile.")
(defvar mh-edit-mhn-hook nil
"Invoked on the formatted letter by \\<mh-letter-mode-map>\\[mh-edit-mhn].")
(defvar mh-mime-content-types
'(("text/plain") ("text/richtext")
("multipart/mixed") ("multipart/alternative") ("multipart/digest")
......@@ -54,7 +67,9 @@
(defun mh-mhn-compose-insertion (pathname type description)
"Add a directive to insert a message part from a file.
This is the typical way to insert non-text parts in a message.
See also \\[mh-edit-mhn]."
Arguments are PATHNAME, which tells where to find the file, TYPE, the
MIME content type, and DESCRIPTION, a line of text for the
Content-description header. See also \\[mh-edit-mhn]."
(interactive (list
(read-file-name "Insert contents of: ")
(completing-read "Content-type: "
......@@ -79,8 +94,11 @@ See also \\[mh-edit-mhn]."
(defun mh-mhn-compose-anon-ftp (host pathname type description)
"Add a directive for an anonymous ftp external body part.
This directive tells MH to include a reference to a message/external-body part
retrievable by anonymous FTP. See also \\[mh-edit-mhn]."
This directive tells MH to include a reference to a
message/external-body part retrievable by anonymous FTP. Arguments
are HOST and PATHNAME, which tell where to find the file, TYPE, the
MIME content type, and DESCRIPTION, a line of text for the
Content-description header. See also \\[mh-edit-mhn]."
(interactive (list
(read-string "Remote host: ")
(read-string "Remote pathname: ")
......@@ -92,8 +110,10 @@ retrievable by anonymous FTP. See also \\[mh-edit-mhn]."
(defun mh-mhn-compose-external-compressed-tar (host pathname description)
"Add a directive to include a reference to a compressed tar file.
The file should be available via anonymous ftp.
This directive tells MH to include a reference to a message/external-body part.
The file should be available via anonymous ftp. This directive
tells MH to include a reference to a message/external-body part.
Arguments are HOST and PATHNAME, which tell where to find the file, and
DESCRIPTION, a line of text for the Content-description header.
See also \\[mh-edit-mhn]."
(interactive (list
(read-string "Remote host: ")
......@@ -127,19 +147,19 @@ See also \\[mh-edit-mhn]."
(insert "; " extra-params))
(insert "\n"))
(defun mh-mhn-compose-forw (&optional description msgs folder)
(defun mh-mhn-compose-forw (&optional description folder messages)
"Add a forw directive to this message.
This directive tells MH to include the named messages in this one.
Arguments are DESCRIPTION, a line of text for the Content-description header,
MESSAGES and FOLDER, which name the message(s) to be forwarded.
FOLDER and MESSAGES, which name the message(s) to be forwarded.
See also \\[mh-edit-mhn]."
(interactive (list
(read-string "Forw Content-description: ")
(mh-prompt-for-folder "Message from" mh-sent-from-folder nil)
(read-string (format "Messages%s: "
(if mh-sent-from-msg
(format " [%d]" mh-sent-from-msg)
"")))
(mh-prompt-for-folder "Message from" mh-sent-from-folder nil)))
"")))))
(beginning-of-line)
(insert "#forw [")
(and description
......@@ -149,41 +169,46 @@ See also \\[mh-edit-mhn]."
(and folder
(not (string= folder ""))
(insert " " folder))
(if (and msgs
(not (string= msgs "")))
(if (and messages
(not (string= messages "")))
(let ((start (point)))
(insert " " msgs)
(insert " " messages)
(subst-char-in-region start (point) ?, ? ))
(if mh-sent-from-msg
(insert " " (int-to-string mh-sent-from-msg))))
(insert "\n"))
(defun mh-edit-mhn ()
"Filter the current draft through the mhn program for MIME formatting.
Using directives already inserted in the draft, fills in
(defun mh-edit-mhn (&optional extra-args)
"Format the current draft for MIME, expanding any mhn directives.
Process the current draft with the mhn program, which,
using directives already inserted in the draft, fills in
all the MIME components and header fields.
This step should be done last just before sending the message.
The mhn program is part of MH version 6.8 or later.
The `\\[mh-revert-mhn-edit]' command undoes this command.
For assistance with creating MIME directives to insert
The arguments in the list `mh-mhn-args' are passed to mhn
if this function is passed an argument.
For assistance with creating mhn directives to insert
various types of components in a message, see
\\[mh-mhn-compose-insertion] (generic insertion from a file),
\\[mh-mhn-compose-anon-ftp] (external reference to file via anonymous ftp),
\\[mh-mhn-compose-external-compressed-tar] \
\(reference to compressed tar file via anonymous ftp), and
\\[mh-mhn-compose-forw] (forward message)."
(interactive "*")
(interactive "*P")
(save-buffer)
(message "mhn editing...")
(mh-exec-cmd-error (format "mhdraft=%s" (buffer-file-name))
"mhn" (buffer-file-name))
(mh-exec-cmd-error (format "mhdraft=%s" buffer-file-name)
"mhn" (if extra-args mh-mhn-args) buffer-file-name)
(revert-buffer t t)
(message "mhn editing...done"))
(message "mhn editing...done")
(run-hooks 'mh-edit-mhn-hook))
(defun mh-revert-mhn-edit (noconfirm)
"Undoes the effect of \\[mh-edit-mhn] by reverting to the backup file.
Argument (optional) non-nil means don't ask for confirmation."
Optional non-nil argument means don't ask for confirmation."
(interactive "*P")
(if (null buffer-file-name)
(error "Buffer does not seem to be associated with any file"))
......
;;; mh-pick --- make a search pattern and search for a message in mh-e
;; Time-stamp: <93/08/22 22:56:53 gildea>
;; Time-stamp: <94/12/22 20:34:51 gildea>
;; Copyright 1993 Free Software Foundation, Inc.
;; Copyright (C) 1993, 1995 Free Software Foundation, Inc.
;; This file is part of mh-e.
......@@ -23,22 +23,28 @@
;; Internal support for mh-e package.
;;; Change Log:
;; $Id: mh-pick.el,v 1.4 94/12/27 22:38:10 gildea Exp $
;;; Code:
(provide 'mh-pick)
(require 'mh-e)
(defvar mh-pick-mode-map (make-sparse-keymap)
"Keymap for searching folder.")
(defvar mh-pick-mode-hook nil
"Invoked in `mh-pick-mode' on a new pattern.")
(defvar mh-searching-folder nil
"Folder this pick is searching.")
;;; Internal variables:
(defvar mh-pick-mode-map (make-sparse-keymap)
"Keymap for searching folder.")
(defvar mh-searching-folder nil) ;Folder this pick is searching.
(defun mh-search-folder (folder)
"Search FOLDER for messages matching a pattern."
"Search FOLDER for messages matching a pattern.
Add the messages found to the sequence named `search'."
(interactive (list (mh-prompt-for-folder "Search"
mh-current-folder
t)))
......@@ -66,8 +72,11 @@
(defun mh-pick-mode ()
"Mode for creating search templates in mh-e.\\<mh-pick-mode-map>
After each field name, enter the pattern to search for. To search
the entire message, supply the pattern in the \"body\" of the template.
After each field name, enter the pattern to search for. If a field's
value does not matter for the search, leave it empty. To search the
entire message, supply the pattern in the \"body\" of the template.
Each non-empty field must be matched for a message to be selected.
To effect a logical \"or\", use \\[mh-search-folder] multiple times.
When you have finished, type \\[mh-do-pick-search] to do the search.
\\{mh-pick-mode-map}
Turning on mh-pick-mode calls the value of the variable mh-pick-mode-hook
......@@ -84,38 +93,41 @@ if that value is non-nil."
(defun mh-do-pick-search ()
"Find messages that match the qualifications in the current pattern buffer.
Messages are searched for in the folder named in mh-searching-folder.
Add messages found to the sequence named `search'."
Add the messages found to the sequence named `search'."
(interactive)
(let ((pattern-buffer (buffer-name))
(searching-buffer mh-searching-folder)
range msgs
range
msgs
(finding-messages t)
(pattern nil)
(new-buffer nil))
(save-excursion
(cond ((get-buffer searching-buffer)
(set-buffer searching-buffer)
(setq range (format "%d-%d" mh-first-msg-num mh-last-msg-num)))
(setq range (list (format "%d-%d"
mh-first-msg-num mh-last-msg-num))))
(t
(mh-make-folder searching-buffer)
(setq range "all")
(setq range '("all"))
(setq new-buffer t))))
(message "Searching...")
(goto-char (point-min))
(while (setq pattern (mh-next-pick-field pattern-buffer))
(while (and range
(setq pattern (mh-next-pick-field pattern-buffer)))
(setq msgs (mh-seq-from-command searching-buffer
'search
(nconc (cons "pick" pattern)
(list searching-buffer
range
"-sequence" "search"
"-list"))))
(setq range "search"))
(mh-list-to-string
(list "pick" pattern searching-buffer
"-list"
(mh-coalesce-msg-list range)))))
(setq range msgs)) ;restrict the pick range for next pass
(message "Searching...done")
(if new-buffer
(mh-scan-folder searching-buffer msgs)
(switch-to-buffer searching-buffer))
(delete-other-windows)
(mh-notate-seq 'search ?% (1+ mh-cmd-note))))
(mh-add-msgs-to-seq msgs 'search)
(delete-other-windows)))
(defun mh-seq-from-command (folder seq seq-command)
......@@ -128,18 +140,20 @@ Add messages found to the sequence named `search'."
(save-excursion
(save-window-excursion
(if (eq 0 (apply 'mh-exec-cmd-quiet nil seq-command))
;; "pick" outputs one number per line
(while (setq msg (car (mh-read-msg-list)))
(setq msgs (cons msg msgs))
(forward-line 1))))
(set-buffer folder)
(setq msgs (nreverse msgs)) ; Put in ascending order
(setq mh-seq-list (cons (mh-make-seq seq msgs) mh-seq-list))
(setq msgs (nreverse msgs)) ;put in ascending order
msgs)))
(defun mh-next-pick-field (buffer)
;; Return the next piece of a pick argument that can be extracted from the
;; BUFFER. Returns nil if no pieces remain.
;; BUFFER.
;; Return a list like ("--fieldname" "pattern") or ("-search" "bodypat")
;; or NIL if no pieces remain.
(set-buffer buffer)
(let ((case-fold-search t))
(cond ((eobp)
......@@ -166,12 +180,15 @@ Add messages found to the sequence named `search'."
(define-key mh-pick-mode-map "\C-c\C-c" 'mh-do-pick-search)
(define-key mh-pick-mode-map "\C-c\C-f\C-b" 'mh-to-field)
(define-key mh-pick-mode-map "\C-c\C-f\C-c" 'mh-to-field)
(define-key mh-pick-mode-map "\C-c\C-f\C-d" 'mh-to-field)
(define-key mh-pick-mode-map "\C-c\C-f\C-f" 'mh-to-field)
(define-key mh-pick-mode-map "\C-c\C-f\C-r" 'mh-to-field)
(define-key mh-pick-mode-map "\C-c\C-f\C-s" 'mh-to-field)
(define-key mh-pick-mode-map "\C-c\C-f\C-t" 'mh-to-field)
(define-key mh-pick-mode-map "\C-c\C-fb" 'mh-to-field)
(define-key mh-pick-mode-map "\C-c\C-fc" 'mh-to-field)
(define-key mh-pick-mode-map "\C-c\C-fd" 'mh-to-field)
(define-key mh-pick-mode-map "\C-c\C-ff" 'mh-to-field)
(define-key mh-pick-mode-map "\C-c\C-fr" 'mh-to-field)
(define-key mh-pick-mode-map "\C-c\C-fs" 'mh-to-field)
(define-key mh-pick-mode-map "\C-c\C-ft" 'mh-to-field)
(define-key mh-pick-mode-map "\C-c\C-w" 'mh-check-whom)
;;; mh-seq --- mh-e sequences support
;; Time-stamp: <93/12/02 09:36:09 gildea>
;; Time-stamp: <94/12/22 20:34:50 gildea>
;; Copyright 1993 Free Software Foundation, Inc.
;; Copyright (C) 1993, 1995 Free Software Foundation, Inc.
;; This file is part of mh-e.
......@@ -23,28 +23,36 @@
;; Internal support for mh-e package.
;;; Change Log:
;; $Id: mh-seq.el,v 1.5 94/12/27 22:38:10 gildea Exp $
;;; Code:
(provide 'mh-seq)
(require 'mh-e)
(defvar mh-last-seq-used nil
"Name of the sequence to which a message was last added.")
;;; Internal variables:
(defvar