]> git.eshelyaron.com Git - emacs.git/commitdiff
Upgraded to MH-E version 7.2.
authorBill Wohler <wohler@newt.com>
Mon, 3 Feb 2003 20:55:30 +0000 (20:55 +0000)
committerBill Wohler <wohler@newt.com>
Mon, 3 Feb 2003 20:55:30 +0000 (20:55 +0000)
See etc/MH-E-NEWS and lisp/mh-e/ChangeLog for details.

19 files changed:
etc/ChangeLog
etc/MH-E-NEWS
etc/NEWS
lisp/mh-e/ChangeLog [new file with mode: 0644]
lisp/mh-e/mh-alias.el
lisp/mh-e/mh-comp.el
lisp/mh-e/mh-customize.el
lisp/mh-e/mh-e.el
lisp/mh-e/mh-funcs.el
lisp/mh-e/mh-identity.el
lisp/mh-e/mh-index.el
lisp/mh-e/mh-loaddefs.el
lisp/mh-e/mh-mime.el
lisp/mh-e/mh-pick.el
lisp/mh-e/mh-seq.el
lisp/mh-e/mh-speed.el
lisp/mh-e/mh-utils.el
lisp/mh-e/mh-xemacs-compat.el
lisp/toolbar/mh-logo.xpm [new file with mode: 0644]

index 83f57c004d56870e94f03f16d875cf519b7eb723..cfe4b05b9aae4469a299a0237b0f1f71234af5fb 100644 (file)
@@ -1,3 +1,7 @@
+2003-02-03  Bill Wohler  <wohler@newt.com>
+
+       * MH-E-NEWS: Upgraded to MH-E version 7.2.
+
 2003-01-31  Joe Buehler  <jhpb@draco.hekimian.com>
 
        * MACHINES: Added Cygwin.
index e73ec462a38da416968429f6827b88057a063329..8a8ea8c66cf827f1a12723f62f4f044ca826d8da 100644 (file)
@@ -1,4 +1,151 @@
-* Changes in mh-e 7.1
+* Changes in MH-E 7.2
+
+This release includes the new features of filing hints, hierarchical
+file name completion, indexed search and pick integration, unification
+between `mh-visit-folder' and the speedbar, a displayed message
+indicator, buffer name organization, support for mairix indexed
+search, and last but not least, the MH-E logo has been added to the
+mode line. Code that handles sequences and message regions runs
+faster. Bugs have been fixed.
+
+** New Features in MH-E 7.2
+
+*** Filing Hints
+
+When you file a message, MH-E now looks for an alias corresponding to
+the address of the sender and offers that as a default folder (closes
+SF #657096). The new variable `mh-default-folder-prefix' can be used
+to put these folders in a sub-folder. The new variable
+`mh-default-folder-must-exist-flag' means to suppress the suggested
+folder (thereby providing the previous folder used) if the folder
+doesn't already exist. The new variable `mh-default-folder-list' can
+be used to map additional addresses and folders.
+
+*** Hierarchical File Name Completion
+
+When you completed filenames in the past, you were presented with a
+list of all your folders at all depths in the tree. Now you are
+presented with only one level at a time (closes SF #664821).
+As a result, the variables `mh-auto-folder-collect-flag' and
+`mh-folder-list-change-hook' are obsolete.
+
+*** Indexed Search and Pick Integration
+
+The indexed and pick searches have been integrated (closes SF
+#664816). Both "F s (mh-search-folder)" and "F i (mh-index-search)"
+use the pick template for forming queries. To submit the query, use
+"C-c C-c (mh-do-search)" which will use the query method you selected.
+If you change your mind while forming the query, you can use "C-c C-i
+(mh-index-do-search)" or "C-c C-p (mh-pick-do-search)" to submit the
+query using the respective method.
+
+Second, the results from a pick search are now saved in a sub-folder
+of +mhe-index like an indexed search.
+
+Third, `pick' is now a valid choice for `mh-index-program'.
+
+*** mh-visit-folder Metamorphosis Continues
+
+When visiting a folder from the speedbar, only the unseen messages are
+shown if there are unseen messages. If there aren't any unseen
+messages, all of the messages are shown if there are fewer than
+`mh-large-folder' messages; otherwise, the user is prompted for the
+range of messages to display. The "F v (mh-visit-folder)" command has
+been modified to mimic this behavior. Use a prefix arg to force the
+message range prompt.
+
+*** Displayed Message Indicator
+
+In graphical Emacs, the message that is shown is marked by a triangle
+in the fringe. In textual Emacs, there is a ">" in the first column
+(closes SF #664824).
+
+*** Buffer Name Organization
+
+All ephemeral buffer names start with " *mh" while all interesting
+buffers start with "*MH-E ". The "*Folders*", "*Sequences*", and
+"*Recipients*" buffers were therefore renamed to "*MH-E Folders*",
+"*MH-E Sequences*" and "*MH-E Recipients*" respectively (programmers
+should see mh-utils.el for the names of the new constants). Also, the
+output of MH commands is saved in the "*MH-E Log*" buffer.
+
+*** mh-index-program
+
+Add choices for `mairix' and `pick'.
+
+*** Logo Displayed on Mode Line
+
+** New Variables in MH-E 7.2
+
+The new variables have been discussed elsewhere.
+
+** Bug Fixes in MH-E 7.2
+
+*** mh-decode-content-transfer-encoded-message
+
+Messages that had been encoded with base64 were not decoded. This has
+been fixed with this new function (closes SF #674190). As a result,
+the variable `mh-decode-quoted-printable-flag' has been renamed to
+`mh-decode-content-transfer-encoded-message-flag'.
+
+*** mh-kill-folder
+
+Now restores previous window configuration (closes SF #664828).
+
+*** mh-mime-display
+
+MH-E was not using the charset defined in the content-type
+header. This meant that mail in a different charset would not
+be properly displayed. This has been fixed (closes SF #655123).
+
+*** mh-read-address
+
+In XEmacs and Emacs20, this function would always prompt using "To: "
+instead of using the command argument. This has been fixed (closes SF
+#670913).
+
+*** mh-rmail
+
+Unseen messages are now shown in addition to new ones (closes SF
+#667542).
+
+*** mh-scan-msg-overflow-regexp
+
+Change the variable so that a space is always maintained in the
+beginning of the scan line.
+
+*** mh-swish-execute-search
+
+The example configuration file in the docstring didn't show the
+backslash in the FileRules filename. If the example had been used
+literally by the user, no files would be indexed! This has been fixed
+(closes SF #665888).
+
+*** mh-thread-refile
+
+The "T o (mh-thread-refile)" command did not provide refiling hints
+like `mh-refile-msg'. This has been fixed (closes SF #664829).
+
+*** mh-toggle-threads
+
+If the threaded view was modified and then toggled, the standard view
+may not have been accurate (as it contained a potentially old first
+message to last message range). This has been fixed (closes SF
+#626117).
+
+*** mh-tool-bar-show-set, mh-tool-bar-letter-set, mh-tool-bar-folder-set
+
+Clicking the customize and help buttons now deletes the other windows
+in the frame.
+
+*** mh-version
+
+The "M-x mh-version" command displayed "Aliasfile: aliases". This has
+been fixed (closes SF #664467). See Buffer Name Organization above.
+
+\f
+
+* Changes in MH-E 7.1
 
 This release includes the new features of multiple identities and
 alias completion. In addition, indexed searching has been revamped.
@@ -204,7 +351,7 @@ changed (closes SF #643701).
 
 \f
 
-* Changes in mh-e 7.0
+* Changes in MH-E 7.0
 
 This is a major release which includes a lot of new features including
 improved MIME handling, speedbar folder browsing, and indexed
index c8bdfdefb3b71ee14a88ce94c4707e054b0f070a..d7afbb0aaef52cd7a7064154e5d8d765603cc84a 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -95,7 +95,7 @@ You can now put the init files .emacs and .emacs_SHELL under
 
 ** MH-E changes.
 
-Upgraded to MH-E version 7.1. There have been major changes since
+Upgraded to MH-E version 7.2. There have been major changes since
 version 5.0.2; see MH-E-NEWS for details.
 
 +++
diff --git a/lisp/mh-e/ChangeLog b/lisp/mh-e/ChangeLog
new file mode 100644 (file)
index 0000000..6e937b7
--- /dev/null
@@ -0,0 +1,6019 @@
+2003-02-03  Bill Wohler  <wohler@newt.com>
+
+       * Released MH-E version 7.2.
+
+       * MH-E-NEWS, README: Updated for release 7.2.
+
+       * mh-e.el (Version, mh-version): Updated for release 7.2.
+
+2003-02-03  Bill Wohler  <wohler@newt.com>
+
+       * Makefile (dist): mkdir needs to happen *before* files are
+       copied.
+
+       * MH-E-NEWS: Fixed some awkward verbiage.
+
+2003-02-02  Bill Wohler  <wohler@newt.com>
+
+       * mh-customize.el (mh-invisible-headers): Surround regexp-opt
+       expression in parens to avoid problems viewing certain messages.
+
+2003-01-30  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-speed.el (mh-speed-flists): Search for flists in mh-progs.
+       The original was inadvertently searching for flists in the user's
+       path.
+
+2003-01-27  Bill Wohler  <wohler@newt.com>
+
+       * mh-customize.el (mh-default-folder-must-exist-flag): Changed
+       default to t according to the principle of least surprise.
+
+2003-01-26  Bill Wohler  <wohler@newt.com>
+
+       * mh-utils.el: Checkdoc fixes.
+
+       * mh-pick.el (mh-do-search, mh-search-folder): Checkdoc fixes.
+
+       * mh-loaddefs.el: Regenerated (lm-verify fixes).
+
+       * mh-index.el (mh-mairix-next-result): Checkdoc fixes.  
+
+       * mh-alias.el: lm-verify fix.
+
+       * Makefile (MH-E-SRC): Added ChangeLog, now that Emacs has a
+       lisp/mh-e directory.
+       (MH-E-ETC-ETC): Removed ChangeLog.
+       (dist): Moved creation of mail directory next to copy of files
+       into mail directory.
+       (install-emacs): Copy $(MH-E-SRC) into new directory
+       $(EMACS_HOME/lisp/mh-e.
+       (MH-E-SRC): Moved ChangeLog into new variable MH-E-OTHERS and
+       include MH-E-LOADDEFS there too.
+       (mh-loaddefs.el): Added lines so that lm-verify passes.
+       (dist, install-emacs): Use MH-E-OTHERS instead of MH-E-LOADDEFS.
+
+2003-01-26  Jeffrey C Honig  <jch@honig.net>
+
+       * mh-comp.el (mh-tidy-draft-buffer, mh-compose-and-send-mail):
+       Rename mh-kill-draft-hook to mh-tidy-draft-buffer.
+
+2003-01-25  Jeffrey C Honig  <jch@honig.net>
+
+       * mh-utils.el (mh-exec-cmd, mh-exec-cmd-daemon)
+       (mh-process-daemon): Use mh-log-buffer for the output of commands
+       from mh-exec-cmd.
+
+       * mh-utils.el (mh-temp-folders-buffer): Sequences and folders
+       loose the -temp from their buffer names as they are interesting to
+       the user.
+
+       * mh-seq.el (mh-list-sequences): New name, mh-sequences-buffer as
+       it is intended to be interesting to the user.
+
+       * mh-funcs.el (mh-list-folders): New name, mh-folders-buffer as it
+       is intended to be interesting to the user.
+
+       * mh-comp.el (mh-check-whom, mh-compose-and-send-mail): Use
+       mh-recipients-buffer constant.  Add a kill buffer hook to delete
+       the recipients buffer when a draft buffer is killed.
+
+2003-01-25  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-customize.el (mh-customize): New interactive argument
+       deletes other windows.
+       (mh-tool-bar-show-set, mh-tool-bar-letter-set)
+       (mh-tool-bar-folder-set): Modified so that clicking the customize
+       and help buttons deletes the other windows in the frame.
+
+       * mh-mime.el (mh-mm-inline-message): Remove unused code.
+
+       * mh-seq.el (mh-notate-deleted-and-refiled): Fix a small bug where
+       the wrong notation was being used.
+       (mh-toggle-threads): The function had a bug if you did the
+       following starting from an unthreaded wide folder:
+         (1) Create a sequence with S p
+         (2) Narrow to new sequence with S n
+         (3) Thread narrowed folder with T t
+         (4) Kill sequence with S k
+         (5) Unthread narrowed folder with T t
+       At this point we would have an empty folder. The change fixes
+       this.
+       (mh-toggle-threads): Fix documentation.
+
+       * mh-customize.el (mh-invisible-header-fields): Add
+       X-MHE-Checksum to invisible headers.
+
+       * mh-comp.el (mh-insert-x-mailer): Slightly more informative
+       X-Mailer header.
+
+2003-01-24  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-e.el (mh-header-display): Modified so that quoted-printable
+       or base64 encoded messages are left untouched.
+
+       * mh-utils.el (mh-decode-content-transfer-encoded-message): Munge
+       the Content-Transfer-Encoding header so that the MIME decoding
+       routines of Gnus doesn't get confused.
+       (mh-display-msg): Use insert-file-contents-literally so that
+       display will work for non-ascii.
+
+       * mh-mime.el (mh-mime-display): Use charset info to decode
+       message file (closes SF #655123).
+
+2003-01-24  Bill Wohler  <wohler@newt.com>
+
+       * mh-alias.el (mh-alias-add-alias-to-file): Removed period from
+       error message and added parens around error function.
+
+2003-01-24  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-customize.el (mh-decode-quoted-printable-flag): Removed.
+       (mh-decode-content-transfer-encoded-message-flag): This replaces
+       mh-decode-quoted-printable-flag.
+
+       * mh-utils.el (mh-decode-content-transfer-encoded-message): New
+       function which handles messages that are encoded as base64 or
+       quoted-printable (closes SF #674190).
+       (mh-decode-quoted-printable): Removed.
+       (mh-display-msg): Use mh-decode-content-transfer-encoded-message
+       instead of mh-decode-quoted-printable.
+
+2003-01-23  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el (mh-thread-generate-scan-lines): Fix a little bug
+       that would occasionally cause angles ('<' and '>') to appear at
+       root level.
+
+2003-01-21  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el (mh-notate-cur): Enable overlay arrow display in text
+       mode too.
+
+       * mh-e.el (mh-folder-mode): Initialize overlay-arrow-string so
+       that a '>' is displayed in text mode.
+
+2003-01-20  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-utils.el (mh-scan-msg-overflow-regexp): Change the variable
+       so that a space is always maintained in the beginning of the scan
+       line.
+
+       * mh-seq.el (mh-notate-seq, mh-notate-cur): Make the functions
+       faster by cutting down on the use of mh-goto-msg.
+       (mh-toggle-threads): Add call to mh-notate-cur, since inserting
+       the folder names in a search results folder screws up the
+       location of the overlay arrow.
+
+       * mh-index.el (mh-index-delete-folder-headers): Position the
+       point on a message line if possible.
+
+       * mh-funcs.el (mh-copy-msg): Use the mh-iterate macro to make the
+       function faster.
+
+       * mh-e.el (mh-scan-folder): Reuse mh-notate-deleted-and-refiled.
+
+       * mh-loaddefs.el: Regenerated.
+
+       * mh-utils.el (mh-add-msgs-to-seq): Add a new parameter that
+       suppresses the annotation of the sequence since it is
+       inefficient.
+
+       * mh-seq.el (mh-delete-seq): Speed up the part of the function
+       that removes the sequence notation.
+       (mh-put-msg-in-seq, mh-notate-deleted-and-refiled): Use
+       mh-iterate-on-messages-in-region to make the function fasters when
+       operating on regions. The key idea is to loop over the folder
+       buffer exactly once and do all annotations. The existing algo
+       would walk over the buffer multiple times thereby slowing things
+       down.
+       (mh-iterate-on-messages-in-region): Added an extra parameter which
+       is bound to the message index as the loop is executed.
+       (mh-region-to-msg-list, mh-thread-delete, mh-thread-refile): Use
+       the new mh-iterate-on-messages-in-region macro.
+
+       * mh-e.el (mh-delete-msg-no-motion, mh-refile-msg, mh-undo): Same
+       as above.
+       (mh-notate-user-sequences): Change algorithm to make notating of
+       user sequences fast.
+
+2003-01-19  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-logo.xpm: New image file that contains the MH-E logo.
+       Change foreground color to the blue in the MH-E logo.
+
+       * Makefile (MH-E-IMG): Add mh-logo.xpm to list of image files.
+
+       * mh-utils.el (mh-show-buffer-mode-line-buffer-id): Adjust it to
+       keep space in the beginning for the logo.
+       (mh-logo-cache): New variable that caches the logo image file
+       location.
+       (mh-logo-display): Display the MH-E logo on the mode line.
+       (mh-display-msg): Display logo in mh-show-mode.
+
+       * mh-e.el (mh-make-folder-mode-line): Display logo in
+       mh-folder-mode.
+
+       * mh-comp.el (mh-compose-and-send-mail): Display logo in
+       mh-letter-mode.
+
+       * mh-loaddefs.el: Regenerated.
+
+       * mh-seq.el (mh-iterate-on-messages-in-region): New macro to
+       iterate on all messages in a region.
+       (mh-region-to-msg-list): Simplified since it uses
+       mh-iterate-on-messages-in-region now.
+
+       * mh-e.el (mh-delete-msg, mh-refile-msg): Change interactive spec
+       to pass the region that is to be deleted when appropriate.
+       (mh-delete-msg-no-motion, mh-refile-msg, mh-undo): Operate on
+       regions directly without creating the list of messages to be
+       deleted/refiled.
+       (mh-delete-a-msg, mh-refile-a-msg, mh-undo-msg): The msg
+       parameter in these functions can now be nil. If so, the current
+       message is deleted, refiled or undone respectively. Avoids the
+       use of mh-goto-msg in this case and speeds up operations on
+       regions quite a bit.
+
+2003-01-19  Peter S Galbraith  <psg@debian.org>
+
+       * mh-alias.el (mh-read-address): Bug Fix. In XEmacs and Emacs20,
+       it would always prompt using "To: " instead of using the command
+       argument (closes SF #670913).
+
+2003-01-19  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-utils.el (mh-folder-completion-function): If there is a
+       +foo/bar folder and the user types foo//bar then the completion
+       function would say a match happened without showing the
+       normalized folder name. This change fixes that.
+
+2003-01-18  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-e.el (mh-rmail): Modified so that new and unseen messages
+       are shown (closes SF #667542).
+
+2003-01-17  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-index.el (mh-index-generate-pretty-name): Generate nicer
+       names. In particular all '-' characters are removed.
+
+2003-01-16  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-customize.el (mh-index-program): Documentation fix.
+
+       * mh-loaddefs.el: Regenerated.
+
+       * mh-customize.el (mh-index-program): Add choices for mairix and
+       pick.
+
+       * mh-index.el (mh-indexer-choices): Add search interfaces for
+       mairix and pick.
+       (mh-index-search): Add links for mairix and pick.
+       (mh-index-pick-folder, mh-pick-binary): Variables needed to
+       implement pick support.
+       (mh-pick-execute-search, mh-pick-next-result): New functions to
+       implement pick support.
+       (mh-mairix-binary, mh-mairix-directory, mh-mairix-folder): New
+       variables for mairix support.
+       (mh-mairix-execute-search, mh-mairix-next-result)
+       (mh-mairix-regexp-builder, mh-mairix-convert-to-sop*): New
+       functions for mairix.
+
+       * mh-funcs.el (mh-kill-folder): Move message to the end.
+
+       * mh-e.el (mh-folder-mode): Make overlay-arrow-position and
+       overlay-arrow-string local variables so that the arrow will
+       remain even if some other folder is visited.
+       (mh-remove-cur-notation, mh-remove-all-notation): The test isn't
+       required any more since overlay-arrow-position is local.
+       (mh-goto-cur-msg): Remove overlay arrow if current message
+       doesn't exist.
+
+       * mh-seq.el (mh-notate-cur): Don't need to set
+       overlay-arrow-string any more since it is local and has been set
+       at initialization.
+
+2003-01-15  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-speed.el (mh-speed-current-folder): Keep track of current
+       folder when flists is called.
+       (mh-speed-flists, mh-speed-parse-flists-output): Try to avoid
+       ambiguity when folders are present with + at the end of the name.
+       Unfortunately it can't always be avoided.
+
+       * mh-e.el (mh-folder-size): Remove the unnecessary error check.
+       (mh-parse-flist-output-line): Add extra argument which
+       occasionally avoid problems with folder names that end with '+'.
+
+       * mh-utils.el (mh-sub-folders-actual): Fix the folder name
+       parsing so that it doesn't get confused by trailing '+' chars in
+       the folder name.
+
+2003-01-14  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-utils.el (mh-normalize-folder-name): Enhanced so that it can
+       now handle ".." and "." correctly during folder name completion.
+       (mh-normalize-folder-name): Avoid error in boundary condition
+       where the folder string is empty.
+
+2003-01-14  Mark D. Baushke  <mdb@gnu.org>
+
+       * mh-e.el (mh-visit-folder): Pass `current-prefix-arg' to
+       the `mh-read-msg-range' function as the optional
+       always-prompt-flag.
+
+2003-01-14  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-utils.el (mh-normalize-folder-name): New function that
+       normalizes folder names.
+       (mh-sub-folders): Use mh-normalize-folder-name. Also the function
+       has been modified so that a trailing slash is only added if the
+       folder potentially has subfolders.
+       (mh-sub-folders-actual): Simplified since the folder has already
+       been normalized in mh-sub-folders.
+       (mh-remove-from-sub-folders-cache): Modified so that the cached
+       results of two of the folders ancestors are invalidated.
+       (mh-folder-completion-map): Ugly hack to make the error go away
+       when minibuffer-complete-word is called.
+       (mh-folder-completion-function): The completion function will now
+       be more selective in adding '/' at the end of completed folder
+       names.
+       (mh-folder-completing-read): The folder name is normalized before
+       return. The minibuffer-local-completion-map is shadowed to avoid
+       error with SPC (bound to minibuffer-complete-word). We really
+       need a better solution.
+
+2003-01-13  Bill Wohler  <wohler@newt.com>
+
+       * mh-seq.el: Edited comment and docstring text to conform with RFC
+       2822 terminology. Message-ID is the header field. It contains a
+       message identifier.
+
+2003-01-13  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-utils.el (mh-sub-folders): Add an argument that returns
+       sub-folders with a / character appended at the end.
+       (mh-folder-completion-function): Modify the function so that one
+       tab is now sufficient to complete the folder name and add a
+       trailing /.
+       (mh-folder-completing-read): Remove the trailing / that the
+       completion function now adds to the folder name. Also multiple /
+       characters in the folder input are removed. So if the user inputs
+       +foo///bar//baz///// then that will be converted to +foo/bar/baz.
+       This will improve the performance of caching.
+
+       * mh-seq.el (mh-notate-cur): Check that a valid current message
+       exists before trying to notate (closes SF #667331).
+       (mh-message-id-regexp): New variable to store regexp to recognize
+       message-ids.
+       (mh-thread-generate): Use mh-message-id-regexp to filter out non
+       message-id's from the References: header.
+
+2003-01-12  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el (mh-notate-cur): Disable overlay-arrow display if we
+       aren't on a graphic display.
+
+2003-01-11  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el (mh-notate-cur): New function to notate the current
+       message. The marker in the fringe is updated too.
+       (mh-narrow-to-seq, mh-widen, mh-thread-inc, mh-thread-folder): Use
+       the specialized function mh-notate-cur instead of mh-notate-seq.
+
+       * mh-e.el (mh-arrow-marker): New buffer local variable to store
+       the position where the marker in the fringe is going to be
+       displayed (closes SF #664824).
+       (mh-folder-mode): Create a marker for the fringe.
+       (mh-update-sequences, mh-get-new-mail, mh-goto-cur-msg): Call the
+       specialized function mh-notate-cur instead of mh-notate-seq or
+       mh-notate.
+       (mh-remove-cur-notation, mh-remove-all-notation): Reset the
+       overlay-arrow-position if needed.
+
+       * mh-loaddefs.el: Regenerated.
+
+2003-01-10  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-utils.el (mh-remove-from-sub-folders-cache): Modified so that
+       creating nested folders doesn't produce inconsistent results.
+       (mh-prompt-for-folder): Remove call of mh-folder-list-change-hook.
+
+       * mh-funcs.el (mh-kill-folder): Don't ask for confirmation if
+       called on a folder holding index search results. Also the now
+       removed mh-folder-list-change-hook is called no more.
+
+       * mh-customize.el (mh-auto-folder-collect-flag) 
+       (mh-folder-list-change-hook): Removed.
+
+       * mh-loaddefs.el: Regenerated.
+
+2003-01-10  Bill Wohler  <wohler@newt.com>
+
+       * mh-customize.el (mh-default-folder-must-exist-flag): New
+       variable to suppress suggested folder if the folder doesn't
+       already exist (closes SF #657096).
+       (mh-default-folder-list): New variable that
+       holds mapping between an address and the desired folder for
+       filing (closes SF #657096).
+       (mh-default-folder-prefix, mh-default-folder-must-exist-flag): In
+       docstring, refer to documentation for mh-prompt-for-refile-folder
+       and mh-folder-from-address.
+       (mh-highlight-citation-p, mh-compose-insertion,
+       (mh-insert-mail-followup-to-list, mh-index-program,
+       (mh-identity-default): Fixed case of tags.
+
+       * mh-e.el (mh-folder-from-address): Use new variable
+       mh-default-folder-must-exist-flag to return nil if this variable
+       is t and the folder doesn't already exist. In addition, can now
+       look up a default folder in the new variable
+       mh-default-folder-list (closes SF #657096).
+       (mh-prompt-for-refile-folder): In docstring, refer to
+       documentation in mh-folder-from-address.
+
+       * mh-index.el (mh-swish-execute-search): Changed \..* to \\..* in
+       the FileRules filename in the sample config file. Otherwise, the
+       users don't see the backslash at all, and no files are indexed!
+       (closes SF #665888).
+
+2003-01-10  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el (mh-thread-folder): Get headers for exactly the
+       messages that are present. If only messages 1-10 and 3800-3900
+       are being shown then we will now scan exactly those messages and
+       not the full range from 1-3900 as was being done earlier.
+       (mh-toggle-threads): When converting from threaded to normal view
+       only the messages present in the buffer are scanned. Earlier all
+       messages from the minimum to the maximum would be scanned (closes
+       SF #626117).
+
+       * mh-pick.el (mh-search-folder): Fix typo.
+       (mh-pick-do-search): Fix bug from cut and paste. Also set window
+       config properly.
+
+       * mh-utils.el (mh-prompt-for-folder): Add new argument to allow
+       it to accept + as a folder name. This allows the user to search
+       all folders when "Fs" is used.
+
+       * mh-pick.el (mh-search-folder): Fix interactive spec of function.
+       (mh-pick-do-search): Rewritten to call pick in one go. This will
+       make adding pick as a default index search program easier. Also
+       pick now accepts the same query syntax as the index search
+       programs (closes SF #664816).
+       (mh-next-pick-field): Removed.
+       (mh-pick-parse-search-buffer): New function to parse the search
+       buffer.
+       (mh-pick-construct-regexp, mh-pick-regexp-builder): New function
+       to produce a pick query from the parsed representation.
+
+       * mh-index.el (mh-index-do-search): Refactor the search pattern
+       parser into a new function and use that instead.
+
+       * mh-loaddefs.el: Regenerated.
+
+2003-01-10  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-loaddefs.el: Regenerated.
+
+       * mh-utils.el (mh-remove-from-sub-folders-cache)
+       (mh-prompt-for-folder): Replace mh-update-sub-folders-cache with
+       mh-remove-from-sub-folders-cache.
+       (mh-exec-cmd-daemon): Mention set-process-filter in documentation.
+
+       * mh-pick.el (mh-searching-function): New buffer local variable
+       that keeps track of the default searching function to be used.
+       (mh-pick-mode): Make mh-searching-function buffer local.
+       (mh-search-folder): Set mh-searching-function to use pick.
+       (mh-search-folder, mh-pick-menu, mh-pick-mode-help-messages) 
+       (mh-pick-mode, mh-do-pick-search, mh-pick-do-search): Rename
+       mh-do-pick-search to mh-pick-do-search. But keep
+       mh-do-pick-search as a deprecated function.
+       (mh-do-search): New interactive function that performs the
+       default search.
+       (mh-pick-mode-map): Update keymap.
+
+       * mh-index.el (mh-index-search): Set mh-searching-function to do
+       index search.
+       (mh-index-new-folder): Replace mh-update-sub-folders-cache with
+       mh-remover-from-sub-folders-cache.
+
+       * mh-funcs.el (mh-kill-folder): Same as above.
+
+       * mh-index.el (mh-index-evaluate, mh-swish++-regexp-builder):
+       Checkdoc fixes.
+
+       * mh-customize.el: Fixes to make byte compiler in CVS Emacs
+       perfectly happy.
+
+2003-01-09  Bill Wohler  <wohler@newt.com>
+
+       * mh-e.el (mh-folder-from-address): New function that proposes the
+       name of a folder with an alias for the address in the current message.
+       (mh-prompt-for-refile-folder): Use it (closes SF #657096).
+       
+       * mh-customize.el (mh-default-folder-prefix): New variable used by
+       mh-folder-from-address.
+       (mh-invisible-header-fields): Edited docstring.
+
+       * mh-alias.el (mh-alias-address-to-alias): Added ;;;###mh-autoload
+       cookie (used by mh-folder-from-address in mh-e.el). Edited text in
+       comment.
+
+       * mh-utils.el: Provided naming conventions for buffer and buffer
+       variable names.
+       (mh-temp-folders-buffer): Renamed buffer to " *mh-folders*".
+       (mh-temp-sequences-buffer): Renamed buffer to " *mh-sequences*".
+       (mh-info-buffer): Renamed from mh-temp-info-buffer.
+       (mh-log-buffer): New buffer variable to hold name of "*MH-E Log*"
+       buffer which is expected to be used for the output of MH commands.
+       Perhaps we always create this buffer at initialization and append
+       to it rather than erase it each time?
+
+       * mh-e.el (mh-quit): Loop over all buffers and delete MH-E
+       temporary and working buffers. As long as the buffer naming
+       conventions are followed, new buffers will be automatically
+       killed.
+       (mh-version): Renamed mh-temp-info-buffer to mh-info-buffer.
+
+       * mh-comp.el (mh-insert-x-mailer): Renamed mh-temp-info-buffer to
+       mh-info-buffer.
+       
+2003-01-09  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-e.el (mh-folder-size): If the user doesn't have a
+       Unseen-Sequence definition in .mh_profile then an error was
+       produced. This change fixes that.
+
+       * mh-seq.el (mh-thread-generate): Replace the *mh-thread* buffer
+       with a temporary buffer which is cleaned up when the function
+       exits.
+
+       * mh-e.el (mh-prompt-for-refile-folder): New function which
+       refactors out the intelligent folder guessing code from
+       mh-refile-msg.
+       (mh-refile-msg): Use mh-prompt-for-refile-folder.
+
+       * mh-seq.el (mh-thread-refile): Use mh-prompt-for-refile-folder to
+       do the same intelligent destination folder guessing as
+       mh-refile-msg (closes SF #664829).
+
+       * mh-utils.el (mh-folder-list, mh-make-folder-list-process)
+       (mh-folder-list-temp, mh-folder-list-partial-line)
+       (mh-set-folder-list): Removed.
+       (mh-sub-folders-cache, mh-sub-folders, mh-sub-folders-actual):
+       Moved over from mh-speed.el to implement hierarchical completion.
+       (mh-update-sub-folders-cache): Utility function called when
+       new folders are created or folders are removed.
+       (mh-folder-completion-function): New function is the folder name
+       completion function used in completing-read.
+       (mh-folder-completing-read): A thin wrapper function that is used
+       instead of completing-read directly. In the future we might want
+       to allow the user a customizable variable which will turn off
+       folders based completion.
+       (mh-prompt-for-folder): Use mh-folder-completing-read to read in
+       the folder name with hierachical completion (closes SF #664821).
+
+       * mh-speed.el (mh-speed-folders, mh-speed-folders-cache)
+       (mh-speed-folders-actual): Moved to mh-utils.el as mh-sub-folders,
+       mh-sub-folders-cache and mh-sub-folders-actual respectively.
+       (mh-speed-invalidate-map, mh-speed-invalidate-map) 
+       (mh-speed-add-folder): Use the new names.
+
+       * mh-funcs.el (mh-kill-folder): Remove code that used to update
+       mh-folder-list which is no longer present. Instead
+       mh-update-sub-folders-cache is called.
+
+       * mh-index.el (mh-index-new-folder): Same as above.
+
+2003-01-08  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-utils.el (mh-exec-cmd-daemon): An argument was added which
+       controls what is done with the process output.
+
+       * mh-funcs.el (mh-kill-folder): Use mh-previous-window-config to
+       restore window configuration. Also the call to mh-exec-cmd-daemon
+       only displays output if an error happened (closes SF #664828).
+       (mh-rmf-daemon): Check rmf output and display it only if
+       something went wrong.
+       (mh-print-msg): Pass in nil argument to mh-exec-cmd-daemon.
+
+       * mh-comp.el (mh-redistribute, mh-send-letter): Pass in nil
+       argument to mh-exec-cmd-daemon so that the functions will behave
+       as before.
+
+       * mh-pick.el (mh-search-folder): The current window config is
+       stored.
+       (mh-make-pick-template): Make the message headers read-only.
+       (mh-pick-mode-help-messages): Update help message.
+       (mh-do-pick-search): Fix problem when buffer isn't showing any
+       messages.
+       (mh-next-pick-field): Use buffer-substring-no-properties is
+       better.
+       (mh-pick-mode-map): Add key bindings (partially addresses
+       SF #664816)
+
+       * mh-index.el (mh-indexer-choices): Add a new field for each
+       index program choice. If it is non-nil then it is the name of a
+       function that given a lisp expression to search for generates a
+       pattern that is acceptable to the search program.
+       (mh-index-regexp-builder): New variable that stores the function
+       to be used to convert from the lisp expression syntax to
+       something that the search program understands.
+       (mh-index-generate-pretty-name): Generalized so that it can take
+       a list of strings as input.
+       (mh-index-search): Modified so that if the configured program has
+       a corresponding regexp-builder then a search buffer like pick
+       search is produced. Otherwise the previous behavior is maintained.
+       (mh-index-do-search): New interactive function that takes the
+       contents of the search buffer, generates an appropriate query and
+       produces the search results buffer by calling mh-index-search.
+       (mh-replace-string, mh-index-parse-search-regexp) 
+       (mh-index-add-implicit-ops, mh-index-evaluate): New functions
+       which parses the infix search expression that the user enters. A
+       parse tree from which queries for different search programs can
+       be produced is produced.
+       (mh-swish++-regexp-builder, mh-swish++-print-regexp): Takes the
+       internal form of the query and produces input suitable for
+       swish++.
+
+       * mh-loaddefs.el: Regenerated.
+
+2003-01-08  Bill Wohler  <wohler@newt.com>
+
+       * Makefile (emacs-logs): New target for viewing CVS Emacs logs.
+       Useful to see if an Emacs developer has changed MH-E.
+
+       * MH-E-NEWS: Fixed case of MH-E in the "Changes" title. 
+
+       * mh-utils.el (mh-temp-info-buffer): New variable to hold name of
+       buffer that contains version info.
+
+       * mh-e.el (mh-version): Use mh-temp-info-buffer instead of
+       mh-temp-buffer since version information was getting clobbered by
+       the aliasing code before it could be seen (closes SF #664467).
+       (mh-quit): Delete mh-temp-info-buffer.
+
+       * mh-comp.el (mh-insert-x-mailer): Use mh-temp-info-buffer to find
+       version info instead of mh-temp-buffer. You kind of need this
+       patch to send mail.
+
+2003-01-07  Bill Wohler  <wohler@newt.com>
+
+       * mh-e.el (Version, mh-version): Set to 7.1+cvs.
+
+2003-01-07  Bill Wohler  <wohler@newt.com>
+
+       * Released MH-E version 7.1.
+
+       * MH-E-NEWS, README: Updated for release 7.1.
+
+       * mh-e.el (Version, mh-version): Updated for release 7.1.
+
+2003-01-07  Bill Wohler  <wohler@newt.com>
+
+       * mh-customize.el (mh-auto-folder-collect-flag,
+       mh-alias-system-aliases, mh-alias-insert-file): Edited docstrings.
+
+       * Makefile (MH-E-IMG): Added alias.pbm and alias.xpm.
+
+       * mh-alias.el (mh-alias-insert-file, mh-alias-add-alias): Fixed
+       checkdoc warnings.
+
+2003-01-07  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-utils.el (mh-search-from-end): New function that is used to
+       replace our usage of the CL function search.
+       (font-lock): The library is loaded to avoid compilation warning
+       in CVS Emacs.
+
+       * mh-speed.el (mh-speed-goto-folder, mh-speed-add-folder) 
+       (mh-speed-extract-folder-name, mh-speed-invalidate-map): Use
+       mh-search-from-end instead of search.
+
+       * mh-seq.el (mh-thread-remove-parent-link): Use loop instead of
+       remove*.
+       (mh-thread-process-in-reply-to): Use mh-search-from-end instead
+       of search.
+
+       * mh-index.el (mh-md5-parser): Fix name of function.
+       (mh-index-update-single-msg, mh-index-update-maps): Avoid using
+       destructuring-bind since Emacs-20.7 can't handle this particular
+       usage.
+       (mh-namazu-next-result): Use mh-search-from-end instead of
+       search.
+
+       * mh-e.el (recursive-load-depth-limit): Add a defvar since CVS
+       emacs which doesn't have the variable defined causes a compiler
+       warning.
+       (mh-refile-a-msg): Rewritten to avoid using pushnew.
+       (mh-undo-msg): Use loop instead of remove-if.
+
+       * mh-comp.el (mh-show-buffer-message-number): Use
+       mh-search-from-end instead of search.
+
+2003-01-01  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-e.el (mh-visit-folder): Modified so that if RANGE is nil then
+       all messages are displayed. Documentation modified so that this is
+       explicitly stated.
+       (mh-visit-folder): Really fix it this time.
+
+2003-01-01  Mark D Baushke  <mdb@gnu.org>
+
+       * mh-alias.el (mh-alias-from-has-no-alias-p): Needs the
+       mh-autoload comment or mh-customize may have problems finding the
+       function.
+
+       * mh-loaddefs.el: Regenerated.
+
+2002-12-28  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-index.el (mh-namazu-execute-search): Fix bug in documentation.
+
+2002-12-28  Bill Wohler  <wohler@newt.com>
+
+       * mh-comp.el (mh-letter-mode): Mention mh-compose-insertion
+       variable in docstring, explain how to expand directives, and
+       don't mention mh-mhn-compose-insertion which isn't used directly
+       any more.
+       (mh-send-letter): Mention that X-Mailer and X-Face are inserted
+       automatically so that a user isn't tempted to do so himself in
+       mh-before-send-letter-hook.
+       (mh-insert-letter): Use "variable" prefix for mh-invisible-headers
+       now that we have both a function and a variable. Clarified
+       language a bit.
+
+2002-12-26  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-utils.el (mh-show-xface-function): Only load x-face-e21 if
+       the emacs is not XEmacs.
+
+       * mh-index.el (mh-index-new-folder): The folder created should
+       always be added to mh-folder-list. Otherwise folder name
+       completion doesn't find the new folder created.
+
+2002-12-24  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-customize.el (mh-clean-message-header-flag) 
+       (mh-visible-headers, mh-invisible-headers) 
+       (mh-invisible-header-fields-set): Reworded to satisfy checkdoc.
+
+       * mh-loaddefs.el: Regenerated.
+
+       * mh-e.el (mh-inc-folder, mh-visit-folder, mh-read-msg-range):
+       Handle nil value of mh-large-folder properly.
+
+       * mh-customize.el (mh-tool-bar-show-set, mh-tool-bar-letter-set) 
+       (mh-tool-bar-folder-set, mh-tool-bar-folder-buttons) 
+       (mh-invisible-headers, mh-invisible-header-fields-set): Checkdoc
+       fixes.
+       (mh-large-folder): Updated to allow for infinity. If
+       mh-large-folder is nil then all folders are deemed small.
+
+2002-12-23  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-e.el (mh-inc-folder, mh-visit-folder): Emit a message if
+       threading was suppressed because the number of messages exceed
+       mh-large-folder.
+
+2002-12-23  Peter S Galbraith  <psg@debian.org>
+
+       * mh-utils.el (mh-invisible-headers): Deleted.  Moved to
+       mh-customize.el
+
+       * mh-customize.el (mh-invisible-header-fields): New
+       defcustom. Simple user interface to change mh-invisible-headers.
+       (mh-invisible-header-fields-set): New function called when
+       mh-invisible-header-fields is set.
+       (mh-invisible-headers): New function.  Does the actual work of
+       building the variable mh-invisible-headers from
+       mh-invisible-header-fields.
+       (mh-invisible-headers): defvar moved from mh-utils.el
+
+2002-12-22  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-speed.el (mh-speed-folder-size): Removed. Something very
+       similar appears as mh-folder-size.
+       (mh-speed-view): Simplified since the range selection logic has
+       been moved to mh-read-msg-range.
+       (mh-speed-parse-flists-output-line): Moved to mh-e.el as
+       mh-parse-flist-output-line.
+
+       * mh-funcs.el (mh-pack-folder): Use the new mh-read-msg-range.
+
+       * mh-e.el (mh-rescan-folder): Use the new mh-read-msg-range.
+       (mh-parse-flist-output-line): Moved from mh-speed.el where this
+       function was called mh-speed-parse-flists-output-line.
+       (mh-folder-size): Renamed from mh-speed-folder-size. The function
+       has been made more general and can be called from any buffer and
+       not just the speedbar buffer.
+       (mh-visit-folder): Use the new mh-read-msg-range (addresses SF
+       #655891).
+       (mh-read-msg-range): Rewritten.
+
+2002-12-21  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el (mh-delete-subject-or-thread): New interactive
+       function that intelligently deletes messages based on threading,
+       if the folder is threaded, or on subject if folder isn't threaded.
+
+       * mh-utils.el (mh-show-delete-subject-or-thread): New interactive
+       function, callable from the show buffer, to intelligently delete
+       messages based on threading info or subject.
+       (mh-show-mode-map): Change binding of "k" to call
+       mh-show-delete-subject-or-thread.
+
+       * mh-e.el (mh-folder-mode-map): Change binding of "k" to call
+       mh-delete-subject-or-thread.
+
+       * mh-comp.el (mh-letter-mode-map): Add key binding for
+       mh-insert-identity.
+
+       * mh-loaddefs.el: Regenerated.
+
+2002-12-21  Peter S Galbraith  <psg@debian.org>
+
+       * mh-customize.el (mh-tool-bar-letter-set): Bug fix.  The
+       `tool-bar-add-item-from-menu' items were broken.  I can't use my
+       constants there.
+
+2002-12-21  Peter S Galbraith  <psg@debian.org>
+
+       * mh-alias.el (mh-alias-insert-file): Bug fix.  I never checked
+       that an AliasFile entry existed in .mh_profile.
+
+2002-12-21  Peter S Galbraith  <psg@debian.org>
+
+       * mh-customize.el (mh-alias-insertion-location): New defustom.
+       Specifies where new aliases are entered in alias files.
+
+       * mh-alias.el (mh-alias-add-alias-to-file): Use it.
+
+2002-12-21  Peter S Galbraith  <psg@debian.org>
+
+       * mh-alias.el (mh-alias-add-alias-to-file): If ALIAS matches
+       exactly, prompt to [i]nsert before old value or [a]ppend after it.
+       (mh-alias-insert-file): Make sure we don't edit the passwd file.
+       Add optional argument for alias; If ALIAS is specified and it
+       already exists, try to return the file that contains it.
+       (mh-alias-which-file-has-alias): New function. Return the name of
+       writable file which defines ALIAS from list FILE-LIST.
+       (mh-alias-add-alias): Remove prompts for case of alias already
+       defined; done in mh-alias-add-alias-to-file.
+
+2002-12-21  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-speed.el (mh-speed-folders-actual): Fix bug in parsing of
+       folder names that have spaces in them. The original function would
+       truncate the folder name at the first space.
+       (mh-speed-flists): Add -sequence option to flists. This guards
+       against the user specifying something other than the unseen
+       sequence in his .mh_profile.
+       (mh-speed-parse-flists-output-line): New function that parses a
+       single line in the output of flists to find the folder name and
+       the counts of unseesn and total messages.
+       (mh-speed-parse-flists-output): Fix parsing bug which truncates
+       the folder names at the first space.
+
+       * mh-index.el (mh-index-generate-pretty-name): New function which
+       generates a nicer name for the search results. It trims white
+       space at the beginning and end and replaces white space with
+       underscores within the search regexp.
+       (mh-index-search): Use mh-index-generate-pretty-name.
+
+       * mh-loaddefs.el: Regenerated.
+
+2002-12-20  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-index.el (mh-index-new-folder): Add new folder to
+       mh-folder-list to enable name completion.
+       (mh-glimpse-execute-search, mh-swish-execute-search) 
+       (mh-swish++-execute-search): Fix documentation.
+
+       * mh-seq.el (mh-thread-generate): Fixed a stupid bug where the wrong
+       folder could get 'scan'ed when generating the threaded view.
+
+       * mh-index.el (mh-index-search): If optional prefix arg is given
+       then the search in the current index buffer is redone.
+       (mh-glimpse-execute-search, mh-swish-execute-search) 
+       (mh-namazu-execute-search): Documentation fixes.
+
+       * mh-e.el (mh-index-previous-search): New buffer local variable
+       stores parameters of search that created the buffer.
+       (mh-folder-mode): Make mh-index-previous-search buffer local.
+       (mh-visit-folder): Tweak the function so that only a single window
+       with the folder buffer is shown if mh-showing-mode is nil.
+
+       * mh-loaddefs.el: Regenerated.
+
+2002-12-19  Peter S Galbraith  <psg@debian.org>
+
+       * mh-alias.el (mh-alias-add-alias): Bug fix. 
+
+2002-12-19  Peter S Galbraith  <psg@debian.org>
+
+       * mh-alias.el (mh-alias-add-alias): New interactive command. Add
+       ALIAS for ADDRESS in personal alias file.
+       (mh-alias-grab-from-field): New interactive command. Add ALIAS for
+       ADDRESS in personal alias file.
+       (mh-alias-add-address-under-point): New interactive
+       command. Insert an alias for email address under point.
+       (mh-alias-suggest-alias): New function. Suggest an alias for STRING.
+       (mh-alias-insert-file): New function. Return the alias file to
+       write a new entry in.
+       (mh-alias-address-to-alias): New function. Return the ADDRESS
+       alias if defined, or nil."
+       (mh-alias-from-has-no-alias-p): New function. Return t is From has
+       no current alias set.  Used as tool-bar button enable function.
+       (mh-alias-add-alias-to-file): New function. Add ALIAS for ADDRESS
+       in alias FILE without alias check or prompts.
+
+       * alias.xpm, alias.pbm: New tool-bar icon for
+       mh-alias-grab-from-field.
+
+       * mh-e.el (mh-folder-line-matches-show-buffer-p): New function.
+       Return t if the message under point in folder-mode is in the show
+       buffer.
+
+       * mh-utils.el (mh-goto-address-find-address-at-point): New
+       function copied from goto-addr.el, which we don't want to
+       force-load on users.  Find e-mail address around or before point.
+       (mh-address-mail-regexp): New defvar.  A regular expression
+       probably matching an e-mail address.
+
+       * mh-customize.el (mh-alias-insert-file): New defcustom.
+       Filename to use to store new MH-E aliases.
+       (mh-tool-bar-folder-buttons): Enable mh-tool-bar-item-alias icon.
+
+       * mh-comp.el (mh-extract-from-header-value): New function.
+       Extract From: string from header.
+
+2002-12-19  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-index.el (mh-index-update-single-msg): New defvar controls
+       max number of command line args.
+       (mh-index-execute): New function which is to be used
+       instead of xargs so that we don't give the shell too many command
+       line args.
+       (mh-index-update-maps): Use mh-index-execute instead of xargs.
+       (mh-index-search): Remove unused code. Also the first message in
+       folder buffer is made current.
+
+2002-12-18  Peter S Galbraith  <psg@debian.org>
+
+       * mh-loaddefs.el: Regenerated.
+
+       * mh-comp.el (mh-letter-tool-bar-map): Moved to mh-customize.el
+
+       * mh-e.el (mh-folder-tool-bar-map): Moved to mh-customize.el
+       
+       * mh-utils.el (mh-get-msg-num): autoloaded.
+       (mh-show-tool-bar-map): Moved to mh-customize.el
+       
+       * mh-customize.el (mh-tool-bar-item-*): 33 new defconsts for
+       tool-bar setup and customization.
+       (mh-tool-bar-folder-buttons-set): New function to setup the
+       tool-bar after customization.
+       (mh-tool-bar-folder-buttons): New defcustom to specify which icons
+       appears in the tool-bar.
+       (mh-tool-bar-letter-buttons-set): New function to setup the
+       tool-bar after customization.
+       (mh-tool-bar-letter-buttons): New defcustom to specify which icons
+       appears in the tool-bar.
+       (mh-tool-bar-show-set): New function to setup mh-letter-tool-bar-map.
+       (mh-tool-bar-letter-set): New function to setup
+       mh-letter-tool-bar-map.
+
+2002-12-18  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-e.el (mh-folder-mode-map): Change entries for "\t", "\M-\t"
+       and backtab to call mh-index-next-folder and
+       mh-index-previous-folder as appropriate.
+
+       * mh-index.el (mh-index-next-folder, mh-index-previous-folder):
+       New interactive functions which jumps to search results of next
+       and previous folders respectively.
+
+       * mh-loadddefs.el: Regenerated.
+
+       * mh-index.el (mh-index-delete-folder-headers): Arrange for
+       mh-goto-cur-msg to just go to the current message.
+
+       * mh-e.el (mh-visit-folder): Since mh-scan-folder erases the whole
+       buffer anyway, we don't need to delete the folder headers. Also
+       index-data is non-nil only when the buffer folder doesn't exist.
+       So we need to call mh-make-folder.
+       (mh-folder-mode): Fix bug in that mh-index-checksum-origin-map was
+       not being made buffer local!
+
+2002-12-17  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-e.el (mh-visit-folder): Fix bug.
+
+       * mh-index.el (mh-md5sum-buffer): Buffer from which md5sum is run.
+       (mh-index-folder-first, mh-index-folder-last)
+       (mh-index-original-msg-list): Convenience macros aren't needed
+       anymore since the data structure has been changed.
+       (mh-index-update-single-msg): New function to update maps that
+       relate MD5 checksums to actual messages and vice-versa for a
+       single message.
+       (mh-index-update-maps): Do the above for all messages. If some
+       messages don't have MD5 checksums, they are annotated with the
+       result of md5sum.
+       (mh-index-search): Updated for the new version of mh-index-data.
+       (mh-msg-exists-p): New function to test a message exists.
+       (mh-index-insert-folder-headers): Updated for new mh-index-data.
+       (mh-index-delete-folder-headers): New function used to eliminate
+       original folder names from the buffer and make it look like a
+       plain folder buffer. This is used from mh-process-commands.
+       (mh-index-visit-folder): Use new version of mh-index-data.
+       (mh-index-match-checksum): New function which checks if the
+       X-MHE-Checksum header of a message matches.
+       (mh-index-execute-commands): New function that rmm's the original
+       messages. Then after mh-execute-commands executes it will seem
+       that the original messages were executed upon. This completes the
+       fix of SF #623321.
+       (mh-checksum-buffer): Renamed from mh-md5sum-buffer.
+       (mh-checksum-cmd, mh-checksum-parser): New globals to allow
+       different checksum programs to be used.
+       (mh-checksum-choose): New functions to find a checksum program.
+       (mh-openssl-parser, mh-md5sum-parser, mh-md5-parser): Functions to
+       parse the output of md5, md5sum and openssl.
+       (mh-index-update-maps): Use checksum parsing function.
+       (mh-index-search): Set checksum choice. Add a call to recenter,
+       otherwise the window point in the index buffer doesn't get set
+       properly.
+
+       * mh-funcs.el (mh-pack-folder, mh-sort-folder): Enable these
+       functions in folders created by index search.
+
+       * mh-e.el (mh-index-msg-checksum-map)
+       (mh-index-checksum-origin-map): New buffer local variables that
+       keep track of message checksums (used to implement
+       refiling/deletion for folders created by index folders).
+       (mh-last-msg): Make the function behave like mh-first-msg.
+       (mh-visit-folder): Add new optional argument which initializes
+       folders created by mh-index-search.
+       (mh-folder-mode): Make the variables mh-index-msg-checksum-map and
+       mh-index-checksum-origin-map buffer local.
+       (mh-process-commands): Call mh-index-execute-commands when called
+       from an index search buffer. This will reflect the changes being
+       made in the search folder to the original folders.
+
+       * mh-loaddefs.el: Regenerated.
+
+2002-12-16  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-index.el (mh-index-insert-folder-headers): Fix a bug which
+       caused the folder buffer to be marked as modified after rescanning
+       an index folder.
+
+2002-12-15  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-e.el (mh-visit-folder): The function should insert folder
+       names if it is visiting a folder created by index search.
+
+       * mh-index.el (mh-index-insert-folder-headers): The function now
+       maintains the old value of buffer-modified-p and temporarily makes
+       the buffer writable.
+
+       * mh-utils.el (mh-show-index-visit-folder): New interactive
+       function callable from show buffer that displays search results
+       from one folder.
+       (mh-show-mode-map): Key binding for "v".
+
+       * mh-speed.el: Fix credits.
+       (mh-index-folder-speedbar-buttons) 
+       (mh-index-show-speedbar-buttons) 
+       (mh-index-folder-speedbar-key-map) 
+       (mh-index-show-speedbar-key-map) 
+       (mh-index-folder-speedbar-menu-items) 
+       (mh-index-show-speedbar-menu-items): Removed since the modes
+       mh-index-folder-mode and mh-index-show-mode no longer exist.
+       (mh-speed-extract-folder-name): Remove the bits about
+       mh-index-folder-mode and mh-index-show-mode.
+
+       * mh-seq.el (mh-copy-seq-to-eob): Updated to work properly with
+       index search results.
+       (mh-region-to-msg-list): Skip over non-scan lines.
+       (mh-thread-inc, mh-thread-add-spaces, mh-thread-folder): Skip
+       non-scan lines when populating mh-thread-scan-line-map.
+       (mh-thread-folder, mh-toggle-threads): Move the check for buffer
+       modification from mh-thread-folder to mh-toggle-threads.
+       (mh-toggle-threads): When returning to unthreaded view insert the
+       folder names if called from a index folder.
+
+       * mh-index.el: Fix credits and update commentary.
+       (font-lock-defaults, mh-index-buffer, mh-index-show-buffer)
+       (mh-index-ma-x-msg-index, mh-index-other-buffer)
+       (mh-index-matches, mh-index-previous-window-configuration)
+       (mh-index-current-msg, mh-index-folder-mode-keymap)
+       (mh-index-button-map, mh-index-folder-mode-help-messages): Remove
+       eliminated variables.
+       (mh-index-folder): New variable sets the MH folder under which the
+       index searches are stored.
+       (mh-index-folder-first, mh-index-folder-last)
+       (mh-index-original-msg-list): Convenience macros used to pull data
+       elements out of a list. If needed setf can be used to change them
+       as well.
+       (mh-index-search): Rewritten to create real folders where all the
+       normal folder operation. This partially fixes SF #623321 (refiles
+       and deletes doesn't work on original messages).
+       (mh-index-find-max-width, mh-index-search-again)
+       (mh-index-insert-scan, mh-index-callback, mh-index-search)
+       (mh-index-notate, mh-index-show, mh-index-header-display)
+       (mh-index-next, mh-index-folder-mode, mh-index-show-mode):
+       Functions, macros and modes removed.
+       (mh-folder-exists-p): New function to check if a folder exists.
+       (mh-index-new-folder): Generate a new folder name from a given
+       base string that mimics the way emacs generates buffer names.
+       (mh-index-insert-folder-headers): Insert folder names among the
+       search results.
+       (mh-index-visit-folder): New interactive function to show the
+       search results of one individual folder.
+       (mh-swish++-execute-search): Update documentation.
+
+       * mh-funcs.el (mh-pack-folder, mh-sort-folder): Disable these
+       functions if index search results are being viewed.
+
+       * mh-e.el (mh-folder-font-lock-keywords): Add highlight for
+       folder.
+       (mh-index-data): New buffer local variable that will be used to
+       store info about index search results.
+       (mh-rescan-folder): Implement rescanning for index search results.
+       (mh-folder-mode): Make mh-index-data buffer local.
+       (mh-remove-all-notation): Modified to take into account not all
+       lines in the folder buffer are normal scan lines.
+       (mh-folder-mode-map): Add key binding for "v" to jump to original
+       folder narrowed to search results.
+
+       * mh-customize.el (mh-index-folder-face): Make it bold so that it
+       will look like before.
+
+       * mh-loaddefs.el: Regenerated.
+
+2002-12-12  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el (mh-map-to-seq-msgs): Modified so that it can be given
+       a list of messages in addition to a sequence.
+       (mh-region-to-sequence, mh-region-to-msg-list): The function
+       mh-region-to-msg-list replaces mh-region-to-sequence. The new
+       function avoids creating a dummy sequence in MH-E.
+       (mh-thread-delete, mh-thread-refile, mh-put-msg-in-seq): Modified
+       to use mh-region-to-msg-list.
+
+       * mh-funcs.el (mh-copy-msg): Modified to use mh-region-to-msg-list.
+
+       * mh-e.el (mh-delete-msg, mh-refile-msg, mh-undo): Modified to use
+       mh-region-to-msg-list.
+
+       * mh-comp.el (mh-forward): Modified to use mh-region-to-msg-list.
+       The buffer-local variable mail-header-separator is no longer
+       bound. This fixes a bug where the default value of
+       mail-header-separator gets used if mh-forward is called in a fresh
+       emacs session.
+       (mh-annotate-msg): Update this so that it will handle message
+       lists too.
+       (mh-insert-letter): Make the test stronger. Since %d is being used
+       the argument better be an integer.
+
+       * mh-loaddefs.el: Regenerated.
+
+2002-12-11  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-funcs.el (mh-copy-msg): Add support for transient-mark-mode.
+       If mark is active and transient-mark-mode is enabled then all the
+       messages in the region are copied.
+
+       * mh-seq.el (mh-list-sequences): Use mh-coalesce-msg-list to print
+       messages in sequence nicely. The prompt for the folder is removed
+       (the current folder is always used) and the output is made nicer
+       by not overflowing the screen width.
+
+       * mh-loaddefs.el: Regenerated.
+
+2002-12-09  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-comp.el (mh-letter-complete): Checkdoc fix.
+
+       * mh-seq.el (mh-thread-current-indentation-level): New function
+       which returns the thread indentation level of current message.
+       (mh-thread-next-sibling, mh-thread-previous-sibling): New
+       interactive functions to jump to the next and previous siblings in
+       thread tree respectively.
+       (mh-thread-immediate-ancestor): New function to jump to ancestor
+       of current message in thread tree.
+       (mh-thread-ancestor): New interactive function to jump to
+       immediate ancestor or to root message of current thread depending
+       on optional argument.
+
+       * mh-utils.el (mh-show-thread-ancestor) 
+       (mh-show-thread-next-sibling, mh-show-thread-previous-sibling):
+       Interactive functions callable from the show buffer.
+       (mh-show-thread-map): Bindings for Tu, Tp and Tn.
+
+       * mh-e.el (mh-thread-map): Bindings for Tu, Tp and Tn.
+
+       * mh-loaddefs.el: Regenerated.
+
+2002-12-09  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el (mh-region-to-sequence): Change name of region
+       sequence created to 'mhe-region. This avoids any chance of
+       collision with actual MH sequences.
+       (mh-put-msg-in-seq, mh-thread-delete, mh-thread-refile): Change
+       name of region sequence used to 'mhe-region. Also delete the
+       'mhe-region sequence when done.
+
+       * mh-e.el (mh-delete-msg, mh-refile-msg, mh-undo): Same as above.
+
+       * mh-comp.el (mh-forward): Same as above.
+
+       * mh-loaddefs.el: Regenerated.
+
+2002-12-08  Bill Wohler  <wohler@newt.com>
+
+       * mh-alias.el: Edited documentation. Broke up file into 2
+       sections: Alias Loading and Alias Expansion. Made terminology
+       consistent (replaced expand, substitute, and translate with
+       expand).
+       (mh-alias-reload): Brought message in line with coding conventions
+       and made more concise too.
+       (mh-alias-translate): Renamed to mh-alias-expand.
+       (mh-alias-substitute-aliases-flag): Renamed to
+       mh-alias-expand-aliases-flag.
+       (mh-alias-reload-local-users): Renamed to mh-alias-local-users.
+       Now just returns an alist of local users rather than have
+       side-effects.
+       (mh-alias-reload): Set timestamp at beginning of function to catch
+       edge case when alias added just after ali runs. Changed logic to
+       reflect return value of mh-alias-local-users.
+
+       * mh-customize.el (mh-alias-substitute-aliases-flag): Renamed to
+       mh-alias-expand-aliases-flag.
+       (mh-alias-local-users): Fixed documentation.
+
+       * mh-loaddefs.el: Regenerated
+
+2002-12-08  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-e.el (require): Load Gnus at compile time so that the
+       constant gnus-version is defined when MH-E is being compiled.
+       (mh-macro-expansion-time-gnus-version, mh-run-time-gnus-version):
+       Use the constant gnus-version instead of the function gnus-version
+       to find out about gnus version information.
+       (gnus-version): Remove the autoload since it is not needed any
+       more.
+
+2002-12-08  Bill Wohler  <wohler@newt.com>
+
+       * mh-e.el (mh-version): Moved compilation information in front of
+       Emacs information. The idea is that you start at MH-E and move
+       outwards. Show N/A if Gnus not compiled (be explicit). Matched
+       coding style with other output statements. (Aside: not that
+       efficiency matters here, but fewer calls to format have to be
+       faster, right? ;-). Matched output style of old output to new
+       statement--liked Satyaki's indentation better ;-).
+
+2002-12-08  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-e.el (gnus-version): Autoload the function for use in
+       mh-version.
+       (mh-macro-expansion-time-gnus-version): New macro that finds the
+       Gnus version at macro expansion time.
+       (mh-run-time-gnus-version): New function to find the Gnus version
+       at run time.
+       (mh-version): Add information about Gnus versions available at
+       compile time and run time.
+
+2002-12-07  Peter S Galbraith  <psg@debian.org>
+
+       * mh-alias.el (mh-alias-ali): Add optional argument.  if USER is
+       t, then assume ALIAS is an address and call ali with option -user.
+
+       * mh-alias.el (mh-alias-filenames): if ARG is t, appends list of
+       files from `mh-alias-system-aliases' to output list obtained from
+       mhparam output user list only.
+       (mh-alias-tstamp): Use it.
+
+2002-12-05  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-mime.el (mh-inline-vcard-p): A new function which decides if
+       a vcard should be displayed inline.
+       (mh-mime-display-single): Use mh-inline-vcard-p to display
+       attached vcard as a signature if no other signature is present
+       (this partially addresses SF #649216).
+
+2002-12-05  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-send-letter): Edits docs for mh-mml-to-mime
+       getting run if variable `mh-mml-compose-insert-flag' is set.
+       (mh-get-header-field): use buffer-substring-no-properties instead
+       of buffer-substring.
+
+2002-12-04  Peter S Galbraith  <psg@debian.org>
+
+       * mh-loaddefs.el: Regenerated.
+
+       * mh-customize.el (mh-customize): Add ;;;###mh-autoload tag.
+
+2002-12-04  Peter S Galbraith  <psg@debian.org>
+
+       * mh-loaddefs.el: Regenerated.
+
+       * mh-comp.el (mh-letter-complete): New command to do alias or word
+       completion in letter-mode.
+       (mh-letter-mode-map): Add \M-\t binding for mh-letter-complete.
+
+       * mh-alias.el (mh-alias-letter-mode-expand-alias-hook): Obsolete.
+       Replaced by mh-letter-complete command.
+       (mh-alias-reload-maybe): New function to rebuild alias table if
+       out of date.
+       (mh-alias-letter-expand-alias): No longer interactive.  Use
+       mh-letter-complete instead.
+
+2002-12-04  Peter S Galbraith  <psg@debian.org>
+
+       * mh-customize.el (mh-letter-complete-function): New defcustom.
+       Function to call when completing outside of fields specified to
+       aliases.
+
+       * mh-alias.el (mh-alias-filenames):
+       s/mh-mhparam-component/mh-profile-component/
+       (mh-profile-component): Move to mh-utils.el and make interactive.
+       (mh-read-address): Make it autoloaded.  
+
+       * mh-loaddefs.el: Regenerated.
+
+       * mh-comp.el (mh-read-address): Removed.  Replaced by mh-alias
+       version.
+
+       * mh-utils.el (mh-profile-component): Moved from mh-alias.el.
+
+2002-12-04  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el (mh-msg-is-in-seq): Formatting change.
+
+       * mh-index.el (mh-index-insert-scan): Remove unused variable.
+
+2002-12-04  Bill Wohler  <wohler@newt.com>
+
+       * mh-loaddefs.el: Regenerated.
+
+       * Makefile (MH-E-SRC): Moved mh-loaddefs.el into MH-E-LOADDEFS as
+       this was causing a cycle.
+       (MH-E-LOADDEFS): New variable to house mh-loaddefs.el.
+       (emacs): Reintroduced autoloads.
+       (autoloads): We're baaa-aack!
+       (dist, install-emacs): Use MH-E-LOADDEFS.
+
+       * mh-comp.el (mh-customize): Moved to mh-customize.el.
+       
+       * mh-customize.el (mh-customize): Moved here from mh-comp. Makes
+       more sense, doesn't it?
+
+       * mh-alias.el, mh-comp.el, mh-e.el, mh-index.el, mh-mime.el,
+       mh-pick.el, mh-speed.el: Added mh-autoload cookie to all
+       interactive functions.
+
+2002-12-04  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * Makefile (world): Remove target.
+       (mh-loaddefs.el): Add comment that only GNU Emacs can be used to
+       regenerate mh-loaddefs.el.
+
+       * mh-make.el: Removed.
+
+2002-12-04  Mark D. Baushke  <mdb@gnu.org>
+
+       * mh-e.el (recursive-load-depth-limit): Only modify the limit
+       if it is an integer.
+
+2002-12-04  Peter S Galbraith  <psg@debian.org>
+
+       * mh-utils.el (mh-header-field-beginning): New function. Move to
+       the beginning of the current header field.
+
+2002-12-04  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-make.el (mh-files): Read in the MH-E filenames from the
+       environment variable where the Makefile puts it.
+       (mh-generate-autoloads, step2): Simplified since we now have the
+       complete file names.
+
+       * Makefile (world): Pass the MH-E files into the script, so that
+       the filenames don't need to be repeated in the script.
+
+2002-12-04  Bill Wohler  <wohler@newt.com>
+
+       * mh-loaddefs.el: New file. Check in automatically generated file
+       and include in package for the benefit of those who don't want to
+       or can't compile.
+
+       * Makefile (MH-E-SRC): Added mh-loaddefs.el now that it is checked
+       in and will be packaged.
+       (emacs): Removed autoloads. Adding mh-loaddefs.el to MH-E-SRC is
+       sufficient to build it.
+       (compile): Depend on MH-E-SRC instead of MH-E-OBJ and pass $? into
+       emacs so that Emacs is only invoked once to compile files. This
+       speeds things up by a factor of 3. It would be nice to only pass
+       those files that have been modified, but Emacs 21.4 will have
+       batch-byte-compile-if-not-done which we might be able to copy into
+       mh-make.el (or my proposed mh-e-dev.el which would be more
+       general-purpose).
+       (.SUFFIXES): Removed. Now that compile works directly on the
+       sources, the implicit rule is obsolete.
+       (autoloads): Deleted. See emacs change above.
+
+2002-12-03  Bill Wohler  <wohler@newt.com>
+
+       * Makefile (MH-E-SRC, emacs): 
+
+2002-12-03  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-make.el (mh-emacs): Make failing condition more strict.
+       (mh-loaddefs-end): Remove redundant statement.
+
+       * Makefile (world): A little typo. The bug didn't seem to make any
+       difference though.
+
+       * mh-make.el: New script that compiles MH-E.
+       (mh-loaddefs-beginning, mh-loaddefs-end): Don't save the autoloads
+       file in between. Only save at the end.
+       (mh-emacs-generate-autoloads, mh-xemacs-generate-autoloads) 
+       (mh-generate-autoloads): Replace the separate functions in Emacs
+       and XEmacs with one that works in both variants. This simplifies
+       the script a lot.
+       (mh-generate-autoloads): doc fix.
+
+       * Makefile (world): New target which works for both GNU Emacs and
+       XEmacs.
+
+2002-12-03  Peter S Galbraith  <psg@debian.org>
+
+       * mh-alias.el (mh-mhparam-component): Don't raise error if call to
+       mhparam fails.
+
+       * mh-alias.el (mh-alias-letter-expand-alias): Build alias table if
+       not already available.
+
+2002-12-03  Bill Wohler  <wohler@newt.com>
+
+       * mh-customize.el (mh-show-threads-flag): Alphabetized.
+
+2002-12-03  Jeffrey C Honig  <jch@honig.net>
+
+       * Makefile: Moved .PHONY rule after all rule for compatibility
+       with BSD/OS's old pmake.
+
+2002-12-03  Mark D Baushke  <mdb@gnu.org>
+
+       * mh-e.el (mh-get-new-mail): Simplify no-new-mail test.
+       (mh-add-cur-notation): Remove unnecessary function.
+       
+2002-12-03  Peter S Galbraith  <psg@debian.org>
+
+       * mh-identity.el (mh-identity-make-menu): Check if
+       'mh-letter-mode-map' is bound, since this code also gets run when
+       mh-customize.el is loaded at startup.
+
+2002-12-03  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-customize.el (mh-show-threads-flag): New customizable
+       variable which controls if new folders start of in threaded mode
+       (closes SF #646794).
+
+       * mh-e.el (mh-rescan-folder): Fix the function so that threading
+       is preserved across rescans.
+       (mh-visit-folder, mh-inc-folder): The folder is threaded if it was
+       already threaded or if mh-show-threads-flag is non-nil and the
+       number of scan lines is fewer than mh-large-folders (closes SF
+       #646794).
+
+2002-12-02  Mark D Baushke  <mdb@gnu.org>
+
+       * mh-e.el (mh-add-cur-notation): New function to mark the
+       current message with the mh-note-cur character.
+       (mh-get-new-mail): Use mh-add-cur-notation to undo the work of
+       mh-remove-cur-notation if there was no new mail (closes SF #647681).
+       
+       * mh-e.el (mh-set-cmd-note): Do not update the default mh-cmd-note
+       value (closes SF #643701).
+
+2002-12-02  Peter S Galbraith  <psg@debian.org>
+
+       * mh-alias.el (mh-alias-reload): Renamed from mh-alias-learn-aliases.
+       (mh-alias-load-local-users): Renamed from mh-alias-learn-local-users.
+       (mh-alias-passwd-alist): New variable, holding aliases extracted
+       from the passwd file.
+       (mh-alias-tstamp): New variable storing the timestamp for alias
+       list generation.
+       (mh-read-address, mh-alias-reload, mh-alias-reload-local-users):
+       Complete rewrite.
+       (mh-alias-minibuffer-confirm-address): Use mh-alias-translate.
+       (mh-alias-translate): New function.  Return translation for alias,
+       checking if in blind or passwd list.
+       (mh-alias-letter-expand-alias): Rewrite using
+       mail-abbrev-complete-alias from mailabbrev.el
+       (mh-alias-expand-alias-map): New variable.
+       (mh-alias-ali): New function. Return formatted string of
+       translated ALIAS from ali.
+       (mh-mhparam-component): New function. Return COMPONENT value from
+       mhparam, or nil if unset.
+       (mh-alias-filenames): New function. Provide list of alias
+       filenames from mhparam, or nil if none are set.
+
+       * mh-customize.el (mh-alias-display-blind-name-on-completion-flag):
+       Obsoleted.
+       (mh-alias-timestamp): Renamed to mh-alias-system-aliases.
+
+2002-12-02  Bill Wohler  <wohler@newt.com>
+
+       * Makefile (mh-loaddefs.el): Suppress creation of backup file.
+
+2002-12-02  Mark D. Baushke  <mdb@gnu.org>
+
+       * Makefile (mh-loaddefs.el): Simplify rule.
+
+       * Makefile (clean): Remove mh-loaddefs.el* for good measure.
+       ($(MH-E-OBJ)): Depend on mh-loaddefs.el to compile these.
+       (autoloads, mh-loaddefs.el): Revamp rules.
+       (mh-loaddefs.el-tail, autoloads-gen): Remove rules.
+
+       * mh-e.el (recursive-load-depth-limit): Do not try to
+       bump the value unless the variable exists.
+
+       * mh-e.el (recursive-load-depth-limit): Bump value of
+       recursive-load-depth-limit to 50 to allow emacs 21.1 which
+       normally has a default value of 10 to be able to compile MH-E.
+
+2002-12-02  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-funcs.el (mh-pack-folder, mh-sort-folder): Fix the functions
+       so that threading is preserved (needed for SF #646794).
+
+       * mh-identity.el (mh-identity-signature-start) 
+       (mh-identity-signature-end): Checkdoc fixes.
+
+       * mh-e.el (mh-previous-unread-msg, mh-next-unread-msg): Checkdoc
+       fixes.
+
+2002-12-01  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-identity.el (compile): Make mh-identity.el compile without
+       warnings.
+
+       * mh-e.el (mh-previous-unread-msg, mh-next-unread-msg): New
+       interactive functions that go to next and previous unread
+       messages (closes SF #630328). 
+       (mh-folder-mode-map): Add key bindings for M-n and M-p to
+       mh-folder-mode-map.
+
+       * mh-utils.el (mh-show-next-unread-msg) 
+       (mh-show-previous-unread-msg): New interactive functions that go
+       to the next and previous unread messages respectively. These are
+       callable from the show buffer.
+       (mh-show-mode-map): Add key bindings for M-n and M-p to
+       mh-show-mode-map.
+
+2002-12-01  Bill Wohler  <wohler@newt.com>
+
+       * mh-mime.el (mh-defun-compat): Make it indent like a defun.
+
+       * mh-index.el (mh-defun-index): Make it indent like a defun.    
+
+       * mh-customize.el: New file (closes SF #643722).
+
+       * Makefile (MH-E-SRC): Added mh-customize.el (closes SF #643722).
+
+       * mh-speed.el, mh-pick.el, mh-mime.el, mh-index.el, mh-e.el,
+       mh-comp.el: Moved all defgroups, defcustoms, and deffaces to
+       mh-customize.el (closes SF #643722).
+
+       * mh-utils.el (mh-xemacs-flag): Moved here from below since
+       needed by mh-customize.el.
+       (mh-customize): Required. mh-invisible-headers)
+       (mh-bury-show-buffer-flag, mhl-formfile):
+       Moved all defgroups, defcustoms, and deffaces to mh-customize.el
+       (closes SF #643722) .
+
+       * mh-identity.el (mh-comp-loaded): New variable in a desparate
+       attempt to prevent an infinite loop.
+       (eval-when-compile): Was able to remove these defvars as they are
+       now predefined in mh-loaddefs and mh-customize.
+       (mh-identity-list-set): Added ;;;###mh-autoload cookie.
+       Moved all defgroups, defcustoms, and deffaces to mh-customize.el
+       (closes SF #643722).
+
+       * mh-alias.el (mh-e): Require this, as it needs defcustoms, which
+       is in mh-customize which is required by mh-utils which is required
+       by mh-e.
+       Moved all defgroups, defcustoms, and deffaces to mh-customize.el
+       (closes SF #643722).
+
+2002-11-30  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-e.el (mh-thread-map): Add key bindings "Td" and "To" (closes
+       SF #630493).
+       (mh-help-messages): Update help message for prefix map.
+       (mh-help-messages): Doc fix.
+       (mh-help-messages): Really fix it.
+
+       * mh-utils.el (mh-show-thread-delete, mh-show-thread-refile): New
+       interactive functions corresponding to mh-thread-delete and
+       mh-thread-refile callable from the show buffer.
+       (mh-show-thread-map): Add key bindings for "Td" "To".
+
+       * mh-seq.el (mh-narrow-to-seq, mh-put-msg-in-seq, mh-rename-seq)
+       (mh-narrow-to-subject, mh-delete-subject, mh-toggle-threads): Add
+       mh-autoload cookies.
+       (mh-thread-find-children): New function which finds the region
+       containing all children of a message.
+       (mh-thread-delete): New interactive function that marks for
+       deletion the current message and its children.
+       (mh-thread-refile): New interactive function that marks for
+       refiling the current message and its children.
+
+2002-11-30  Bill Wohler  <wohler@newt.com>
+
+       * mh-funcs.el, mh-identity.el, mh-index.el, mh-pick.el, mh-seq.el:
+       Removed MH-E autoloads. These are now provided by mh-loaddefs.el.
+       Added ;;;###mh-autoload tag to selected functions so that
+       autoloads for those functions can be automatically created in
+       mh-loaddefs.el (closes half of SF #643722).
+
+       * mh-mime.el (mh-buffer-data): Moved to mh-utils where it is used.
+       Added ;;;###mh-autoload tag to selected functions so that
+       autoloads for those functions can be automatically created in
+       mh-loaddefs.el (closes half of SF #643722)..
+
+       * mh-utils.el (mh-loaddefs): Added require.
+       (mh-buffer-data): Moved here from mh-mime.el as it is used in
+       mh-display-msg.
+       (mh-set-cmd-note): Moved to mh-e.el.
+       Removed MH-E autoloads. These are now provided by mh-loaddefs.el.
+       Added ;;;###mh-autoload tag to selected functions so that
+       autoloads for those functions can be automatically created in
+       mh-loaddefs.el (closes half of SF #643722)..
+
+       * mh-e.el (mh-set-cmd-note): Moved here from mh-utils.el since it
+       uses mh-scan-format-file which is defined here.
+       Removed MH-E autoloads. These are now provided by mh-loaddefs.el.
+       Added ;;;###mh-autoload tag to selected functions so that
+       autoloads for those functions can be automatically created in
+       mh-loaddefs.el (closes half of SF #643722)..
+
+       * mh-comp.el, mh-speed.el (mh-utils): Removed require. mh-utils is
+       provided via mh-e.el. 
+       Removed MH-E autoloads. These are now provided by mh-loaddefs.el.
+       Added ;;;###mh-autoload tag to selected functions so that
+       autoloads for those functions can be automatically created in
+       mh-loaddefs.el (closes half of SF #643722)..
+
+       * Makefile (emacs): Add dependency on autoloads.
+       (clean): Remove mh-loaddefs.el too.
+       (autoloads): New target. Builds mh-loaddefs.el.
+       (mh-loaddefs.el): New target. Initializes mh-loaddefs.el.
+       (mh-loaddefs.el-tail): New target. Appends to mh-loaddefs.el.
+       (autoloads-gen): Runs batch-update-autoloads to populate
+       mh-loaddefs.el (closes half of SF #643722)..
+       (auto-autoloads.elc): Renamed from autoloads to be explicit about
+       file that's created.
+       (custom-load.elc): Ditto.
+
+2002-11-30  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el (mh-thread-last-ancestor): New variable which keeps
+       track of oldest ancestor of last message. If due to narrowing the
+       common ancestor of two messages is lost then one of them is
+       promoted to be the parent of the other. This variable helps in
+       this process.
+       (mh-thread-generate-scan-lines): Group messages which belong to
+       the same thread tree, even if a common ancestor is no longer
+       present.
+       (mh-thread-folder, mh-copy-seq-to-eob, mh-thread-inc): Bind
+       mh-thread-last-ancestor to nil when calling
+       mh-thread-generate-scan-lines.
+
+       * mh-mime.el (font-lock): Font-lock required at compile time to
+       avoid warning about font-lock-maximum-size
+       (mh-display-smileys, mh-display-emphasis): Show graphical smileys
+       and emphasis only if message isn't too large.
+
+       * mh-e.el (mh-visit-folder): Revisiting a buried folder which has
+       been threaded or narrowed confuses MH-E. Even though the folder is
+       displayed as not threaded and not narrowed, MH-E still believes
+       the folder is in the previous state. This can cause problems when
+       trying to narrow/thread the folder. The change fixes this.
+
+       * mh-mime.el (mh-mime-display-alternative): The setting of
+       mh-display-buttons-for-inline-parts-flag was not being used when
+       displaying one of the alternatives. This change fixes that.
+
+       * mh-comp.el (mh-show-buffer-message-number): Replace subseq with
+       substring.
+       (mh-filter-out-non-text): When filtering out MIME buttons from
+       yanked text, the last line of the MIME part was getting lost. The
+       fix avoids that and removes only the last new line instead.
+
+2002-11-29  Peter S Galbraith  <psg@debian.org>
+
+       * Makefile (MH-E-SRC): Add mh-alias.
+
+       * mh-alias.el: Assign copyright to FSF instead of myself.
+       (mh-read-address): Add support for emacs-21's
+       completing-read-multiple to prompt for multiple entries.
+       (mh-alias-PC-complete-address): Deleted.
+       (mh-alias-learn-aliases): Use mh-exec-cmd-quiet instead of old kludge.
+       (mh-alias-letter-mode-expand-alias-hook): Simplify. 
+       (mh-alias-hostname): Deleted.
+       (mh-alias-substitute-aliases-flag): Change default to nil.
+       (mh-alias-display-blind-name-on-completion-flag) Change default to
+       nil.
+       (mh-alias-alist): Now holds alias values.
+       (mh-alias-lowercase-alist): Deleted.
+       (mh-alias-minibuffer-confirm-address, mh-alias-learn-aliases)
+       (mh-alias-learn-local-users, mh-alias-letter-expand-alias): Use
+       new mh-alias-alist instead of old mh-alias-lowercase-alist.
+
+       * mh-alias.el: Moved from contrib/ directory.  Now part of MH-E!
+
+       * Makefile (MH-E-SRC): Add mh-identity.
+
+       * mh-identity.el (mh-compose-and-send-mail, mh-insert-identity)
+       (mh-identity-make-menu, mh-identity-default, mh-identity-menu):
+       Moved to mh-comp.el.
+
+       * mh-comp.el (mh-compose-and-send-mail): Add mh-identity support.
+       (mh-insert-identity, mh-identity-make-menu, mh-identity-default)
+       (mh-identity-menu): Added from mh-identity.el
+
+2002-11-29  Bill Wohler  <wohler@newt.com>
+
+       * mh-comp.el, mh-e.el, mh-funcs.el, mh-identity.el, mh-index.el,
+       mh-mime.el, mh-pick.el, mh-seq.el, mh-speed.el, mh-utils.el:
+       Ran indent-region, reformatted long lines, ran untabify.
+       (indent-tabs-mode): Set file local variable to nil.
+       
+2002-11-29  Bill Wohler  <wohler@newt.com>
+
+       * Released MH-E version 7.0.
+       
+       * mh-e.el (Version, mh-version): Updated for release 7.0.
+
+       * mh-comp.el (subseq, search): Require cl instead of autoloading
+       these due to compilation warnings in CVS Emacs.
+
+2002-11-23  Bill Wohler  <wohler@newt.com>
+
+       * MH-E-NEWS: Emphasize the renaming of the variables at the top of
+       the notes.
+
+2002-11-22  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-utils.el (mh-show-mode-map): Remove binding for RET since it
+       is not needed and the binding is more useful to toggle display of
+       MIME parts.
+
+       * mh-mime.el (mh-mime-button-commands): Remove bindings for "i"
+       and "o" from MIME buttons.
+       (mh-insert-mime-button): Change comment to reflect change in
+       button key map.
+
+2002-11-21  Bill Wohler  <wohler@newt.com>
+
+       * Released MH-E version 6.1.91.
+       
+       * mh-e.el (Version, mh-version): Updated for release 6.1.91.
+
+       * MH-E-NEWS: Inline HTML parts supported with Gnus 5.10, not 5.9.
+
+2002-11-21  Mark D. Baushke  <mdb@gnu.org>
+
+       * mh-comp.el (mh-letter-insert-signature-hook): This should be in
+       customize-group mh-compose.
+
+2002-11-21  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-utils.el (load): Load mm-view.el here so that
+       mm-inline-text-html would be defined if available.
+       (mh-mm-inline-media-tests): If mm-inline-text-html is available
+       then use it, otherwise fall back on using mm-inline-text (closes
+       SF #641482).
+
+       * mh-mime.el (load): Remove the load of mm-view here since it
+       happens in mh-utils.el now.
+
+2002-11-15  Bill Wohler  <wohler@newt.com>
+
+       * Released MH-E version 6.1.90.
+       
+       * README (Compile): New section. Users must now compile MH-E due
+       to the vagaries of the various versions of gnus.
+
+       * Makefile (MH-E-IMG): Added reply-all.pbm, reply-all.xpm,
+       reply-from.pbm, reply-from.xpm, reply-to.pbm, reply-to.xpm.
+       (MH-E-ETC-ETC): Added Makefile and README.
+       (dist): Depend on all, so clean happens. Don't add .elc files to
+       tarball as they are built upon installation now.
+
+2002-11-15  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-e.el (mh-process-commands): Fix a bug in mh-execute-commands.
+       If called in threaded mode, cur was always getting set to the last
+       message in the folder.
+
+2002-11-14  Bill Wohler  <wohler@newt.com>
+
+       * mh-e.el (Version, mh-version): Updated for release 6.1.90.
+
+       * MH-E-NEWS, README: Updated for release 7.0.
+
+       * mh-utils.el (mh-index-search): Added full docstring which new
+       users will need before they run a search!
+       (mh-swish++-execute-search, mh-swish-execute-search,
+       mh-namazu-execute-search mh-glimpse-execute-search): Added
+       autoloads with full docstrings for the same reason!
+
+       * mh-e.el (mh-limit-map): Removed / / alias for
+       mh-narrow-to-subject.
+
+       * mh-utils.el (mh-show-thread-map): Removed / / alias for
+       mh-show-narrow-to-subject.
+
+       * mh-seq.el (mh-delete-subject): Checkdoc fix.
+
+       * mh-e.el (mh-help-messages): Added / prefix character to help
+       string. Tweaked / helpstring a little.
+
+2002-11-14  Mark D. Baushke  <mdb@gnu.org>
+
+       * mh-utils.el (mh-set-cmd-note): Fix nitpick by adding one to the
+       width for cosmetic reasons.
+
+2002-11-14  Peter S Galbraith  <psg@debian.org>
+
+       * mh-identity.el (mh-insert-identity): Fix a few things undone by
+       Jeff's patch.
+       (mml-insert-tag): Add autoload.
+
+2002-11-13  Mark D. Baushke  <mdb@gnu.org>
+
+       * mh-identity.el (mh-insert-identity):  A value of either nil or
+       "" should cause the field to be removed.
+       (mh-identity-list): Update the docstring.
+
+2002-11-13  Peter S Galbraith  <psg@debian.org>
+
+       * mh-e.el (mh-limit-map): New key map for limits (subject for now).
+       * mh-utils.el (mh-show-limit-map): Same.
+
+       * mh-seq.el (mh-delete-subject): Renamed from
+       mh-delete-subject-sequence. 
+       (mh-narrow-to-subject): Renamed from mh-narrow-to-subject-sequence.
+       (mh-next-unseen-subject-sequence): Removed. :-(
+       * mh-e.el: Use 'em
+       * mh-seq.el: Use 'em.
+
+2002-11-13  Mark D. Baushke  <mdb@gnu.org>
+
+       * mh-e.el (mh-alt-show): New defalias for mh-show.
+       (mh-alt-refile-msg): New defalias for mh-refile-msg.
+       (mh-alt-send): New defalias for mh-send.
+       (mh-folder-mode-map): Use mh-alt-show, mh-alt-refile-msg and
+       mh-alt-send for the alias bindings.
+       (mh-alt-visit-folder): New defalias for mh-visit-folder.
+       (mh-folder-map): Use it.
+       (mh-folder-message-menu): Revert previous change.
+
+2002-11-13  Peter S Galbraith  <psg@debian.org>
+
+       * mh-e.el (mh-folder-message-menu): Make key binding "o" appear in
+       menu for mh-refile-msg. 
+
+2002-11-13  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el (mh-thread-generate-scan-lines): In threaded view,
+       scan lines of duplicate messages were too long. The change fixes
+       that.
+
+2002-11-13  Bill Wohler  <wohler@newt.com>
+
+       * mh-utils.el (mh-adaptive-cmd-note-flag): Improved grammar in
+       docstring.
+
+       * mh-speed.el (mh-speed-run-flists-flag): While documenting this
+       variable in the release notes, I was unsure what would happen if
+       set to nil. So, I clarified the docstring and indicated
+       implications of setting this variable to nil, and offered manual
+       workaround.
+
+2002-11-13  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-index.el (mh-index-quit): Fix documentation and run
+       mh-before-quit-hook and mh-quit-hook.
+
+2002-11-13  Bill Wohler  <wohler@newt.com>
+
+       * mh-utils.el (with-mh-folder-updating): Renamed local variable
+       mh-save-modification-flag to save-modification-flag.
+
+2002-11-12  Bill Wohler  <wohler@newt.com>
+
+       * mh-index.el (mh-index-keymap): Renamed to
+       mh-index-folder-mode-keymap to be a closer to the usual keymap
+       naming convention. Since we want our own keymap and not inherit
+       the one in mh-folder-mode, we need to use a suffix other than
+       -map.
+
+       * mh-e.el (mh-folder-sequence-menu): s/Msg/Message.
+       s/Seq/Sequence.
+       (mh-folder-message-menu): s/Msg/Message. Removed redundant refile
+       item.
+       (mh-folder-folder-menu): Aligned symbols.
+
+       * mh-index.el (mh-index-folder-message-menu): s/Msg/Message.
+
+       * mh-utils.el (mh-show-sequence-menu): s/Msg/Message.
+       s/Seq/Sequence.
+       (mh-show-message-menu): s/Msg/Message. Removed redundant refile
+       item.
+       (mh-show-folder-menu): Aligned symbols.
+
+2002-11-12  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-index.el (mh-index-matches, mh-index-current-match): Remove
+       these variables since they were only used for glimpse and grep.
+       Now the functionality of all the indexing programs will be
+       uniform.
+       (mh-index-search, mh-index-insert-scan, mh-defun-index) 
+       (mh-index-show): Simplify functions since matches are no longer
+       shown.
+       (mh-index-parse-match): Remove function.
+
+       * mh-e.el (mh-scan-cmd-note-width, mh-scan-destination-width) 
+       (mh-scan-date-width, mh-scan-date-flag-width) 
+       (mh-scan-from-mbox-width, mh-scan-from-mbox-sep-width): New
+       variables to keep track of the widths of the different fields in
+       the scan lines.
+       (mh-scan-field-from-start-offset, mh-scan-field-from-end-offset) 
+       (mh-scan-field-subject-start-offset): Offsets that are computed
+       from the scan line widths.
+
+       * mh-seq.el (mh-copy-seq-to-eob, mh-thread-inc) 
+       (mh-thread-parse-scan-line): Use new variables that remember the
+       various offsets in place of integer constants.
+       (mh-thread-generate-scan-lines): Space shouldn't be added here!
+
+2002-11-12  Bill Wohler  <wohler@newt.com>
+
+       * mh-e.el (mh-scan-format-mh, mh-scan-format-nmh): Noted that the
+       first column is column number 0 and changed "sixth column" to
+       "fifth column" accordingly.
+
+       * mh-index.el (mh-index-folder-mode): Clarified method of replying
+       in mode documentation.
+       (mh-index-folder-tool-bar-map): s/mh-e/MH-E/.
+
+       * mh-e.el (mh-generate-new-cmd-note): Try not to mention internal
+       variable mh-cmd-note in docstrings.
+
+       * mh-utils.el (mh-adaptive-cmd-note-flag): Set default value to t.
+       Reworded docstring so it doesn't mention internal variable
+       mh-cmd-note. Added information about using fixed-width message
+       numbers.
+       (mh-cmd-note): Mention mh-set-cmd-note in docstring. Also suggest
+       that it is updated dynamically only if mh-scan-format-file is t.
+       (mh-set-cmd-note): Grammer fix in docstring.
+       (mh-cmd-note): Noted that the first column is column number 0.
+
+       * mh-e.el (mh-scan-format-file): Added information about
+       mh-set-cmd-note and mh-adaptive-cmd-note-flag to docstring.
+
+       * mh-index.el (mh-index-keymap): Added bindings for i
+       (mh-inc-folder), m (mh-send alias), and s (mh-send) since these
+       appear to be supported and are found in the toolbar.
+       (mh-index-folder-key-map): Ditto for f (mh-visit-folder alias), o
+       (mh-visit-folder) alias, and v (mh-visit-folder).
+       (mh-index-folder-mode-help-messages): Changes for above.
+       (mh-index-folder-message-menu, mh-index-folder-folder-menu): New
+       menus. I decided to delete the unavailable items since greying out
+       implies that the user can do something to access them. In this
+       case, that's not the case. Well, that's not entirely true--the
+       user could write code for those functions ;-).
+       (mh-index-folder-mode): Use new menus.
+
+       * mh-utils.el (mh-prompt-for-folder): Added optional argument
+       default-string which can be used in case the string for default
+       isn't intuitive enough.
+
+       * mh-index.el (mh-index-search): Made default prompt more
+       intuitive (I hope!).
+       
+2002-11-11  Peter S Galbraith  <psg@debian.org>
+
+       * mh-identity.el (mh-header-field-delete): Remove save-excursion.
+       Strange that this worked for me before... Thanks to Jeff for the
+       patch.
+       (mh-insert-identity): Numerous tweaks and fixes from Jeff who also
+       adds a nicer-looking MIME header for signatures inserted after
+       MIME insertions.
+
+2002-11-11  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el (mh-thread-parse-scan-line): Generalize this function
+       so that it can take a string containing the scan-line as argument
+       in addition to using the line at point.
+       (mh-thread-add-spaces): New function to pad each scan line to the
+       appropriate length. This is called when mh-cmd-note is increased.
+
+       * mh-e.el (mh-generate-new-cmd-note): Make this work on a threaded
+       folder by using mh-thread-add-spaces to pad the pre-existing lines
+       in mh-thread-scan-line-map appropriately.
+       (mh-thread-add-spaces): Autoload from mh-seq.
+
+2002-11-11  Mark D. Baushke  <mdb@gnu.org>
+
+       * mh-index.el: Fix checkdoc nit.
+
+       * mh-mime.el (mh-display-buttons-for-inline-parts-flag): Renamed
+       from mh-display-buttons-for-inline-parts.
+       (mh-mime-display-single): Use it.
+       This addresses part of SF #627015.
+
+       * mh-e.el (mh-print-background-flag): Renamed from
+       mh-print-background.
+       * mh-funcs.el (mh-print-msg): Use it.
+       This addresses part of SF #627015.
+       
+       * mh-comp.el (mh-delete-yanked-msg-window-flag): Renamed from
+       mh-delete-yanked-msg-window.
+       (mh-yank-from-start-of-msg, mh-yank-cur-msg): Use it.
+       This addresses part of SF #627015.
+
+       * mh-utils.el (mh-update-sequences-after-mh-show-flag): Renamed
+       from mh-update-sequences-after-mh-show.
+       (mh-show-msg): Use it.
+       This addresses part of SF #627015.
+
+       * mh-utils.el (mh-decode-quoted-printable-flag): Renamed from
+       mh-decode-quoted-printable
+       (mh-display-msg, mh-decode-quoted-printable-have-mimedecode):
+       Use it.
+       This addresses part of SF #627015.
+
+       * mh-utils.el (mh-recursive-folders-flag): Renamed from
+       mh-recursive-folders.
+       (mh-make-folder-list-background): Use it.
+       * mh-funcs.el (mh-list-folders): Ditto.
+       This addresses part of SF #627015.
+
+       * mh-utils.el (mh-auto-folder-collect-flag): Renamed from
+       mh-auto-folder-collect.
+       (mh-find-path): Use it.
+       This addresses part of SF #627015.
+
+       * mh-utils.el (mh-decode-mime-flag): Renamed from
+       mh-decode-mime.
+       * mh-utils.el (mh-show-mode, mh-show-xface) 
+       (mh-decode-quoted-printable, mh-display-msg, mh-display-msg): Use it.
+       * mh-mime.el (mh-graphical-smileys-flag) 
+       (mh-graphical-emphasis-flag): Ditto.
+       * mh-index.el (mh-index-search, mh-index-show): Ditto.
+       * mh-e.el (mh-header-display): Ditto.
+       This addresses part of SF #627015.
+
+       * mh-e.el (mh-make-folder-mode-line): Use save-window-excursion
+       to get back to the current message.
+
+2002-11-10  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-index.el (mh-index-keymap, mh-index-page-msg)
+       (mh-index-folder-tool-bar-map): Replace mh-index-scroll-up with
+       mh-index-page-msg.
+       (mh-index-keymap, mh-index-previous-page): Replace
+       mh-index-scroll-down with mh-index-previous-page.
+
+2002-11-09  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-index.el (autoload/require): Load mh-mime when mh-index.el is
+       loaded. This fixes the infinite load loop. I am not sure what the
+       actual problem is. Also removed the nop requires/autoloads.
+       (mh-defun-index): Use the right argument for mh-recenter.
+       Otherwise it misbehaves for the default value of
+       mh-summary-height.
+
+       * mh-e.el (mh-goto-next-button): Fix infinite loop when S-Tab was
+       used on first line of index folder buffer.
+
+2002-11-09  Peter S Galbraith  <psg@debian.org>
+
+       * mh-index.el (mh-index-folder-tool-bar-map): Tool-bar for
+       mh-index-mode.
+       (mh-index-folder-mode): Use it.
+       (mh-index-keymap): Added mouse-2 binding, like in regular
+       folder-mode.
+
+2002-11-08  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-index.el (mh-index-folder-mode): Fix doc string for major
+       mode. It was pointing to the wrong keymap.
+       (mh-index-show-mode): Fix doc string for mode. Also add mh-help
+       support.
+
+       * mh-comp.el (mh-forward, mh-yank-cur-msg): Use new macro
+       mh-mark-active-p instead. This does the right thing for different
+       variants of Emacs.
+       (mh-yank-cur-msg): Add a space between sexprs.
+
+       * mh-utils.el (mh-mark-active-p): New macro which papers over
+       diffences between GNU Emacs and XEmacs. The variables mark-active
+       and transient-mark-mode are used in GNU Emacs while zmacs-regions
+       and region-active-p are used in XEmacs.
+
+       * mh-seq.el (mh-put-msg-in-seq, mh-thread-ancestor-p): Use
+       mh-mark-active-p as above.
+
+       * mh-e.el (mh-delete-msg, mh-refile-msg, mh-undo): Use
+       mh-mark-active-p as above.
+
+2002-11-06  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-yank-cur-msg): Fix for XEmacs.  It didn't work
+       with a selected region, and left the inserted text selected (in
+       reverse video).  I didn't use SF patch #402315 to implement this.
+
+2002-11-05  Peter S Galbraith  <psg@debian.org>
+
+       * mh-utils.el (mh-show-tool-bar-map): Change call to
+       mh-tool-bar-search-command such that user can customize it for the
+       current session.
+
+       * mh-e.el (mh-folder-tool-bar-map): Same.
+
+2002-11-05  Bill Wohler  <wohler@newt.com>
+
+       * mh-utils.el, mh-e.el (mh-tool-bar-search-function): Renamed from
+       mh-tool-bar-search-command.
+
+       * mh-index.el (mh-index-search): Backed out previous change to
+       prompt. There ain't no folder named "all."
+
+       * mh-utils.el (mh-tool-bar-search-command): Added mh-search-folder
+       and mh-index-search to the docstring so that user can easily click
+       on them for more information.
+
+       * mh-pick.el (mh-search-folder): Mention that this function uses
+       the MH pick command to give the user more information when
+       choosing between mh-search-folder and mh-index-folder.
+
+       * mh-index.el (mh-index-search): Edited the docstring. Direct the
+        user to mh-index-program if necessary.
+        (mh-index-program): Edited this docstring too. Viewing the help
+        in a *Help* buffer really exposes grammatical flaws.
+
+2002-11-05  Peter S Galbraith  <psg@debian.org>
+
+       * mh-utils.el (mh-tool-bar-search-command): New defcustom to set
+       what search function to use in tool-bar.
+       (mh-show-tool-bar-map): Use it. 
+       
+       * mh-e.el (mh-folder-tool-bar-map): Use it. 
+
+2002-11-05  Bill Wohler  <wohler@newt.com>
+
+       * mh-index.el (mh-index-search): Changed default prompt from "+"
+       to "all". mh-prompt-for-folder doesn't seem to mind.
+
+       * mh-e.el (mh-folder-folder-menu): Added menu entry for
+       mh-index-search.
+
+       * mh-utils.el (mh-show-folder-menu): Added menu entry for
+       mh-index-search.
+
+       * mh-index.el: Added commentary on supported search engines and
+       for getting started (initializing database).
+
+2002-11-04  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-index.el (mh-index-keymap, mh-index-folder-key-map): Move key
+       binding of "i" to "Fi".
+       (mh-index-folder-mode-help-messages): Change help message to
+       reflect above change.
+
+2002-11-04  Bill Wohler  <wohler@newt.com>
+
+       * mh-index.el (mh-index-program, mh-indexer): Swapped names since
+       the former seems like a better user variable name. If you've
+       customized mh-indexer, be sure to toss it out and customize
+       mh-index-program.
+
+2002-11-04  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-index.el (mh-indexer-choices): Not having the quotes in the
+       binary names is a bit nicer since that maintains uniformity with
+       the other names.
+       (mh-index-choose): Use symbol-value instead of eval. Eval should
+       be avoided except when it can't be :-).
+
+2002-11-04  Bill Wohler  <wohler@newt.com>
+
+       * mh-index.el (mh-index-program): New variable to hold the name of
+       the indexer that was found; use this instead of clobbering
+       user-customizable variable mh-indexer.
+       (mh-index-search): Use it. Added comments to keep others from
+       doing what I had done (fortunately, I caught myself before
+       checking it in ;-).
+       (mh-index-choose): Set mh-index-program instead of mh-indexer.
+       Update docstring to describe side-effects.
+
+       * mh-index.el (mh-indexer): Added swish++ to docstring. Chances
+       are good that if someone has both swish++ and swish, they want to
+       use the much faster, much smaller swish, so move it up in the
+       list.
+       (mh-indexer-choices): Ditto for rationale for moving swish++ up in
+       priority over swish. Also, use -binary symbols instead of
+       hard-coding binary names. This allows package installers to
+       customize the location of the binaries in site-lisp and still have
+       the auto-detection code work. It also allows one to have alternate
+       binary names (see mh-swish++-binary).
+       (mh-index-search): Ditto (moving swish++ up).
+       (mh-swish++-binary): Look for search++, then search. The rationale
+       is that a package maintainer may rename search to search++ if
+       search is already in use (e.g., Debian) so try it first.
+       (mh-swish++-execute-search): Replaced Satyaki's path with dummy
+       path in docstring. Also removed RecurseSubdirs since this is the
+       default. Added comment that index might be named index++ on some
+       systems (e.g., Debian).
+       (mh-index-choose): Updated to work with new mh-indexer-choices.
+
+2002-11-04  Peter S Galbraith  <psg@debian.org>
+
+       * mh-identity.el (mh-identity-list-set): Don't call easy-menu-add
+       here, since that adds the menu to the Customize buffer in XEmacs.
+
+2002-11-04  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-mhn-compose-insert-flag)
+       (mh-mml-compose-insert-flag): Removed eval-when-compile defvar.
+
+       * mh-mime.el (mh-mhn-compose-insert-flag)
+       (mh-mml-compose-insert-flag): Move variables to mh-utils.el.
+       Fixes mh-letter-menu for XEmacs.
+
+2002-11-04  Eric Ding  <eding@rational.com>
+
+       * mh-comp.el (mh-rejected-letter-start): add another string
+
+2002-11-04  Eric Ding  <ericding@alum.mit.edu>
+
+       * mh-comp.el (mh-rejected-letter-start): regexp-opt doesn't take
+       regexps as args, only regular strings
+
+2002-11-04  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-insert-mail-followup-to): Don't modify a
+       pre-existing M-F-T field.  If a nmh replgroupcomps propagates a
+       M-F-T field in a message reply, then we have to have it alone.
+
+2002-11-02  Bill Wohler  <wohler@newt.com>
+
+       * mh-comp.el, mh-e.el, mh-funcs.el, mh-identity.el, mh-index.el,
+       mh-mime.el, mh-pick.el, mh-seq.el, mh-speed.el, mh-utils.el,
+       mh-xemacs-compat.el: Added Local Variables section. Defined
+       sentence-end-double-space to be nil so that those who might not
+       buy my setting of this variable can at least run checkdoc without
+       a whole lot of noise.
+
+2002-11-02  Peter S Galbraith  <psg@debian.org>
+
+       * mh-identity.el: New file.  Multiple Identify support for MH-E.
+       Used to easily set different fields such as From and Organization,
+       as well as diffrent signature files.  This file won't be included
+       with V7.0.
+
+2002-11-02  Bill Wohler  <wohler@newt.com>
+
+       * mh-mime.el (mh-mm-save-part): New function to wrap mm-save-part
+       from Gnus 5.10 to make it explicit which code has been
+       commandeered.
+       (mh-mime-save-part): Call mh-mm-save-part instead of cut-n-pasted
+       code from Gnus 5.10.
+
+2002-11-02  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-yank-from-start-of-msg): Edit docstring to
+       mention related variables mh-reply-show-message-flag and
+       mh-delete-yanked-msg-window.
+       (mh-reply): Change the "Reply to whom" prompt.
+
+2002-11-01  Bill Wohler  <wohler@newt.com>
+
+       * mh-e.el (mh-show-hook): Moved to mh-utils.el where it is used.
+       (mh-folder-list-change-hook): Converted this from defvar in other
+       files to defcustom here. It is called, not documented as
+       obsolete, and might as well be documented.
+       (mh-inc-folder, mh-quit, mh-delete-a-msg, mh-refile-a-msg,
+       mh-process-commands, mh-update-unseen): Added missing
+       documentation about hook, or made verbiage about hook consistent
+       throughout, even if the function isn't interactive.
+
+       * mh-utils.el (mh-folder-list-change-hook): Moved defvar to mh-e
+       and made it a defcustom.
+       (mh-show-mode-hook): Put it back in (actually, it was in mh-e.el,
+       but this is the place where it is called).
+       (mh-show-hook): Moved here from mh-e.el since it's called here.
+       (mh-show-mode): Call mh-show-mode-hook.
+       (mh-show-mode, mh-show-msg, mh-find-path, mh-prompt-for-folder,
+       mh-prompt-for-folder, mh-set-folder-list): Added missing
+       documentation about hook, or made verbiage about hook consistent
+       throughout, even if the function isn't interactive.
+
+       * mh-comp.el (mh-send-letter): Made verbiage about hook consistent
+       throughout.
+       (mh-insert-prefix-string): Made docstring more descriptive of what
+       is going on.
+
+       * mh-funcs.el (mh-kill-folder): Added missing documentation about
+       hook.
+
+       * mh-index.el (mh-index-show-hook): Moved defvar to defcustom.
+       (mh-index-show): Made verbiage about hook consistent throughout.
+       
+       * mh-mime.el (mh-edit-mhn-hook): Moved defvar to defcustom.
+       (mh-edit-mhn): Added missing documentation about hook.
+
+       * mh-pick.el (mh-pick-mode): Made verbiage about hook consistent
+       throughout. Call the damn hook.
+
+2002-11-01  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-comp.el (mh-insert-mail-followup-to-list): Fix typo so that
+       it will look right in info.
+
+       * mh-index.el (mh-index-search): Change argument name from
+       new-buffer-p to new-buffer-flag.
+       (mh-index-search-again, mh-index-search): New index-buffers were
+       being named *mh-index*<2>, *m-index*<2><2> and so on. This problem
+       is fixed.
+       (mh-index-scroll-up, mh-index-scroll-down): Scrolling in index
+       show buffers (after the first one) was broken.
+       (mh-index-quit): Bury show buffer instead of killing it. Killing
+       it, without killing the corresponding folder buffer, can cause
+       confusion with two folder buffers trying to display in the same
+       show buffer.
+
+       * mh-seq.el (mh-thread-prune-containers): Rewritten without
+       recursion. Also removed the top-level-p argument since it isn't
+       required anymore.
+       (mh-thread-sort-containers): New function factored out from
+       previous definition of mh-thread-prune-containers. It sorts
+       message containers in ascending order wrt their message indices.
+       (mh-thread-generate): Use new mh-thread-prune-containers.
+
+       * mh-e.el (mh-remove-all-notation): Fix the test. It was testing
+       at the wrong place!
+
+2002-10-31  Bill Wohler  <wohler@newt.com>
+
+       * Makefile, README, import-emacs, mh-comp.el, mh-e.el,
+       mh-funcs.el, mh-index.el, mh-mime.el, mh-pick.el, mh-seq.el,
+       mh-speed.el, mh-utils.el: Replaced mh-e with MH-E.
+
+2002-10-31  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el (mh-thread-parse-scan-line): Modified to remove user
+       sequence notation and leave notation for other things alone. This
+       ensures that threading doesn't lose notations for replied-to
+       messages.
+
+       * mh-e.el (mh-inc-folder): Remove call to mh-widen here and
+       instead do it in mh-get-new-mail. This way the widening happens
+       only if new mail is incorporated.
+       (mh-generate-new-cmd-note): The function now returns the point
+       from which the new messages start. This will allow threading to do
+       the right thing.
+       (mh-get-new-mail): Always call mh-remove-cur-notation. Otherwise
+       adaptive scan mode leaves two messages marked as current in
+       certain cases. Fix indentation of if statement. If there are
+       messages to be incorporated, the folder is widened. If mh-cmd-note
+       changes set start-of-inc correctly.
+       (mh-remove-all-notation): Change this function to only remove user
+       sequence notation and leave notation for replied-to messages and
+       similar notation alone. This means operations like narrowing to
+       subject sequence and widening don't lose notations.
+
+2002-10-31  Bill Wohler  <wohler@newt.com>
+
+       * mh-comp.el (mh-insert-mail-followup-to-list): Fixed typo in
+       docstring and other minor edits. Checkdoc removed trailing spaces.
+       (mh-insert-signature): Checkdoc flagged docstring. Reverted to
+       previous value. Added specific name of hook that is run.
+       (mh-regexp-in-field-p, mh-insert-letter): Checkdoc removed
+       trailing spaces.
+
+2002-10-31  Jeffrey C Honig  <jch@honig.net>
+
+       * mh-e.el (mh-show-mode-hook): Remove the unused
+       mh-show-mode-hook, mh-show-hook is the one that is used.
+
+       * mh-utils.el (mh-show-mode): Change the documentation to refer to
+       mh-show-hook instead of the unused mh-show-mode-hook.
+
+2002-10-31  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-insert-mail-followup-to-list): Set default to nil
+       and include example in doc string.
+
+2002-10-31  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-index.el (mh-indexer): Add customization choice for swish++.
+       (mh-indexer-choices): Add swish++ choice.
+       (mh-index-search): Change doc to reflect addition of swish++ option.
+       (mh-swish++-binary, mh-swish++-directory): New variables for
+       swish++ interface.
+       (mh-swish++-execute-search): New function to execute swish++
+       search.
+       (mh-swish++-next-result): Function aliased to mh-swish-next-result
+       since the result format of swish++ is the same as that of swish-e.
+       (mh-index-search): Always overwrite window-configuration with new
+       value. This is needed since we don't kill the index-buffer when
+       quitting which means the window configuration wasn't getting set
+       properly.
+       (mh-index-search-again): If index buffer is reused, reset the old
+       window config to its original value.
+
+2002-10-30  Bill Wohler  <wohler@newt.com>
+
+       * Makefile (emacs, xemacs): New targets.
+       (all): Use these targets instead of calling specific targets.
+       (.PHONY): Added emacs, xemacs, autoloads, custom-loads. Broke up
+       target and moved pieces into their own sections.
+       
+
+2002-10-30  Peter S Galbraith  <psg@debian.org>
+
+       * mh-utils.el (mh-show-font-lock-keywords): Wrap an
+       'eval-and-compile around its defvar, otherwise byte-compilation
+       fails on `mh-show-font-lock-keywords-with-cite'.
+
+2002-10-29  Jeffrey C Honig  <jch@honig.net>
+
+       * mh-comp.el (mh-letter-insert-signature-hook) 
+       (mh-insert-signature): Add a hook to be called before inserting
+       the signature.  Do not attempt to insert the signature if
+       mh-insert-signature-file-name is nil.
+
+2002-10-29  Peter S Galbraith  <psg@debian.org>
+
+       * mh-e.el (mh-inc-folder): Call mh-widen when mh-narrowed-to-seq
+       (Closes SF #629233: inc in narrowed folder suboptimal)
+
+       * mh-comp.el (mh-insert-letter): Stop using mhl to include a
+       message before it mangles the header, and supercite fails
+       (Closes SF #629153: mh-insert-letter uses mhl?).
+       (mh-insert-prefix-string): Leave point at beginning instead of
+       end, since that's what sc-cite-original does.
+       (mh-yank-cur-msg): Adjust for mh-insert-prefix-string change.
+
+2002-10-30  Steve Youngs  <youngs@xemacs.org>
+
+       * mh-e.el (mh-folder-mode): Check for 'font-lock-auto-fontify'
+       when in XEmacs so we don't do font-locking unconditionally.
+
+       * mh-utils.el (mh-show-mode): Ditto.
+
+2002-10-29  Peter S Galbraith  <psg@debian.org>
+
+       * mh-e.el (mh-folder-refiled-face, mh-folder-cur-msg-number-face) 
+       (mh-folder-to-face, mh-folder-body-face): Define faces instead of
+       copying them from font-lock faces.  This mh-e will look the same
+       in XEmacs as it does in Emacs.
+       * mh-utils.el (mh-show-cc-face, mh-show-date-face) 
+       (mh-show-header-face): Ditto.
+
+2002-10-29  Jeffrey C Honig  <jch@honig.net>
+
+       * mh-comp.el (mh-send-letter): I meant to use
+       mh-goto-header-field, not mh-get-header-field.  The former returns
+       nil if the header is not found and doesn't need a conditional.
+
+2002-10-29  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-forward): Bug fix.  Change 'kill-line for a
+       'delete-region, because I don't want that text yanked with C-y.
+
+       * mh-seq.el (mh-put-msg-in-seq): Add support for selected
+       region (Closes SF feature request #630324).
+
+2002-10-28  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el (mh-thread-prune-subject): Make the regexp a little
+       general so that a subject of the form "Re[218]: howdy" would be
+       properly pruned.
+
+       * mh-mime.el (mh-mime-save-part): Copy function definition of
+       mm-save-part from cvs gnus since that function is buggy in gnus
+       that comes with emacs21.2.
+
+2002-10-28  Peter S Galbraith  <psg@debian.org>
+
+       * mh-e.el (mh-scan-subject-regexp): Add an expression to match an
+       optional bracketed number after "Re", such as in "Re[2]:"
+       (Patch by Satyaki; I checked it and applied).
+       (mh-folder-font-lock-subject): Adapt to new mh-scan-subject-regexp.
+       * mh-seq.el (mh-subject-to-sequence): Ditto.
+
+       * mh-e.el (mh-folder-sequence-menu):  Remove "Toggle Subject
+       Thread" from menu.   mh-toggle-threads is in the Folder menu.
+
+       * mh-e.el (mh-folder-sequence-menu): Minor menu text edits.
+
+       * mh-utils.el (mh-show-update-sequences): Added to
+       mh-defun-show-buffer builds; needed for menu.
+       (mh-show-sequence-menu, mh-show-message-menu) 
+       (mh-show-folder-menu): 3 new menus in mh-show-mode-map that mirror
+       the menus used in mh-folder-mode.
+       (mh-show-mode): easy-menu-add the 3 menus.
+
+2002-10-28  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-utils.el (mh-goto-msg): Fix the regexp to search so that we
+       go to the right message. In a threaded folder message 2 may be
+       present after 26 and the previous regexp would go to 26 when we
+       really wanted to go to 2!
+
+       * mh-seq.el (mh-widen): Add call to mh-recenter to make it like
+       mh-narrow-to-seq.
+
+2002-10-28  Bill Wohler  <wohler@newt.com>
+
+       * mh-utils.el (mh-show-mime-save-parts): Deleted definition.
+       (mh-show-mime-map, tool-bar-map): Use mh-mime-save-parts instead
+       of mh-show-mime-save-parts.
+
+2002-10-28  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-letter-tool-bar-map): tool-bar-add-item key name
+       bug fix.
+       * mh-utils.el (mh-show-tool-bar-map): Same.
+       * mh-e.el (mh-folder-tool-bar-map, mh-folder-seq-tool-bar-map): Same
+
+2002-10-27  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el (mh-toggle-threads): Add call to mh-recenter to make
+       its behavior like that of mh-narrow-to-seq.
+
+2002-10-27  Bill Wohler  <wohler@newt.com>
+
+       * mh-mime.el (mh-mime-save-parts): Renamed from
+       mh-store-mime-parts for consistency with mh-mime-save-part. Fixed
+       bug whereby mh-mime-save-parts-directory was not getting
+       initialized properly from a string-valued
+       mh-mime-save-parts-default-directory.
+       (mh-mime-save-parts-default-directory): Ditto. Check your
+       customizations!
+       (mh-mime-save-parts-directory): Ditto.
+
+       * mh-utils.el (mh-show-mime-save-parts): Renamed from
+       mh-store-mime-parts.
+       (mh-show-mime-map): Added keybinding "K a" for
+       mh-show-mime-save-parts.
+
+       * mh-e.el (mh-mime-save-parts) Renamed from mh-store-mime-parts.
+       (mh-mime-map): Added keybinding "K a" for mh-mime-save-parts.
+       (mh-help-messages): Added help for "K a".
+
+2002-10-27  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-search-addr-regexp, mh-regexp-in-field-p): Rename
+       the first to the second (and recode a bit).
+       (mh-insert-mail-followup-to): Use it.
+
+2002-10-27  Bill Wohler  <wohler@newt.com>
+
+       * mh-utils.el (mh-invisible-headers): Backed out change. Removed
+       Mail-Followup-To due to objections from Peter and Mark.
+
+2002-10-27  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el (mh-msg-is-in-seq): Modified to show info about
+       whether the message being queried about has been marked to be
+       deleted or refiled.
+
+       * mh-mime.el (mh-insert-mime-security-button): Make
+       pressed-details a local.
+
+2002-10-27  Steve Youngs  <youngs@xemacs.org>
+
+       * .cvsignore: New file.
+
+2002-10-26  Steve Youngs  <youngs@xemacs.org>
+
+       * mh-seq.el (mh-notate-deleted-and-refiled): Don't bind local
+       variable 'dest', it isn't used anywhere.
+
+       * mh-pick.el (mh-do-pick-search): Don't bind local variable
+       'finding-messages', it isn't used anywhere.
+
+       * mh-utils.el: Byte-compiler warning suppression.
+       (mh-gnus-article-highlight-citation): Rather than redefining
+       'gnus-cite-face-list', just re-order it. 
+       (mh-show-mode): Force turning on font-lock in XEmacs.
+
+       * mh-seq.el: Byte-compiler warning suppression.
+
+       * mh-index.el: Byte-compiler warning suppression.
+
+       * mh-comp.el: Byte-compiler warning suppression.
+
+       * mh-xemacs-compat.el: Add defaliases for 'timerp' &
+       'cancel-timer' to the equivalent 'itimer' functions. 
+       (rfc822): Require it for 'rfc822-goto-eoh'.
+       Byte-compiler warning suppression.
+
+       * mh-e.el (mh-folder-mode): Force turning on font-lock in XEmacs.
+       (mh-toggle-threads): Remove duplicate autoload.
+       Byte-compiler warning suppression.
+       (mh-folder-unseen-seq-list): Use 'with-temp-buffer' to fix a bug
+       in XEmacs when font-lock is on.
+       (mh-folder-unseen-seq-name): Ditto.
+
+2002-10-27  Mark D. Baushke  <mdb@gnu.org>
+
+       * Makefile: Reorganize to allow for building also compiling for
+       XEmacs too. Sanitize so that it will work using least-common
+       denominator versions of 'make'. Tested using GNU make, Solaris make, 
+       and Berkely make.
+       (all): Use recursive invokation based on the emacs or xemacs
+       executable passed on the 'make EMACS=xemacs' command line.
+       (XEMACS_OPTIONS): The incantation to be passed to an xemacs editor
+       to compile things properly.
+       (AUTO_PRELOADS): Magic XEmacs glue.
+       (clean): Ditto.
+       (autoloads): Ditto.
+       (custom-loads): Ditto.
+       
+2002-10-26  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-e.el (mh-last-msg): Add call to mh-recenter.
+
+2002-10-26  Peter S Galbraith  <psg@debia.org>
+
+       * mh-comp.el (mh-search-addr-regexp, mh-re-search-to-cc): Remove
+       `mh-re-search-to-cc' in favour of more generalized new function
+       `mh-search-addr-regexp'.
+       (mh-insert-mail-followup-to): Use it.
+
+2002-10-26  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el (mh-copy-seq-to-eob): Avoid rethreading when the
+       folder is already threaded. This is more efficient and also avoids
+       problems when the folder is widened.
+       (mh-thread-inc): Don't try to restore the point to original
+       location since mh-inc-folder from where this is called changes
+       point location after calling this function.
+
+       * mh-e.el (mh-make-folder-mode-line): Fix a small bug where the
+       test was wrong.
+
+2002-10-26  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-insert-mail-followup-to): Fix for new defcustom.
+
+2002-10-26  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el (mh-notate-deleted-and-refiled): Remove unused binding
+       of dest. The problem was pointed out by Steve as well.
+
+       * mh-e.el (mh-toggle-threads): Remove duplicate autoload as
+       pointed out by Steve.
+
+2002-10-26  Bill Wohler  <wohler@newt.com>
+
+       * mh-utils.el (mh-invisible-headers): Added Mail-Followup-To.
+
+2002-10-26  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-insert-mail-followup-to-list): Change defvar to
+       defcustom.
+
+2002-10-25  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-e.el (mh-remove-all-notation): New function that removes all
+       notation.
+
+       * mh-seq.el (mh-narrow-to-seq): When hiding the original folder
+       remove all notation. This avoids stale notation hanging around.
+       Also changes in show buffer and position in folder buffer are
+       avoided if possible.
+       (mh-widen): When widening the scan-lines are notated based on the
+       current state of the folder. This means any changes made when the
+       folder was narrowed are shown consistently.
+       (mh-notate-deleted-and-refiled): Update the documentation.
+       (mh-thread-parse-scan-line): For some reason the ASCII value of
+       the space character was being used here. This is fixed.
+       (mh-thread-inc, mh-toggle-threads): Avoid change of point in
+       folder and message being displayed in shown buffer.
+
+       * mh-utils.el (mh-recenter): Rewrite mh-recenter to show fewer
+       blank lines when point is towards the end of the folder buffer.
+
+2002-10-25  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-insert-mail-followup-to-flag): New boolean
+       defcustom to append a Mail-Followup-To field to the header.  The
+       insertion is done if the To: or Cc: fields matches an entry in
+       `mh-insert-mail-followup-to-list'."
+       (mh-insert-mail-followup-to-list): New defvar. List of addresses
+       for which a Mail-Followup-To field is inserted.
+       (mh-re-search-to-cc): New function. Search for REGEXP in To: and
+       Cc: fields.
+       (mh-insert-mail-followup-to): New function. Insert
+       Mail-Followup-To: if To or Cc match `mh-insert-mail-followup-to-list'.
+       (mh-compose-and-send-mail): Call mh-insert-mail-followup-to if
+       mh-insert-mail-followup-to-flag is true.
+
+2002-10-25  Mark D. Baushke  <mdb@gnu.org>
+
+       * mh-utils.el (mh-show-maximum-size): New variable to control
+       the display of large messages.
+       (mh-display-msg): Use it (Closes SF #488696).
+       
+       * mh-seq.el (mh-toggle-threads): Checkdoc fix.
+
+       * mh-e.el (mh-reset-threads-and-narrowing): Checkdoc fix.
+
+       * mh-comp.el (mh-insert-x-mailer-flag): Renamed from
+       mh-insert-x-mailer-p. Update docstring.
+       (mh-send-letter): Use it.
+       (mh-reply-show-message-flag): Renamed from
+       mh-reply-show-message-p. Update docstring.
+       (mh-reply): Use it.
+       This addresses part of SF #627015.
+       
+       * mh-e.el (mh-recenter-summary-flag): Renamed from
+       mh-recenter-summary-p. Update docstring.
+       (mh-set-scan-mode): Use it.
+       This addresses part of SF #627015.
+       
+2002-10-25  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-e.el (mh-reset-threads-and-narrowing): New function which
+       resets all thread and narrowing state to completely unthreaded and
+       widened state. As a side effect, the folder buffer is erased.
+       (mh-rescan-folder): Reset threads and narrowing state.
+
+       * mh-funcs.el (mh-pack-folder-1): Reset threads and narrowing state.
+
+       * mh-seq.el (mh-copy-seq-to-eob): Change mh-view-ops after
+       threading is over so that if user aborts threading, it doesn't
+       leave mh-e in an inconsistent state.
+       (mh-toggle-threads): Use mh-scan-folder to populate the folder
+       buffer instead of mh-rescan-folder which resets threading and
+       narrowing state.
+
+2002-10-24  Bill Wohler  <wohler@newt.com>
+
+        * mh-e is completely checkdoc clean now.
+       
+       * mh-utils.el (mh-clean-message-header-flag): Renamed from
+       mh-clean-message-header.
+       (mh-bury-show-buffer-flag): Renamed from mh-bury-show-buffer.
+       (mh-show-use-goto-addr-flag): Renamed from mh-show-use-goto-addr.
+       This addresses part of SF #627015.
+
+       * mh-mime.el (mh-clean-message-header-flag): Renamed from
+       mh-clean-message-header.
+       Checkdoc fixes. This addresses part of SF #627015.
+
+       * mh-index.el (mh-clean-message-header-flag): Renamed from
+       mh-clean-message-header. This addresses part of SF #627015.
+
+       * mh-funcs.el (mh-do-not-confirm-flag): Renamed from
+       mh-do-not-confirm. This addresses part of SF #627015.
+
+       * mh-e.el (mh-do-not-confirm-flag): Renamed from
+       mh-do-not-confirm.
+       (mh-clean-message-header-flag): Renamed from
+       mh-clean-message-header.
+       This addresses part of SF #627015.
+       
+       * mh-comp.el: checkdoc fixes.
+
+2002-10-24  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el (mh-copy-seq-to-eob): Rewritten to scan the headers
+       fresh instead of yanking from buffer. This is needed to get
+       correct threading in copied sequence.
+       (mh-thread-inc, mh-thread-update-scan-line-map)
+       (mh-thread-parse-scan-line): Eliminate the use, and hence the
+       definition of, the kludgy mh-thread-update-scan-line-map. Instead
+       the functions mh-notate-deleted-and-refiled and
+       mh-notate-user-sequences are used to get the message marks right.
+       (mh-thread-generate-scan-lines): Updated to allow the thread tree
+       to be used in a narrowed folder buffer.
+       (mh-thread-folder, mh-toggle-threads): Remove
+       mh-folder-threaded-view-flag.
+       (mh-thread-old-scan-line-map): New buffer-local variable that
+       remembers the original scan-line map so that the sequence thread,
+       narrow, widen will work.
+       (mh-narrow-to-seq, mh-widen): Remember the scan-line map when
+       narrowing and restore it when widening.
+
+       * mh-e.el (mh-folder-threaded-view-flag, mh-folder-folder-menu) 
+       (mh-regenerate-headers, mh-get-new-mail) 
+       (mh-make-folder-mode-line, mh-process-commands) 
+       (mh-delete-scan-msgs): Remove mh-folder-threaded-view-flag.
+       Instead (memq 'unthread mh-view-ops) is used to test if the folder
+       is threaded.
+
+       * mh-mime.el (mh-display-emphasis): Shadow article-goto-body here
+       since we want to do emphasis on the whole of the region and not
+       just after the first blank line.
+       (mh-mm-display-part): When displaying a text part show smilies and
+       emphasis.
+
+       * mh-index.el (mh-index-insert-scan): Attempt to keep number of
+       args to scan small if there are lots of adjacent matches.
+       (mh-index-quit): Bury index-buffer on quit instead of killing it.
+       This behavior is more like that of mh-quit.
+
+       * mh-seq.el (mh-widen): If folder was threaded after narrowing
+       then make mh-widen undo the threading instead of erroring out.
+
+2002-10-24  Peter S Galbraith  <psg@debian.org>
+
+       * mh-seq.el (mh-toggle-threads): Add a cond (as suggested by
+       Satyaki) to properly unthread a narrowed-to-sequence.
+
+       * mh-seq.el (mh-thread-generate-scan-lines): Fix threading
+       breakage from partial switch to mh-container-real-child-flag and
+       to dupl-flag.
+
+       * mh-comp.el (mh-yank-cur-msg): Bug fix: specify 
+         (eq t mh-yank-from-start-of-msg) when that's what we want.
+
+2002-10-24  Mark D. Baushke  <mdb@gnu.org>
+
+       * mh-seq.el (mh-thread-prune-subject): Renamed subject-pruned-p as
+       subject-pruned-flag.
+       (mh-thread-inc): Renamed old-buffer-modified-p as
+       old-buffer-modified-flag.
+       (mh-thread-generate-scan-lines): Renamed dupl-p as dupl-flag.
+       This addresses part of SF #627015.
+
+       * mh-index.el (mh-index-advance):  Renamed backward-p
+       local variable as backward-flag.
+       (mh-index-next-button): Renamed backward-p
+       argument as backward-flag.
+       (mh-index-show): Renamed display-headers-p argument as
+       display-headers-flag.
+       This addresses part of SF #627015.
+
+       * mh-e.el (mh-scan-format, mh-version): Use mh-nmh-flag.
+       (mh-folder-mime-action): Renamed include-security-p
+       argument as include-security-flag.
+       (mh-goto-next-button, mh-next-button): Renamed backward-p
+       argument as backward-flag.
+       (mh-get-new-mail): Renamed new-mail-p local variable as
+       new-mail-flag.
+       (mh-goto-cur-msg): Renamed minimal-changes-p argument as
+       minimal-changes-flag.
+       (redraw-needed-flag): Renamed redraw-needed-p local variable as
+       redraw-needed-flag.
+       (mh-seq-containing-msg): Renamed include-internal-p argument as
+       include-internal-flag.
+       (mh-page-msg): Use mh-page-to-next-msg-flag.
+       This addresses part of SF #627015.
+
+       * mh-mime.el (mh-mhn-compose-insert-flag): Renamed from
+       mh-mhn-compose-insert-p. Make it buffer-local.
+       (mh-mhn-compose-type, mh-mhn-compose-external-type,
+       mh-mhn-compose-forw, mh-edit-mhn): Use mh-mhn-compose-insert-flag.
+       (mh-mml-to-mime, mh-mml-secure-message-encrypt-pgpmime,
+       mh-mime-display-part, mh-mime-display-single): Use
+       mh-gnus-pgp-support-flag renamed from mh-gnus-pgp-support-p.
+       (mh-mime-display-single): Renamed small-image-p local
+       variable as small-image-flag.
+       (mh-mime-inline-part): Renamed local variable inserted-p as
+       inserted-flag.
+       (mh-mime-inline-part): Renamed local variable displayed-p as
+       displayed-flag.
+       This addresses part of SF #627015.
+
+       * mh-comp.el (mh-letter-menu, mh-letter-mode, mh-send-letter):
+       mh-mhn-compose-insert-flag.
+       (mh-repl-group-formfile, mh-forward): Use mh-nmh-flag
+       renamed from mh-nmh-p.
+       (mh-reply, mh-insert-x-mailer, mh-send-letter): Use mh-nmh-flag.
+       (mh-letter-mode-map): Use mh-gnus-pgp-support-flag renamed from
+       mh-gnus-pgp-support-p.
+       (mh-mml-secure-message-sign-pgpmime): Use
+       mh-gnus-pgp-support-flag.
+       This addresses part of SF #627015.
+       
+       * mh-utils.el (mh-page-to-next-msg-flag): Renamed from
+       mh-page-to-next-msg-p.
+       (mh-show-msg): Use mh-page-to-next-msg-flag.
+       (mh-gnus-pgp-support-flag): Renamed from
+       mh-gnus-pgp-support-p.
+       (mh-show-font-lock-fontify-region): Fix docstring per checkdoc.
+       (with-mh-folder-updating): Renamed argument
+       save-modification-flag-p as mh-save-modification-flag.
+       (mh-prompt-for-folder): Renamed new-file-p local
+       variable as new-file-flag.
+       This addresses part of SF #627015.
+
+2002-10-24  Mark D Baushke  <mdb@gnu.org>
+
+       * mh-comp.el (mh-forward): Fix mh-mml-compose-insert-p reference
+       in last commit to be mh-mml-compose-insert-flag.
+       (mh-mml-compose-insert-flag): Move defvar to fix compiler warning.
+
+2002-10-24  Jeffrey C Honig  <jch@honig.net>
+
+       * mh-comp.el (mh-forward): Add support for transient-mark mode.
+       When using nmh, always specify -mime so as to preserve the
+       original message(s).  If mh-compose-insertion is 'gnus, convert
+       the mhbuild format forwarding directives into MML.
+
+2002-10-24  Eric Ding  <ericding@alum.mit.edu>
+
+       * mh-comp.el (mh-send-letter): Fix for earlier change that added
+       "-mime" for bcc'ed MIME mail; still doesn't work with nmh 1.0, but
+       at least no longer triggered for every outgoing message!
+
+2002-10-24  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-yank-cur-msg): Fix selected regions for supercite
+       (see text below).
+
+       * mh-comp.el (mh-yank-cur-msg): Fix for supercite.  Someone played
+       with the point and mark setting prior to the call to
+       'mh-insert-prefix-string and that broke supercite.  I put comments
+       to make it obvious to future coders why those settings exists.
+       Note that supercite is still broken when a region is selected in
+       the show buffer.  Presumably it's been like that for a long time.
+       We need to insert the header as well as the selected region oin
+       that case.  I'll submit an SF bug.
+
+2002-10-24  Jeffrey C Honig  <jch@honig.net>
+
+       * mh-comp.el (mh-yank-from-start-of-msg, mh-reply): Use -noformat
+       flag to reply when 'autosupercite or 'autoattrib are specified to
+       prevent duplicate cites of the body of a message.
+       
+2002-10-23  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-utils.el (font-lock-default-fontify-region): Add autoload to
+       avoid compiler warning.
+
+2002-10-23  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-letter-mode): set fill-paragraph-function to our
+       own 'mh-fill-paragraph-function instead of simply
+       'mail-mode-fill-paragraph (because it doesn't handle a non-nil
+       fill-prefix correctly).
+       (mh-fill-paragraph-function): New function for mh-letter-mode
+       fill-paragraph-function in order to handle non-nil fill-prefix.
+       Call sendmail's mail-mode-fill-paragraph if in the mail header,
+       else call default fill-paragraph with fill-prefix set to nil.
+       (Closes SF #489927)
+
+       * mh-comp.el (mh-letter-mode): Let's use font-lock even if gnus is
+       used in show-mode.  The reason is that gnus uses static text
+       properties which are not appropriate for a buffer that will be
+       edited.  So the choice here is either fontify the citations and
+       header or the header only.
+
+       * mh-utils.el (mh-show-font-lock-fontify-region): Limit font-lock
+       in mh-show-mode to the header.  Used when mh-highlight-citation-p
+       is set to gnus, leaving the body to be dealt with by gnus
+       highlighting.  This fixes gnus text emphasis in mh-show-mode.
+       (mh-show-mode): In font-lock-defaults, set
+       font-lock-fontify-region-function to mh-show-font-lock-fontify-region.
+
+2002-10-23  Bill Wohler  <wohler@newt.com>
+
+       * mh-mime.el (mh-mml-attach-file): Prompt for disposition should
+       be Disposition, not Content-Type. The Content-Type has been
+       determined automatically.
+
+2002-10-23  Mark D. Baushke  <mdb@gnu.org>
+
+       * MH-E-NEWS: 
+       s/mh-adaptive-cmd-note/mh-adaptive-cmd-note-flag/
+       s/mh-show-use-xface/mh-show-use-xface-flag/
+       s/mh-tool-bar-reply-3-buttons/mh-tool-bar-reply-3-buttons-flag/
+       This addresses part of SF #627015.
+
+       * mh-comp.el:
+       s/mh-mml-compose-insert-p/mh-mml-compose-insert-flag/
+       s/mh-xemacs-p/mh-xemacs-flag/
+       (mh-letter-menu): Use mh-mml-compose-insert-flag.
+       (mh-insert-x-mailer): Use mh-xemacs-flag.
+       (mh-mml-compose-insert-flag): Renamed from
+       mh-mml-compose-insert-p.
+       (mh-send-letter): Use mh-mml-compose-insert-flag.
+       This addresses part of SF #627015.
+       
+       * mh-e.el:
+       s/mh-folder-threaded-view-p/mh-folder-threaded-view-flag/
+       s/mh-adaptive-cmd-note/mh-adaptive-cmd-note-flag/
+       s/mh-xemacs-p/mh-xemacs-flag/
+       (mh-folder-threaded-view-flag): Renamed from
+       mh-folder-threaded-view-p. Make it buffer local.
+       (mh-folder-tool-bar-map): Use mh-tool-bar-reply-3-buttons-flag.
+       (mh-remove-xemacs-horizontal-scrollbar): Use mh-xemacs-flag.
+       (mh-make-folder, mh-regenerate-headers, mh-get-new-mail): Use
+       mh-adaptive-cmd-note-flag.
+       (mh-folder-folder-menu, mh-regenerate-headers, mh-get-new-mail,
+       mh-make-folder-mode-line, mh-process-commands,
+       mh-delete-scan-msgs): Use mh-folder-threaded-view-flag.
+       This addresses part of SF #627015.
+       
+       * mh-index.el:
+       s/mh-adaptive-cmd-note/mh-adaptive-cmd-note-flag/
+       (mh-index-search): Use mh-adaptive-cmd-note-flag.
+       This addresses part of SF #627015.
+       
+       * mh-mime.el:
+       s/mh-mml-compose-insert-p/mh-mml-compose-insert-flag/
+       s/mh-xemacs-p/mh-xemacs-flag/
+       (mh-mml-compose-insert-flag): Renamed from
+       mh-mml-compose-insert-p. Make it buffer local.
+       (mh-mml-attach-file, mh-mml-secure-message-sign-pgpmime,
+       mh-mml-secure-message-encrypt-pgpmime): Use it.
+       (gnus-local-map-property): Use mh-xemacs-flag.
+       This addresses part of SF #627015.
+       
+       * mh-seq.el:
+       s/mh-folder-threaded-view-p/mh-folder-threaded-view-flag/
+       (mh-thread-generate, mh-thread-folder, mh-toggle-threads): Use
+       mh-folder-threaded-view-flag.
+       This addresses part of SF #627015.
+       
+       * mh-speed.el:
+       s/mh-speed-run-flists-p/mh-speed-run-flists-flag/
+       s/mh-speed-refresh-p/mh-speed-refresh-flag/
+       (mh-speed-run-flists-flag): Renamed from mh-speed-run-flists-p.
+       (mh-folder-speedbar-buttons): Use it.
+       (mh-speed-refresh-flag): Renamed from mh-speed-refresh-p.
+       (mh-speed-update-current-folder, mh-speed-invalidate-map,
+       mh-speed-add-folder): Use it.
+       This addresses part of SF #627015.
+       
+       * mh-utils.el:
+       s/mh-xemacs-p/mh-xemacs-flag/
+       s/mh-tool-bar-reply-3-buttons/mh-tool-bar-reply-3-buttons-flag/
+       s/mh-show-use-xface/mh-show-use-xface-flag/
+       (mh-xemacs-flag): Renamed from mh-xemacs-p.
+       (mh-show-xface-function): Use it.
+       (mh-tool-bar-reply-3-buttons-flag): Renamed from
+       mh-tool-bar-reply-3-buttons.
+       (mh-show-tool-bar-map): Use it.
+       (mh-adaptive-cmd-note-flag): Renamed from mh-adaptive-cmd-note.
+       (mh-cmd-note): Use it in description.
+       (mh-show-use-xface-flag): Renamed from mh-show-use-xface. Use
+       mh-xemacs-flag.
+       (mh-show-xface): Use mh-show-use-xface-flag.
+       This addresses part of SF #627015.
+       
+2002-10-23  Bill Wohler  <wohler@newt.com>
+
+       * Makefile (all): Rather than have to run "make clean all" all the
+       time, make the default target do a clean so all you have to say is
+       "make".
+
+       * mh-e.el (mh-folder-map): Moved "t (mh-toggle-threads)" to T
+       prefix.
+
+2002-10-22  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-index.el (mh-indexer-choices, mh-swish-binary): The
+       executable swish-e can be used to search (just like swish-search).
+       However the Makefile in swish-e-2.2.2 doesn't install
+       swish-search. So it is preferable to use swish-e.
+
+2002-10-22  Bill Wohler  <wohler@newt.com>
+
+       * mh-comp.el (mh-letter-mode-map): Added aliases for keybindings.
+       For example, you now have "C-c C-m C-i" in addition to "C-c C-m
+       i".
+
+2002-10-22  Mark D. Baushke  <mdb@gnu.org>
+
+       * mh-mime.el (mh-graphical-smileys-flag): Renamed from
+        mh-graphical-smileys-p.
+        (mh-display-smileys): Use it.
+        (mh-graphical-emphasis-flag): Renamed from
+        mh-graphical-emphasis-p.
+        (mh-display-emphasis): Use it. This addresses part of SF #627015.
+
+2002-10-22  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-mime.el (mh-insert-mime-security-button): A message is
+       produced if PGP decryption/verification fails. This addresses
+       SF# 627025.
+
+2002-10-21  Bill Wohler  <wohler@newt.com>
+
+       * mh-seq.el (mh-widen): Checkdoc removed the period in the error.
+       The info node (elisp) Coding Conventions says: "An error message
+       should start with a capital letter but should not end with a
+       period."
+
+       * mh-e.el, mh-utils.el (mh-tool-bar-reply-3-buttons): Moved
+       defcustom to mh-utils because I got an error about a nil value for
+       mh-tool-bar-reply-3-buttons when I fired up mh-rmail.
+
+       * mh-comp.el, mh-funcs,el, mh-mime.el, mh-pick.el: Moved (provide)
+       to the end of the file to be consistent with most other files (see
+       additional rationale in mh-e.el description below).
+
+       * mh-e.el: Had to remove eval-when-compile from the (require 'cl)
+       here too (because the remove-if generated a warning in CVS Emacs).
+       Moved (provide) to the end of the file to be consistent with most
+       other files. My guess is that this is good to keep a feature from
+       being "provided" if the file craps out while being loaded.
+
+2002-10-21  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-utils.el (mh-reply, Info-goto-node): Add autoloads to avoid
+       compiler warnings.
+       (mh-tool-bar-reply-3-buttons): Add defvar to avoid compiler
+       warning.
+
+       * mh-seq.el (mh-narrow-to-seq): Remember that a narrowing has
+       occurred.
+       (mh-valid-view-change-operation-p): New function that checks if
+       the widening or unthreading that we are about to perform is
+       allowed.
+       (mh-widen): Check if widening is applicable.
+       (mh-thread-inc, mh-thread-folder): Use delete-region instead of
+       erase-buffer. This means if the buffer is narrowed then the hidden
+       parts aren't removed. This allows widening of the folder later on.
+       (mh-toggle-threads): Maintain mh-view-ops.
+
+       * mh-e.el (mh-view-ops, mh-folder-mode): New buffer-local variable
+       that keeps track of the sequence in which threading and narrowing
+       of the folder buffer has been carried out. This is needed so that
+       narrowing followed by threading (or vice versa) behaves in a
+       reasonable manner.
+       (mh-regenerate-headers): Use delete-region instead of
+       erase-buffer.
+       (mh-make-folder-mode-line): Change mh-first-msg-num and
+       mh-last-msg-num conservatively. This might show a larger range in
+       the mode-line but allows the unthreading to not miss messages
+       present initially.
+
+2002-10-21  Bill Wohler  <wohler@newt.com>
+
+       * mh-mime.el (mh-graphical-emphasis-p): Added _underline_ to the
+       docstring, as well as the source of the strings,
+       gnus-emphasis-alist.
+       (mh-graphical-emphasis-p, mh-graphical-smileys-p): Set the default
+       to t.
+
+2002-10-21  Peter S Galbraith  <psg@debian.org>
+
+       * mh-utils.el (mh-show-mode): Invoke new toolbar.
+       (mh-show-tool-bar-map): New tool-bar for mh-show-mode, similar to
+       mh-letter-mode.
+
+2002-10-21  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-utils.el (mh-display-msg): Call the smiley display function
+       after the call to mh-show-mode. This is needed since mh-show-mode
+       kills all buffer-local variables and resets the variable that
+       controls display of graphical smileys.
+
+2002-10-21  Bill Wohler  <wohler@newt.com>
+
+       * mh-e.el (mh-folder-mime-action): Change mime to MIME in message.
+
+       * mh-comp.el (mh-mml-to-mime autoload): Ditto.
+
+2002-10-21  Mark D Baushke  <mdb@gnu.org>
+
+       * mh-mime.el (smiley-region): Use load for a non-fatal dependency
+       on the smiley library.
+
+2002-10-21  Jeffrey C Honig  <jch@honig.net>
+
+       * mh-comp.el (mh-forward): Search for a blank line as well as
+       mail-header-separator.
+       (mh-letter-mode): Search for a blank line as well as
+       mail-header-separator.
+       (mh-send-letter): The default BCC encapsulation will make a MIME
+       message unreadable.  If we are running nmh and the letter contains
+       a Bcc: and a Content-Type: field, add the -mime switch to to the
+       arguments to send.
+
+2002-10-21  Peter S Galbraith  <psg@debian.org>
+
+       * mh-utils.el: Add a mh-defun-show-buffer call to define
+       mh-show-pack-folder.
+
+2002-10-21  Peter S Galbraith  <psg@debian.org>
+
+       * mh-mime.el (mh-store-mime-parts): Simplify code a bit.
+
+       * mh-e.el (mh-help-messages): Update help message for changed
+       keybindings.
+
+2002-10-21  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-speed.el (mh-speed-invalidate-map): Invalidate
+       mh-speed-folders-cache before it is used by mh-speed-folders. Also
+       fix indentation of if statement.
+       (mh-speed-folder-size): The folder name should be extracted from
+       the speedbar buffer and not from the temp buffer has was happening
+       before.
+       (mh-speed-folder-size): Harden the function some more. It
+       shouldn't produce errors any more unless flist really didn't work.
+
+2002-10-21  Bill Wohler  <wohler@newt.com>
+
+       * mh-seq.el (mh-put-msg-in-seq): Formatting only. The reason I was
+       in there is because I was trying to use mh-put-msg-in-seq and
+       mh-msg-is-in-seq non-interactively and found that although the
+       docstring says it uses the current message by default, I got
+       errors if I passed in nil for the message. Is this expected, or is
+       this a bug? I suppose the fix would be to make the arguments
+       optional, right? This would cause the arguments in
+       mh-put-msg-in-seq to be reversed, however. Might be a backwards
+       compatibility problem.
+
+       * mh-speed.el (mh-speed-view): Convert default size to string
+       before passing it to read-string. This was done because XEmacs
+       can't handle a numeric value for the default.
+
+2002-10-20  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-utils.el (mh-show-mode-map, mh-show-folder-map) 
+       (mh-show-sequence-map, mh-show-thread-map, mh-show-extract-map) 
+       (mh-show-digest-map, mh-show-mime-map): Interactive functions
+       callable in show buffer are now prefixed with mh-show.
+
+       * mh-seq.el (mh-notate-deleted-and-refiled): Take into account the
+       changes to mh-refile-list and the removal of the 'deleted
+       sequence.
+       (mh-toggle-threads): Changing from threaded to normal view doesn't
+       try to push out message refiles and deletions to MH.
+
+       * mh-e.el (mh-rescan-folder, mh-scan-folder): Add a new optional
+       argument to both functions that prevents them from carrying out
+       pending refiles and deletes.
+       (mh-undo): Remove dead code.
+       (mh-delete-a-msg, mh-undo-msg): Get rid of the 'deleted sequence.
+       The same information is present in mh-delete-list any way.
+       (mh-refile-a-msg, mh-undo-msg, mh-process-commands): Change the
+       semantics of mh-refile-list to make it self-contained. This
+       variable now contains a list of lists. The first element of each
+       sublist is the destination folder name. The remaining elements are
+       the messages that are to be refiled to the destination folder.
+       (mh-toggle-threads, mh-folder-folder-menu): Use mh-toggle-threads
+       instead of mh-thread-folder.
+
+2002-10-20  Peter S Galbraith  <psg@debian.org>
+
+       * mh-mime.el (mh-store-mime-parts): Bug fix?  Make this command
+       work when in the show buffer, and not just in the folder buffer
+       pointing to a message.
+
+2002-10-20  Peter S Galbraith  <psg@debian.org>
+
+       * mh-seq.el (mh-narrow-to-subject-sequence): Renamed from
+       mh-narrow-to-subject-thread. 
+       (mh-subject-to-sequence): Renamed from mh-subject-thread-to-sequence.
+       (mh-delete-subject-sequence): Renamed from mh-delete-subject-thread.
+       (mh-next-unseen-subject-sequence): Renamed from
+       mh-next-unseen-subject-thread.
+       (mh-toggle-subject-thread): Removed.  :-(
+
+       * mh-e.el: s/subject-thread/subject-sequence/
+       (mh-thread-map): Bind mh-widen to "w".
+
+       * mh-utils.el: s/subject-thread/subject-sequence/
+       (mh-show-thread-map): Bind mh-widen to "w".
+       
+2002-10-20  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el (mh-thread-folder): This function is no longer
+       interactive. The mh-toggle-threads is the interactive function
+       that gets called by the user. Also the already computed values in
+       mh-first-msg-num and mh-last-msg-num are used instead of
+       recomputing the first and last message indices in the current
+       folder.
+       (mh-toggle-threads): New interactive function that toggles
+       threaded view of the folder.
+
+       * mh-utils.el (mh-letter-toggle-threads): New interactive function
+       which toggles thread view from show buffer. This function replaces
+       mh-letter-thread-folder.
+       (mh-show-folder-map): Use mh-letter-toggle-threads instead of
+       mh-letter-thread-folder.
+
+       * mh-e.el (mh-folder-map): Use mh-toggle-threads instead of
+       mh-thread-folder.
+
+2002-10-20  Bill Wohler  <wohler@newt.com>
+
+       * mh-e.el (mh-scan-folder): Formatting only.
+       (mh-goto-cur-msg): Removed call to mh-last-msg in those cases
+       where there isn't a current message. Since I've started using the
+       speedbar to read my mh-e mail, I've had to use M-< every time to
+       go to the beginning of the new messages. Very annoying! Thus, if
+       there isn't a current message, the cursor is left alone, which
+       sounds like the right thing to do anyway.
+
+2002-10-19  Peter S Galbraith  <psg@debian.org>
+
+       * mh-seq.el (mh-subject-thread-to-sequence): Bug fix.  After
+       making the 'subject sequence real, I now have to delete it globally.
+
+       * mh-seq.el (mh-toggle-subject-thread): Make toggle back to full
+       scan exactly mh-widen (removed moving to current message).
+
+       * mh-seq.el (mh-subject-thread-to-sequence): Make 'subject
+       sequence a real one, exported to MH.  This means you can, for
+       example, mh-forward it.  But it also shows up with a mark in the
+       scan output.  (Closes SF #489445).
+
+2002-10-19  Bill Wohler  <wohler@newt.com>
+
+       * mh-speed.el (mh-speed-view): If there weren't any unseen
+       messages, and you specified a string (a sequence like "last") when
+       prompted for the number of messages to display, you got an error.
+       This has been fixed.
+
+2002-10-19  Mark D Baushke  <mdb@gnu.org>
+
+       * mh-e.el (mh-last-destination-folder): Destination of last refile
+       command.
+       (mh-last-destination-write): Destination of last write command.
+       (mh-refile-msg): Use 'mh-last-destination-folder and update both it
+       and 'mh-last-destination.
+       (mh-write-msg-to-file): Use 'mh-last-destination-write and update
+       both it and 'mh-last-destination (Closes SF #580772).
+
+2002-10-19  Bill Wohler  <wohler@newt.com>
+
+       * mh-comp.el (mh-yank-from-start-of-msg): Changed default to
+       'attribution.
+       (mh-letter-mode-map): Removed commented-out keybindings as well as
+       alias "C-c C-m a (mh-compose-insertion)." Prefer "C-c C-m i."
+
+       * mh-utils.el: Removed autoload of help. It no longer appears to
+       be necessary in cvs Emacs (21.4).
+
+2002-10-18  Bill Wohler  <wohler@newt.com>
+
+       * mh-e.el (mh-execute-commands): Doc fix.
+       (mh-compat-write-file-hook): Renamed to
+       mh-write-file-functions-compat.
+       (mh-folder-mode): Add mh-write-file-functions-compat instead of
+       mh-compat-write-file-hook
+
+2002-10-18  Peter S Galbraith  <psg@debian.org>
+
+       * mh-utils.el (mh-invisible-headers-show-xface): Killed this
+       variable.
+       (mh-invisible-headers): Use 'mh-show-use-xface instead of
+       'mh-invisible-headers-show-xface to determine whether to render
+       the X-Face header line visible or not.
+
+2002-10-18  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-e.el (mh-compat-write-file-hook, mh-folder-mode): Use the new
+       macro mh-compat-write-file-hook to use write-file-functions for
+       Emacs 21.4 and local-write-file-hooks for older versions.
+
+2002-10-18  Mark D Baushke  <mdb@gnu.org>
+
+       * mh-utils.el (mh-invisible-headers): Add more anti-spam headers.
+
+2002-10-18  Peter S Galbraith  <psg@debian.org>
+
+       * mh-mime.el (mh-mml-forward-message): mml-attach-file constructs
+       a malformed composition if the description string is empty, so
+       test for that and call mml-attach-file without that argument if
+       it's an empty string (closes SF #625168).
+
+2002-10-17  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-index.el (mh-index-keymap): Removed extra binding of " ".
+       (mh-index-folder-mode-help-messages): Made the cheat sheet entry
+       of quit like the others.
+       (mh-index-search): If space was pressed in the index buffer before
+       a search result has been shown with ".", the old show buffer would
+       be scrolled. This is confusing since the index and show buffer
+       contents are contradictory. Killing the show buffer here avoids
+       this problem.
+       (mh-index-configure-windows): Refine the window configuration
+       logic. Avoid the two window view unless there is a message being
+       displayed in the show buffer.
+       (mh-index-scroll-up): Rewrite this function. The old version had a
+       bizarre problem where the show buffer wouldn't be scrolled if the
+       speedbar was present.
+       (mh-index-scroll-down): Rewritten because of similar reason as
+       above.
+
+2002-10-17  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-reply): Add an undo boundary in the undo list
+       before calling 'mh-yank-cur-msg (closes SF #623693).
+
+2002-10-17  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-e.el (mh-folder-mode): Use local-write-file-hooks instead of
+       write-file-hooks. This is required for XEmacs and also the right
+       thing according to GNU Emacs21 documentation.
+
+2002-10-16  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el (mh-thread-generate): Get threading to work correctly
+       on partial folders. The fix here disregards messages that aren't
+       already present in the buffer.
+       (mh-thread-folder): When querying scan about thread info try to
+       avoid asking about messages that aren't present in the folder
+       buffer. A more efficient fix would be to ask scan about just the
+       messages that are present instead of a range of messages. However
+       that runs the risk of sending long command lines to scan. Another
+       change was to populate the mh-scan-line-map early so that the
+       change in mh-thread-generate would work.
+       (mh-thread-generate-scan-lines): In case duplicates are present
+       make one of them the pseudo parent of the rest. This makes it look
+       prettier if there are multiple duplicates at top level.
+
+       * mh-comp.el (mh-edit-again): If a buffer in show-mode is being
+       reused then reinsert message file. This should fix SF #624283.
+
+       * mh-mime.el (mh-mm-display-part): Make sure mh-display-part is
+       always called when we want to remove the displayed MIME part.
+
+2002-10-16  Bill Wohler  <wohler@newt.com>
+
+       * mh-speed.el (mh-speed-folder-size): checkdoc fix.
+       (mh-speed-view): Tweaked output to mirror gnus verbiage. Offer
+       to view number of messages in folder rather than mh-large-folder.
+       Replaced (intern mh-unseen-seq) with mh-unseen-seq since the
+       former was generating errors.
+
+2002-10-15  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-speed.el (mh-large-folder): New customizable variable to
+       control mh-e's perception of large folders.
+       (mh-speed-folder-size): New function which computes the size of
+       folder on current line.
+       (mh-speed-view): Modified to handle large folders. If the folder
+       being clicked has unseen messages then only those messages are
+       shown. Otherwise if number of messages in folder is larger than
+       mh-large-folders then the user is asked for the number of messages
+       to be shown. If the folder satisfies neither of the above cases
+       then it is displayed in its entirety
+
+2002-10-15  Bill Wohler  <wohler@newt.com>
+
+       * mh-index.el (mh-index-keymap): Use gnus-define-keys. Sorted.
+       Noticed that there were two key bindings for SPACE...
+
+       * mh-speed.el (mh-folder-speedbar-key-map): Ditto (except for the
+       dup SPACE binding).
+
+       Completed help in other modes:
+
+       * mh-utils.el (mh-xemacs-p): Fixed doc.
+       (mh-show-mode-map, mh-show-folder-map, mh-show-sequence-map)
+       (mh-show-thread-map, mh-show-extract-map): Added binding for
+       mh-help.
+
+       * mh-pick.el (mh-search-folder): Added startup help message.
+       (mh-pick-mode-help-messages): New variable that contains help
+       messages for pick buffer.
+       (mh-pick-mode): Set local buffer variable mh-help-messages to
+       mh-pick-mode-help-messages.
+
+       * mh-index.el (mh-index-keymap): Added binding for mh-help
+       (mh-index-folder-mode-help-messages): New variable that contains
+       help messages for MH Index buffer.
+       (mh-index-folder-mode): Set local buffer variable mh-help-messages
+       to mh-index-mode-help-messages.
+
+       * mh-funcs.el (mh-help, mh-prefix-help): Call
+       substitute-command-keys on the help messages.
+
+       * mh-e.el (mh-help-messages): Added ,. Ran C-M-q.
+       (mh-help): This autoload doc is now used for more than just the
+       MH-Folder, so drop that specific text.
+
+       * mh-comp.el (mh-edit-again, mh-extract-rejected-mail)
+       (mh-forward, mh-reply, mh-send-sub): Call mh-letter-mode-message
+       to display a help message at startup.
+       (mh-letter-mode): Set local buffer variable mh-help-messages to
+       mh-letter-mode-help-messages.
+       (mh-letter-mode-help-messages): New variable with help messages
+       for the MH-Letter buffer.
+       (mh-letter-mode-message): New function that displays a startup
+       help message.
+       (mh-letter-mode-map): Added binding for mh-help. Sorted.
+
+2002-10-15  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-speed.el (mh-speedbar-selected-folder-with-unseen-messages-face)
+       (mh-speedbar-folder-face, mh-speedbar-selected-folder-face)
+       (mh-speedbar-folder-with-unseen-messages-face): New faces for mh-e
+       speedbar.
+       (mh-folder-speedbar-buttons, mh-speed-update-current-folder)
+       (mh-speed-add-buttons): Use the new faces.
+       (mh-speed-normal-face, mh-speed-bold-face): Functions to convert
+       to bold face and back to normal face.
+       (mh-speed-set-face): Removed.
+       (mh-speed-highlight): Modified to allow it to be used instead of
+       mh-speed-set-face. Also changes were made to fontify folders with
+       unread messages.
+       (mh-speed-parse-flists-output, mh-speed-parse-flists-output)
+       (mh-speed-invalidate-map): Use mh-speed-highlight instead of
+       mh-speed-set-face.
+
+2002-10-15  Bill Wohler  <wohler@newt.com>
+
+       * mh-mime.el, mh-seq.el, mh-speed.el, mh-utils.el: It appears that
+       the cl package has been restructured in 21.4 in such a way that
+       the use of eval-when-compile no longer suppresses warnings when
+       compiling so that (require 'cl) must be called directly (maybe
+       this is a bug in 21.4 ;-). Thus the autoloads of cl are no longer
+       needed. Now compiles clean under 21.4.
+
+       * mh-e.el (mh-folder-mode): The use of local-write-file-hooks is
+       deprecated in Emacs 21.4, so use add-hook write-file-functions (or
+       write-file-hook for older versions) with the LOCAL argument
+       instead. Now compiles clean under 21.4.
+
+       * mh-comp.el (mh-yank-cur-msg): Push a mark at the opposite end of
+       the included text to make it easy to jump or delete to the other
+       end of the included text.
+
+2002-10-15  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-comp.el (mh-insert-prefix-string): Remove the erroneous use
+       of set-mark and other related functions.
+
+2002-10-14  Bill Wohler  <wohler@newt.com>
+
+       * mh-comp.el (mh-yank-from-start-of-msg): Fixed documentation. It
+       isn't ignored if there is a region. It is still used for the
+       attribution.
+       (mh-yank-cur-msg): Removed unnecessary push-mark when snarfing the
+       entire message. Move the cursor to the end of the snarfed message
+       if there is a region. In this case, push a mark so user can pop to
+       the beginning of the snarfed fragment.
+       (mh-insert-prefix-string): This calls set-mark which I find
+       suspect since I found that my last user mark was deleted after
+       yanking a message. Added a comment to this effect. Will probably
+       add a bug report...
+
+       * README (Installed, Supported versions): To appear in GNU Emacs
+       21.3; supported on Emacs 21, 20.7 and XEmacs 21.
+
+       * mh-funcs.el (mh-concat-list): Deleted. Use mapconcat instead.
+       (mh-help, mh-prefix-help): Use mapconcat instead of mh-concat-list.
+       (mh-ephem-message): Use "%s" in message.
+
+       * mh-funcs.el (mh-concat-list): New function to concatenate a list
+       of strings into a single string. I would have thought elisp
+       already contained a function like this, but I couldn't find it.
+       (mh-ephem-message): New function to display a message in the
+       minibuffer ephemerally. minibuffer-message seemed like the right
+       function, but it writes to the current buffer oddly enough.
+       (mh-help, mh-prefix-help): New functions to display command
+       cheat sheets in the minibuffer (closes SF #493740). It would be
+       nice to refactor these two into a single function if possible.
+
+       * mh-e.el (mh-folder-mode-map, mh-folder-map, mh-sequence-map) 
+       (mh-thread-map, mh-extract-map): Added ? keybinding for `mh-help'
+       and `mh-prefix-help' (closes SF #493740).
+       (mh-help-messages): New variable to hold various help messages.
+       (mh-help, mh-prefix-help): Autoload from mh-funcs.el.
+
+2002-10-13  Bill Wohler  <wohler@newt.com>
+
+       * mh-index.el (mh-glimpse-directory, mh-swish-directory,
+       mh-namazu-directory): New variables that hold the name of the
+       configuration and indexing directory. All are now hidden `.'
+       directories.
+
+       * mh-e.el, mh-funcs.el, mh-index.el, mh-mime.el, mh-pick.el,
+       mh-seq.el, mh-xemacs-compat.el (Docstrings): Converted comments to
+       docstrings, reworded some docstrings to conform to Emacs
+       documentation conventions, and eliminated all checkdoc warnings
+       (except for -flag, which we'll fix after 6.2 is released).
+
+2002-10-13  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-index.el (mh-swish-next-result): Fix a bug in a corner case
+       where the lack of a trailing "/" caused the function to wrongly
+       filter out correct hits. This should fix SF #622679.
+
+2002-10-12  Steve Youngs  <youngs@xemacs.org>
+
+       * mh-utils.el (mh-xemacs-p): Simplify it, don't test for
+       'defvaralias' and don't use 'running-xemacs'.
+
+2002-10-11  Bill Wohler  <wohler@newt.com>
+
+       * mh-comp.el: (Docstrings): Eliminated all checkdoc warnings by
+       converting comments to docstrings and rewording some docstrings to
+       conform to Emacs documentation conventions.
+
+2002-10-11  Steve Youngs  <youngs@xemacs.org>
+
+       * mh-utils.el (mh-xemacs-p): New.
+       (mh-show-use-xface): Use it.
+       (mh-show-xface-function): Ditto.
+
+       * mh-e.el (toplevel): Ditto.
+       (mh-remove-xemacs-horizontal-scrollbar): Ditto.
+       (mh-folder-mode-map): Ditto.
+
+       * mh-comp.el (mh-insert-x-mailer): Ditto.
+
+       * mh-mime.el (gnus-local-map-property): Ditto.
+       (mh-mml-to-mime): Move (require 'mh-utils) to toplevel.
+       (mh-prompt-for-folder): Autoloading this not needed because
+       mh-utils is now required at toplevel.
+       (mh-show-xface): Ditto.
+       (mh-show-addr): Ditto.
+
+2002-10-11  Bill Wohler  <wohler@newt.com>
+
+       * Makefile (EMACS_HOME): Set default to $(TOP)/../emacs so it
+       would be useful.
+
+       * mh-utils.el (mh-invisible-headers): Added various spam header
+       fields.
+       (mh-path-search): Removed argument `func-p' and related code. It
+       was not documented and no one used it.
+       (Docstrings): Converted comments to docstrings, reworded some
+       docstrings to conform to Emacs documentation conventions, and
+       basically eliminated all checkdoc warnings (except for -flag
+       warnings).
+
+2002-10-11  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el (mh-thread-generate): Kill dead code.
+
+2002-10-10  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el (mh-region-to-sequence): Don't include point-max in
+       region (closes SF #621632).
+
+       * mh-utils.el (mh-defun-show-buffer): Fix call of
+       frame-first-window to work with XEmacs. Also avoid warning about
+       cur-buffe-name in XEmacs.
+       (mh-modify, mh-goto-msg): Remove dead code.
+
+       * mh-speed.el (mh-speed-toggle, mh-speed-add-buttons): Remove dead
+       code.
+
+       * mh-seq.el (mh-subject-thread-to-sequence, mh-thread-get-message,
+       mh-thread-generate, mh-thread-folder): Remove dead code.
+
+       * mh-mime.el (mh-mm-inline-message): Remove dead code.
+
+       * mh-index.el (mh-index-search): Remove dead code.
+
+       * mh-comp.el (mh-open-line): Remove dead code.
+
+       * mh-e.el (mh-folder-mode): Use the macro
+       mh-remove-xemacs-horizontal-scrollbar to avoid compiler-warning in
+       Emacs.
+       (mh-remove-xemacs-horizontal-scrollbar): New macro to avoid
+       compiler-warnings.
+
+2002-10-10  Mark D Baushke  <mdb@gnu.org>
+
+       * Makefile (EMACS_OPTIONS): New macro for command-line compile
+       options.
+       (EMACS): Allow the user to specify which emacs command to use for
+       the compile. 
+       (COMPILE_COMMAND): Combine the compile command with its options.
+       (.el.elc): Use the new $(COMPILE_COMMAND).
+
+2002-10-10  Mark D Baushke  <mdb@gnu.org>
+
+       * mh-speed.el (mh-speed-select-attached-frame): Define a new
+       compatibility macro for getting to the attached-frame.
+       (mh-speed-update-current-folder): Use it.
+
+2002-10-10  Mark D Baushke  <mdb@gnu.org>
+
+       * mh-speed.el (mh-speed-update-current-folder): Use
+       'dframe-select-attached-frame if we are in a newer speedbar
+       version that no longer supports the 'speedbar-attached-frame
+       variable.
+
+2002-10-10  Steve Youngs  <youngs@xemacs.org>
+
+       * mh-speed.el (mh-speed-update-current-folder): Use
+       'dframe-select-attached-frame' if we're in XEmacs.
+
+       * mh-e.el (mh-folder-mode): Remove the horizontal scrollbar from
+       the MH-Folder buffer if we're in XEmacs.
+
+2002-10-09  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-utils.el (mh-show-xface-function): New global that stores
+       what function needs to be called to display X-Face.
+       (mh-show-xface): Rewritten to avoid compiler warning.
+
+2002-10-09  Peter S Galbraith  <psg@debian.org>
+
+       * mh-utils.el (mh-exchange-point-and-mark-preserving-active-mark): 
+       Simplify code for all emacsen to avoid byte-compilation warnings.
+
+2002-10-09  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-mime.el (mh-mm-display-part): If a sub-part of the current
+       part is an inline image then clicking the button keeps the image
+       around. The change fixes this bug.
+
+2002-10-09  Peter S Galbraith  <psg@debian.org>
+
+       * mh-utils.el (mh-exec-cmd-output): Use new function
+       'mh-exchange-point-and-mark-preserving-active-mark instead of
+       'exchange-point-and-mark.  Fixes a bug in emacs20 and XEmacs21.
+       (mh-exchange-point-and-mark-preserving-active-mark): New function.
+       Does like 'exchange-point-and-mark but doesn't activate the mark.
+
+       * mh-comp.el (mh-letter-menu): Allow access to "Pull in All
+       Compositions" menu entries when edits have really occurred.
+       Works with "forw: -mime" mh_profile entry, so this fixes a bug.
+
+       * mh-mime.el (mh-mime-inline-part, mh-mm-display-part): Use
+       line-beginning-position and line-end-position instead of
+       point-at-bol and point-at-eol XEmacs functions.
+       * mh-xemacs-compat.el: Added line-end-position and
+       line-beginning-position compatibility aliases. 
+
+2002-10-08  Mark D. Baushke  <mdb@gnu.org>
+
+       * mh-utils.el (mh-scan-msg-format-regexp): The regexp to find
+       %number(msg).
+       (mh-scan-msg-format-string): Format to be used with the current
+       maximum width of message number for the folder in the
+       `mh-upate-scan-format' function.
+       (mh-update-scan-format): Use `mh-scan-msg-format-regexp' for greater
+       flexibility. The message number is no longer anchored to the
+       beginning of the `mh-scan-format-nmh' or `mh-scan-format-mh' format
+       strings. The `mh-update-scan-format' allows for using zero-filled
+       message numbers.
+       
+2002-10-08  Peter S Galbraith  <psg@debian.org>
+
+       * mh-e.el (mh-folder-folder-menu): Add entry for "Thread Folder".
+
+2002-10-07  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el (mh-thread-generate): Use mh-progs to get path to mh
+       executables.
+
+       * mh-speed.el (mh-speed-flists): Use mh-progs to get path to mh
+       executables right.
+       (mh-speed-folders-actual): Same as above.
+
+2002-10-05  Steve Youngs  <youngs@xemacs.org>
+
+       * mh-comp.el (mh-yank-from-start-of-msg): Make default setting 't'
+       a const.
+
+       * mh-xemacs-compat.el (match-string-no-properties): Rewrite as a
+       defsubst using 'buffer-substring-no-properties' so we don't grab
+       any extents.
+       (rfc822-goto-eoh): Removed.  This exists in the XEmacs mail-lib
+       package. 
+       (mail-header-end): Ditto.
+       (mail-mode-fill-paragraph): Ditto.
+
+2002-10-05  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-speed.el (mh-speed-invalidate-map): When called interactively
+       the function will clear mh-speed-folders-cache.
+
+2002-10-02  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-mime.el (mh-insert-mime-button): Rewrite without using
+       replace-match.
+
+2002-10-01  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-mime.el (mh-file-mime-type-substitutions): Reorder code to
+       avoid compiler warning.
+
+2002-10-01  Bill Wohler  <wohler@newt.com>
+
+       * Makefile (MH-E-ETC): Moved ChangeLog into MH-E-ETC-ETC since it
+       shouldn't get installed in Emacs.
+       (install-emacs): Install MH-E-IMG into Emacs' lisp/toolbar and
+       MH-E-IMG2 into Emacs' lisp/mail.
+
+2002-10-01  Peter S Galbraith  <psg@debian.org>
+
+       * mh-e.el (mh-tool-bar-reply-3-buttons): New customization.
+       Non-nil means use three buttons for reply commands in tool-bar.
+       If you have room on your tool-bar because you are using a large
+       font, you may set this variable to expand the single reply
+       button into three buttons that won't lead to minibuffer prompt
+       about who to reply to.
+        (mh-folder-tool-bar-map): Use mh-tool-bar-reply-3-buttons to
+       decide how many buttons to use for replying.
+
+       * mh-mime.el (mh-file-mime-type-substitutions) 
+       (mh-file-mime-type-substitute):  Fix typos and doc strings.
+
+2002-09-30  Peter S Galbraith  <psg@debian.org>
+
+       * mh-mime.el (mh-file-mime-type): Run Content-Type string returned
+       by file command through mh-file-mime-type-substitute (see below).
+       (mh-file-mime-type-substitute): Possibly change Content-Type
+       string using mh-file-mime-type-substitutions variable.  This is
+       mostly because all MS-Office file are seen as application/msword
+       by the file command.
+       (mh-file-mime-type-substitutions): New variable.  Defines
+       substitutions to make for Content-Type returned from file command.
+
+2002-09-27  Bill Wohler  <wohler@newt.com>
+
+       * README: Moved Id to end of file since it broke outline mode at
+       the beginning.
+
+       * import-emacs (release): Renamed "mainline" tag to
+       "emacs-mainline" to correspond with existing CVS tag.
+       (EMACS_HOME): Fixed typo in docstring.
+
+       * mh-utils.el (mh-folder-name-p, mh-defun-show-buffer): Lowercase
+       NIL and T in docstring.
+       (mh-update-scan-format): Fixed typo.
+
+       * mh-comp.el, mh-e.el, mh-pick.el, mh-utils.el: Updated from CVS
+       Emacs. The only new thing appears to be to downcase NIL and T in
+       the documentation.
+
+2002-09-26  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el (mh-thread-generate): The threading code will now be
+       more resistant to corruption of messages. Before the change any
+       corruption of message x would cause all messages with indices
+       higher than x to be neglected when threading!
+
+2002-09-23  Peter S Galbraith  <psg@debian.org>
+
+       * mh-mime.el (mh-store-mime-parts): Don't store value into
+       user-customizable variable mh-store-mime-parts-default-directory
+       and use  mh-store-mime-parts-directory instead.
+
+2002-09-20  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el (mh-thread-prune-subject): Use regular expressions to
+       make the subject pruning behave the way it is specified in the
+       imap-thread RFC.
+
+       * mh-speed.el (mh-speed-folders-actual): Don't use pop when we
+       are not going to use the first element. This avoids a compilation
+       warning with cvs emacs.
+
+2002-09-19  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-utils.el (mh-display-msg): Put the call to
+       set-buffer-modified after mh-show-mode. This is needed for CVS
+       emacs since calling mh-show-mode marks the buffer as modified if
+       font-lock is on.
+
+2002-09-17  Peter S Galbraith  <psg@debian.org>
+
+       * mh-mime.el (mh-store-mime-parts-default-directory): Renamed from
+       mh-store-mime-parts-directory
+       (mh-store-mime-parts-directory): Renamed from
+       mh-store-mime-parts-directory-default.
+
+2002-09-16  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mail-citation-hook): Doc tweaks suggested by Bill.
+
+2002-09-08  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-e.el (autoloads): Reorder autoload of mh-reply to avoid
+       compiler warning.
+
+2002-09-03  Peter S Galbraith  <psg@debian.org>
+
+       * mh-mime.el (mh-store-mime-parts-directory): New defcustom.
+       Default directory to use for mh-store-mime-parts.
+       (mh-store-mime-parts): New Command.  Store the MIME parts of the
+        current message.
+       (mh-store-mime-parts-directory-default): New internal working
+       variable.  Default to use for mh-store-mime-parts-directory, set
+       from last use.
+
+       * mh-e.el (mh-folder-seq-tool-bar-map): Add mh-store-mime-parts to
+       toolbar.
+
+
+2002-08-22  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el (mh-thread-generate-scan-lines): In threaded view,
+       complete scan lines are printed for all messages (not just the
+       ones at the top of a thread).
+
+       * mh-index.el (mh-index-insert-scan): Replace use of kill-line
+       since that pollutes the kill-ring.
+
+       * mh-comp.el (autoloads): Add autoloads for search and subseq to
+       get rid of compiler warnings.
+
+2002-08-19  Peter S Galbraith  <psg@debian.org>
+
+       * reply-to.xpm, reply-to.pbm, reply-from.xpm, reply-from.pbm,
+       reply-all.xpm, reply-all.bpm:  New icons for various reply methods.
+       * mh-e.el (mh-folder-tool-bar-map): Split reply button into three
+       that won't prompt for "from", "to" and "all".
+       * mh-comp.el (mh-reply): Put variable reply-to in the interactive
+       list since it's specified on the command line for the new toolbar.
+
+       * mh-comp.el (mail-citation-hook): Tweak docs concerning
+       historical usage for supercite.
+       (mh-yank-from-start-of-msg): Add settings 'supercite and
+       'autosupercite.  Rename 'automatic to 'autoattrib.
+       (mh-insert-prefix-string): Invoke sc-cite-original if
+       mh-yank-from-start-of-msg is et to 'supercite or 'autosupercite.
+
+2002-08-17  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-comp.el (compilation-fix): Reorder defvars to avoid warnings
+       during compilation.
+
+2002-08-17  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-yank-from-start-of-msg): Add 'automatic choice.
+       Do as for `attribution' automatically when show buffer matches the
+       message being replied-to.
+       (mh-reply): Call 'mh-yank-cur-msg when mh-yank-from-start-of-msg
+       is set to 'automatic and show buffer matches message number being
+       replied-to.
+       (mh-show-buffer-message-number): New helper function to get the
+       message number of the current show-buffer.
+       (mh-yank-cur-msg): Handle 'automatic choice the same as 'attribution.
+       (mh-yank-cur-msg): Bug fix.  It would bail on error if
+       mh-show-buffer didn't exists.
+
+2002-08-16  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-insert-x-mailer): It wrongly assumed that Emacs
+       was used even when XEmacs was used.  Fixed so X-Mailer header is
+       more exact about what we are using.
+
+2002-08-15  Peter S Galbraith  <psg@debian.org>
+
+       * mh-e.el (mh-version): Change CVS version number to 6.1+cvs just
+       so X-Mailer header is more exact about what we are using.
+
+       * mh-mime.el (mh-mhn-compose-insertion, mh-mhn-compose-anon-ftp,
+       mh-mml-attach-file): 
+       "Jeffrey P. Morgenthaler" <jpmorgen@congee.gsfc.nasa.go> reported
+       that "require" in emacs 20.3 doesn't handle 3 arguments.  We
+       use "load" at the top of file elsewhere anyway to handle such a
+       case of non-essential loading, so switch to that here.
+
+2002-08-06  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-funcs.el (autoload): Add autoload for mh-speed-invalidate-map.
+
+       * mh-speed.el (mh-speed-add-folder): New function to make the
+       speedbar aware of new folders when they are created by mh-e.
+
+       * mh-utils.el (mh-prompt-for-folder): Use mh-speed-add-folder to
+       tell speedbar that new folder is being created. Also use folder
+       instead of mkdir to create new folders.
+
+2002-08-01  Peter S Galbraith  <psg@debian.org>
+
+       * mh-utils.el (mh-decode-quoted-printable): Conditionalize the
+       limit of search for quoted-printable.  If we're using mm-decode
+       for MIME decoding, it's possible that `mimedecode' could mess our
+       message, so we only run a full search for quoted-printable parts
+       when not using gnus' mm-decode.  When using mm-decode, mimedecode
+       can still help by handling the case of the whole message being
+       quoted-printable as opposed to only a part.
+
+2002-07-31  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-compose-insertion): Moved from mh-mime.el because
+       the pulldown menu were broken in XEmacs21 from this variable being
+       undefined.
+
+2002-07-28  Mark D. Baushke  <mdb@gnu.org>
+
+       * mh-utils.el (mh-show-mode): Use the default paragraph-start
+       rather than the inherited text-mode value.
+
+2002-07-28  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el (mh-thread-duplicates): New hash table to track
+       duplicate messages.
+       (mh-thread-get-message): Remove debug code.
+       (mh-thread-canonicalize-id): Modified to handle messages without
+       message-id header. Such messages are given distinct copies of the
+       empty string as message-id.
+       (mh-thread-generate): The function was inadvertently rebuilding
+       the thread tree when message refiles and message deletes are
+       processed. The change here fixes that. Also code has been added to
+       keep track of duplicate message-id's.
+       (mh-thread-generate-scan-lines): Modified to print scan lines for
+       duplicate messages (that is messages with the same message-id).
+       (mh-thread-forget-message): Modified to maintain
+       mh-thread-duplicates.
+
+2002-07-22  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-speed.el (mh-speed-parse-flists-output): Use delete-region
+       instead of kill-region. Otherwise the kill ring gets polluted.
+
+2002-07-16  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el (mh-thread-update-scan-line-map): New function to
+       refresh the stale scan lines.
+       (mh-thread-inc): Update old scan lines when mh-thread-inc is
+       called. Otherwise notations for deleted and refiled messages get
+       lost and the folder display gets out of sync with real mh-e state.
+
+       * mh-mime.el (mh-mm-display-part): Call Gnus citation highlight
+       code when text part is displayed. Otherwise buttonized text parts
+       aren't correctly fontified when they are displayed.
+
+2002-07-15  Mark D. Baushke  <mdb@gnu.org>
+
+       * mh-utils.el (mm-decode): Use load for the Non-fatal depencency
+       on the mm-decode library. 
+       * mh-mime.el (mm-decode, mm-uu, mm-view): Use load for the
+       Non-fatal depencencies on the mm-decode, mm-uu and mm-view
+       libraries.
+
+2002-07-15  Satyaki Das <satyaki@theforce.stanford.edu>
+
+       * mh-utils.el (mh-require, mh-autoload): Remove these macros.
+       (mh-decode-mime): Initialized to t iff the mm-decode library is
+       present in the load-path.
+       * mh-mime.el (mh-require): Don't use it anymore.
+
+2002-07-15  Mark D Baushke  <mdb@gnu.org>
+
+       * mh-utils.el (mh-update-scan-format): Rewrite for compatibility
+       with Xemacs as replace-match appears not to have identical
+       functionality with FSF emacs.
+       (mh-scan-msg-format-regexp): Deleted. This regexp is now hardcoded
+       into the mh-update-scan-format function.
+
+2002-07-12  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el: Add message threading code.
+
+       * mh-utils.el (mh-letter-thread-folder): New interactive function
+       that allows switching to threaded view from show buffer.
+       (mh-show-folder-map): Bound "F t" to call mh-letter-thread-folder.
+       (mh-goto-msg): Replace the function to not assume that messages
+       are sorted in the folder buffer.
+
+       * mh-e.el (mh-folder-threaded-view-p): New buffer local variable
+       in the folder buffer that records whether threaded view is being
+       used currently.
+       (mh-scan-subject-regexp, mh-scan-format-regexp): Get font lock
+       working for threaded view as well.
+       (mh-regenerate-headers): Reset mh-folder-threaded-view-p to nil.
+       (mh-get-new-mail, mh-process-commands): Do incremental threading
+       if folder is in threaded view.
+       (mh-delete-scan-msgs): Update thread tables if folder is in
+       threaded view.
+       (mh-folder-map): Add "F t" as key binding for mh-thread-folder
+
+       * mh-comp.el (mh-yank-cur-msg): Bug fix. mh-show-buffer is only
+       has a meaningful value in the folder buffer.
+
+2002-07-11  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-yank-cur-msg): Run only if mh-show-buffer
+       actually exists (otherwise a back-traceable error occurred).
+
+       * mh-utils.el (mh-find-progs): Run PATH search only when mh-progs,
+       mh-lib and mh-lib-progs are not all already set.  This allows the
+       user to set them using a simple setq prior to loading mh-e.  This
+       is useful for implementation of mh-e on win32.  Note that many
+       commands still call mh-find-path which also parses the mh_profile
+       file (that may still fail on win32), so this is still done often.
+       But it lets us change the mh_profile file and have mh-e see the
+       changed file without exiting emacs and starting over so I left
+       that in.
+
+2002-07-04  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-index.el (mh-index-show): Fixed a bug in mh-index-show which
+       caused it to lose track of point when called from show buffer.
+
+2002-07-04  Mark D. Baushke  <mdb@gnu.org>
+
+       * Makefile: Add more information and common methods to allow both
+       GNU make and Berkeley make to properly build everything.
+
+2002-07-04  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-mime.el (mh-push-button): Bug fix for mime display with
+       mouse. Select show window before executing the mime display
+       functions.
+
+2002-07-01  Mark D. Baushke  <mdb@gnu.org>
+
+       * Makefile: Use a conditional variable assignment operator rather
+       than ifndef to let Makefile be used by both GNU make and Berkeley
+       make (or similar versions of make). This does not help Solaris
+       /usr/ccs/bin/make, but Solaris make has problems with the ifndef
+       syntax too.
+
+2002-07-01  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-index.el (mh-index-search): Check for mh-decode-mime before
+       adding mh-mime-cleanup to kill-buffer-hook.
+
+       * mh-mime.el (mm-destroy-parts): Add definition for old emacs.
+
+2002-06-30  Mark D Baushke  <mdb@gnu.org>
+
+       * mh-utils.el (mh-update-scan-format): Add documentation string.
+       (mh-scan-msg-format-regexp): Update the regexp to find %(msg).
+       (mh-set-cmd-note): When mh-scan-format-file is not t, dynamic
+       update of mh-cmd-note is wrong. Do not assume that
+       mh-scan-format-nmh and mh-scan-format-mh can be kept in lock-step
+       with mh-cmd-note via mh-set-cmd-note. The mh-scan-format function
+       is now where the updated mh-cmd-note value is put into the scan
+       format.
+       
+       * mh-e.el (mh-generate-new-cmd-note): Add documentation string.
+       (mh-scan-format): Use mh-update-scan-format to get updated copies
+       of mh-scan-format-nmh and mh-scan-format-mh to avoid format skew.
+       (mh-get-new-mail): Do not try to adapt mh-cmd-note unless
+       mh-scan-format-file is equal to t.
+       (mh-scan-format-nmh): No longer buffer local.
+       (mh-scan-format-mh): No longer buffer local.
+
+2002-06-30  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-index.el (mh-index-max-msg-index): New variable to keep track
+       of max message index among search results. If mh-adaptive-cmd-note
+       is non-nil this is used to compute the width of the index field.
+       (mh-index-search): Keep track of max index seen while parsing the
+       search results and set it if mh-adaptive-cmd-note is non-nil.
+       (mh-index-find-max-width): New function to find the required width
+       of the message index field.
+       (mh-defun-index): Binding buffer local variables is bad, so don't
+       do that.
+       (mh-index-show): New argument display-headers-p decides whether
+       the message is displayed in raw form or not.
+       (mh-index-header-display): New interactive function bound to ","
+       which shows the message in raw form.
+       (mh-index-keymap): Add appropriate bindings for backtab and ",".
+       (read-from-string): Add ignore-errors around it so that the code
+       doesn't die when it gets unexpected input.
+
+2002-06-29  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-index.el (mh-count-windows): This function works around the
+       lack of the window-list builtin function in emacs20.
+
+2002-06-29  Mark D Baushke  <mdb@gnu.org>
+
+       * mh-utils.el (mh-message-number-width): New function to scan
+       the last message of a folder and return its width.
+       (mh-adaptive-cmd-note): New variable, if Non-nil indicates that
+       mh-set-cmd-note should be called with the message width for the
+       folder.
+       (mh-cmd-note): Update documentation.
+       (mh-update-scan-format): Helper function for updating the
+       mh-scan-format-nmh and mh-scan-format-mh variables.
+       (mh-scan-msg-overflow-regexp): New variable to help find problem
+       messages after an inc.
+       (mh-scan-msg-format-regexp): New variable to find the old message
+       width in one of the mh-scan-format-nmh or mh-scan-format-mh
+       variables.
+       (mh-set-default-cmd-note): Replaced by mh-set-cmd-note.
+       (mh-set-cmd-note): New function to replace update mh-cmd-note
+       value.
+       
+       * mh-e.el (mh-regenerate-headers): If mh-adaptive-cmd-note is
+       non-nil, use mh-set-cmd-note on empty folder buffers.
+       (mh-make-folder): Ditto.
+       (mh-generate-new-cmd-note): New function to adapt the mh-cmd-note
+       to fit when mh-get-new-mail gets message number truncation.
+       (mh-get-new-mail): Maybe use mh-generate-new-cmd-note if
+       mh-adaptive-cmd-note is Non-nil.
+
+2002-06-29  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-speed.el (mh-speed-view): The display gets confused if the
+       cursor is in the show buffer when mh-speed-view is called. This is
+       a fix for that.
+
+2002-06-27  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-e.el (mh-next-undeleted-msg): Get rid of optional arg
+       reverse-p. If there are no more undeleted messages the the point
+       remains at its original position and a message is produced (closes
+       SF #494304).
+       (mh-previous-undeleted-msg): Change similar to
+       mh-next-undeleted-msg.
+       (mh-next-msg, mh-refile-msg, mh-delete-msg): Backout previous
+       change.
+       (mh-folder-map): Bind "S-tab" and "K S-tab" to mh-prev-button.
+
+       * mh-utils.el (mh-show-mode-map): Bind "S-tab" and "K S-tab" to
+       mh-letter-prev-button.
+
+       * mh-mime.el (gnus-newsgroup-name): Initialize it to nil, so that
+       mm-uu-dissect doesn't cause error.
+
+2002-06-27  Mark D Baushke  <mdb@gnu.org>
+
+       * mh-utils.el (mh-cmd-note): Make buffer-local. Changes to this
+       variable should be made via the new mh-set-default-cmd-note
+       function.
+       (mh-set-default-cmd-note): New function to setq-default the
+       mh-cmd-note, mh-scan-format-mh and mh-scan-format-nmh values to
+       related values.
+
+       * mh-e.el (mh-scan-format-mh): Make buffer-local.
+       (mh-scan-format-nmh): Ditto.
+       (mh-scan-good-msg-regexp): Use a more general regular expression
+       so that the width of message numbers, mh-cmd-note, may vary.
+       (mh-scan-deleted-msg-regexp): Ditto.
+       (mh-scan-refiled-msg-regexp): Ditto.
+       (mh-scan-cur-msg-number-regexp): Ditto.
+       (mh-scan-cur-msg-regexp): Ditto.
+       (mh-scan-subject-regexp): Ditto.
+
+2002-06-26  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-speed.el: Speedbar support code.
+
+       * Makefile: Add mh-speed.el to MH-E-SRC.
+
+       * mh-utils.el (mh-prompt-for-folder): Add speedbar hook if
+       speedbar is being used.
+
+       * mh-funcs.el (mh-kill-folder): Add speedbar hook if speedbar is
+       being used.
+
+       * mh-e.el (speedbar-autoloads): Autoload speedbar initialization
+       functions so that speedbar can find them.
+
+2002-06-25  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-index.el (mh-grep-execute-search, mh-grep-next-result): Allow
+       grep to be used to search mail.
+       (mh-index-font-lock-keywords): Modified to avoid bug when using
+       lazy font-lock.
+
+       * mh-e.el (mh-delete-msg, mh-refile-msg): Modify so that if no
+       undeleted (or unrefiled) message exists in the current movement
+       direction then try to find an undeleted (or unrefiled) message in
+       the opposite direction instead.
+       (mh-next-undeleted-msg): Added a new optional argument. If non-nil
+       search for undeleted message backwards if none exists in the
+       forward direction.
+       (mh-previous-undeleted-msg): Added an optional argument. If
+       non-nil search for undeleted message in the forward direction if
+       none exists in the backward direction.
+       (mh-next-msg): Optional argument to change direction if undeleted
+       messages are not found in the current direction.
+
+       * mh-index.el (mh-cmd-note): Use mh-cmd-note instead of hardcoding
+       the index field size to 4.
+
+       * mh-utils.el (mh-show-addr, mh-show-xface): New functions added
+       to do xface display and goto-addr interface to allow reuse by the
+       mime display code.
+       (mh-show-mode): Use mh-show-addr and mh-show-xface. Only add
+       mh-mime-cleanup to kill-buffer-hook if mime decoding is enabled.
+       (mh-modify): Use mh-letter-mode instead of mh-show-mode when
+       editing messages.
+
+       * mh-mime.el (mh-mm-inline-message): Arrange for xface and
+       highlighting to work in forwarded messages.
+
+2002-06-23  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-yank-from-start-of-msg): Add 'attribution' option
+       to add an attribution line in mh-yank-cur-msg.
+       (mh-extract-from-attribution-verb): Verb to use for attribution
+       when a message is yanked by mh-yank-cur-msg.  Provides a method
+       for setting a different language.
+       (mh-yank-cur-msg): Add support for 'attribution' option.
+       (mh-extract-from-attribution): Function to get the attribution
+       line, or the sender from the From: line in the current show buffer.
+
+2002-06-20  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-index.el (mh-index-show): mh-display-msg was not being called
+       in the show buffer. This causes weird results on some mime messages.
+
+       * mh-mime.el (gnus-newsgroup-charset): Defvar to avoid error in
+       pgp messages if gnus hasn't been used yet.
+
+       * mh-comp.el (mh-letter-mode-map): Typo fix.
+
+2002-06-19  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-mime.el (mh-mml-secure-message-encrypt-pgpmime): Typo fix.
+       (compiler-warnings): Add autoloads to remove compiler warnings.
+
+       * mh-index.el (autoload-fixes): Fix autoload forms.
+
+2002-06-18  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-comp.el (mh-letter-mode-map): Change binding of "\C-c\C-ma"
+       to mh-compose-insertion. Remove duplicate binding for "C-c\C-mf".
+       (compiler-warnings): Add defvar to remove compiler-warning.
+
+2002-06-18  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-letter-menu): Conditionalize GPG function on
+       mh-gnus-pgp-support-p.
+
+       * mh-mime.el (mh-mml-forward-message): s/subseq/substring/.
+       (mh-compose-forward): cut&paste typo: s/messages/message/.
+       (mml-minibuffer-read-file): autoload added.
+       (mml-minibuffer-read-description): autoload added.
+       (mml-insert-empty-tag): autoload added.
+       (mh-mml-secure-message-sign-pgpmime): Check mh-gnus-pgp-support-p.
+       (mh-mml-secure-message-encrypt-pgpmime): Check mh-gnus-pgp-support-p.
+
+2002-06-17  Peter S Galbraith  <psg@debian.org>
+
+       * mh-utils.el (mh-show-use-xface): Check for availability of
+       `uncompface' executable on system.
+
+       * mh-mime.el (mh-compose-forward): New front end for both
+       mh-mml-forward-message and mh-mhn-compose-forw.
+       (mh-compose-insertion): New front end for both mh-mml-attach-file
+       and mh-mhn-compose-insertion.
+       (mh-mml-to-mime): New function. Compose mime message from mml
+       directives.
+       (mh-mml-forward-message): New function. Forward a message as
+       attachment.
+       (mh-mml-attach-file): New function.  Attach a file to the outgoing
+       MIME message.
+       (mh-mml-compose-insert-p): New variable. Buffer-local variable to
+       know whether MIME insertion was done.  Triggers an automatic call
+       to `mh-mml-to-mime' in `mh-send-letter'.
+       (mh-mml-secure-message-sign-pgpmime): New function.
+       Front end to mml-secure-message-sign-pgpmime.
+       (mh-mml-secure-message-encrypt-pgpmime):  New function.
+       Front end to mml-secure-message-encrypt-pgpmime.
+
+       * mh-comp.el (mh-send-letter): automatic call to `mh-mml-to-mime'
+       if mh-mml-compose-insert-p is set.
+       (mh-letter-mode-map): Add keys for new mh-mime functions above.
+       * mh-comp.el:  Added autoloads for new mh-mime functions above.
+
+2002-06-17  Peter S Galbraith  <psg@debian.org>
+
+       * mh-utils.el (mh-show-use-xface): new defcustom to determine
+       whether to call external package x-face to display the x-face.
+       (mh-invisible-headers-show-xface): variable now defaults to value
+       of mh-show-use-xface.
+       (mh-show-mode): When mh-show-use-xface is t, invoke
+       external package x-face to display the x-face.  
+
+2002-06-15  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-e.el (mh-prev-button): New interactive function which moves
+       point to the previous mime button in the show buffer.
+       (mh-folder-mode-map): Bind M-TAB and K M-TAB to mh-prev-button.
+
+       * mh-utils.el (mh-show-mode-map): Bind M-TAB and K M-TAB to call
+       mh-letter-prev-button (which is analogous to mh-prev-button).
+       (mh-gnus-pgp-support-p): New global variable to replace the
+       variable mh-recent-gnus-p. The name better describes what it is
+       used for.
+
+       * mh-mime.el (mh-mime-display-part, mh-mime-display-single): Use
+       mh-gnus-pgp-support-p instead of mh-recent-gnus-p.
+
+2002-06-12  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-mime.el (mh-display-buttons-for-inline-parts): New
+       customizable variable. When non-nil inline parts have are
+       displayed with a button (that is initially expanded).
+       (mh-maybe-insert-newline): The function has been removed.
+       (mh-mime-display-single): Add code to display buttons for inline
+       parts. Reduce the insertion of extra newlines between inline parts
+       and also for pgp signature parts.
+       (mh-mm-display-part): The function has been rewritten and cleaned
+       up. There was a bug which could change the show buffer if the user
+       pressed C-g while a mime part was being displayed has been fixed.
+       (mh-press-button, mh-push-button): Use unwind-protect to make sure
+       that set-buffer-modified-p is always called after mime display.
+       (mh-mime-inline-part): The behavior of the function has been
+       changed so that it toggles the display of the raw bytes.
+       (mh-mime-display-security): Remove the display of too many
+       newlines.
+       (documentation): Remove most check-doc warnings.
+
+       * mh-comp.el (mh-filter-out-non-text): Updated since whitespace
+       added around mime buttons have changed.
+
+2002-06-10  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-index.el (mh-index-last-search, mh-index-search): The default
+       prompt in mh-index-search has been removed since currently there
+       is no good way of reading "+" with mh-prompt-for-folder.
+       (mh-index-folder-mode, mh-index-show-mode): New major modes
+       derived from mh-folder-mode and mh-show-mode respectively. They
+       use a restricted keymap compared to the parent modes.
+       (mh-index-folder-face): New customizable face to display folder
+       names in the index buffer.
+       (documentation): Change two spaces after period back to one.
+
+2002-06-08  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-e.el (mh-folder-toggle-mime-part): New interactive function
+       to control mime display from folder buffer.
+       (mh-folder-inline-mime-part): New interactive function to inline
+       raw mime part from folder buffer.
+       (mh-folder-save-mime-part): New interactive function to save mime
+       part from folder buffer.
+       (mh-folder-mode-map): Add keybindings for "K v", "K o", "K i" and
+       "K \t" to mh-folder-mode-map.
+       (mh-goto-next-button): Modified to allow searching for next button
+       that satisfies some condition.
+       (mh-folder-mime-action): Support function for
+       mh-folder-save-mime-part, mh-folder-inline-mime-part and
+       mh-folder-toggle-mime-part.
+
+       * mh-utils.el (mh-show-mode-map): Modify keymap to add appropriate
+       bindings for "K v", "K o", "K i" and "K \t".
+
+       * mh-index.el (documentation): Fix docs according to checkdoc
+       format.
+
+2002-06-07  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el, mh-funcs.el (Compiler): Remove (require 'view) and
+       instead add defvar for view-exit-action.
+
+2002-06-06  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-comp.el (mh-insert-x-face): If transient-mark-mode is enabled
+       the call to mark returns error. So avoid using mark.
+
+       * mh-index.el: Support for new interactive function
+       mh-index-search.
+
+       * mh-e.el (mh-next-button, mh-goto-next-button): Refactor
+       mh-next-button so that the code may be reused by mh-index.el.
+       (mh-folder-map): Add key "F i" to call mh-index-search.
+
+       * mh-utils.el (mh-recent-gnus-p): Fix documentation.
+       (mh-msg-folder, mh-display-msg): The new function mh-msg-folder
+       maps a MH folder name to the buffer displaying it. In normal
+       operation the two names are identical but they are different in a
+       folder buffer generated by index search. Minor modification to
+       mh-display-msg to use mh-msg-folder to enable mh-index-search to
+       reuse code.
+       (mh-show-mode-map): Add key "F i" to call mh-index-search.
+
+       * Makefile: Add mh-index.el
+
+2002-06-05  Peter S Galbraith  <psg@debian.org>
+
+       * mh-e.el (mh-folder-message-menu): Add an entry for mh-modify.
+
+2002-05-31  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-utils.el (mh-decode-quoted-printable): Only decode if the
+       whole message is encoded. So restrict the search for the
+       content-transfer-encoding header to the headers of the message
+       itself.
+
+       * mh-mime.el (mh-mime-display-alternative): Make sure that point
+       is moved after mm-display-part is called.
+
+2002-05-29  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-mime.el (mh-mime-display-single): Fix the logic that
+       determines when an attachment is buttonized. For inline parts that
+       can't be displayed a button is now created.
+
+2002-05-29  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-e.el (mh-regenerate-headers): Fix an error in which the
+       mh-mode-line-annotation was not being set properly.
+
+       * mh-mime.el, mh-utils.el (compilation): Macros mh-require and
+       mh-autoload are used to make sure that emacs20 doesn't croak when
+       it tries to load non-existent mm-* files.
+       (mh-decode-mime): Make it default to nil for Emacs major version
+       below 21.
+
+2002-05-28  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-e.el (mh-regenerate-headers): Generalize the function to
+       handle multiple ranges.
+
+2002-05-25  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * compilation: Reduce use of eval-when-compile so that load-path
+       is not changed if lisp files are loaded without compilation. Small
+       changes were made to Makefile, mh-comp.el mh-e.el, mh-funcs.el,
+       mh-seq.el, mh-utils.el
+
+       * mh-e.el (mh-next-button, mh-folder-mode-map): New interactive
+       function to advance point to next MIME button. It is bound to TAB.
+
+       * mh-utils.el (mh-letter-next-button, mh-show-mode-map): New
+       interactive function mh-letter-next-button has been added to
+       advance point to the next MIME button. It is bound to TAB.
+
+       * mh-mime.el (comments): Added some comments.
+
+2002-05-24  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-mime.el (compilation): Replace (eval-when-compile ...) by
+       (eval-when (compile) ...) to remove a bug when mh-e is loaded
+       without compilation.
+
+2002-05-23  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-comp.el (compilation): Some code was rearranged to avoid
+       compiler warnings.
+
+       * mh-e.el (compilation): Code rearrangement and extra autoloads to
+       remove compiler warnings
+       (mh-quit): Add call to mh-destroy-postponed-handles to remove
+       handles that are associated with external viewers. Also fixed a
+       bug that I accidentally introduced by adding an extra line when
+       cut and pasting my changes.
+
+       * mh-func.el (compilation): Code rearrangement to remove compiler
+       warnings.
+
+       * mh-mime.el (compilation): Code rearrangement to remove compiler
+       warnings.
+       (mh-defun-compat): New macro to define to useful functions that
+       aren't present present in old Gnus.
+       (mh-destroy-postponed-handles): New function to cleanup handles
+       that are associated with external viewers.
+       (mh-handle-set-external-undisplayer): New function to replace
+       mm-handle-set-external-undisplayer. It associates handles for
+       external viewers with the folder buffer. These are released when
+       the user quits the folder.
+       (mh-mime-display, mh-press-button, mh-push-button): Hook in
+       mh-handle-set-external-undisplayer.
+       (mh-maybe-insert-newline): New function to avoid inserting too
+       many newlines between mime parts.
+       (mh-mm-display-part): Workaround for Gnus bug which causes new
+       lines to be inserted when images are shown inline.
+       (mh-mime-display-security): Cut down on newlines inserted.
+
+       * mh-pick.el (compilation): Code rearrangement to remove compiler
+       warnings.
+
+       * mh-seq.el (compilation): Code rearrangement to remove compiler
+       warnings.
+       (comments): Remove @SD from comments.
+
+       * mh-utils.el (compilation): Slight code rearrangement.
+       (mh-defun-show-buffer): Fix documentation so that the first line
+       is not too long as was the case earlier. Use
+       mh-previous-window-config to remember where the cursor should
+       return functions like mh-reply.
+       (mh-display-msg): Initialize handles data-structure for the folder
+       buffer so that postponed handles can be added to it.
+       (mh-add-msgs-to-seq): Always keep messages in the sequences
+       sorted. This removes some unexpected behavior when working with
+       sequences that go out of sync with the corresponding MH sequences.
+       (mh-canonicalize-sequence): New function to sort and remove
+       duplicates from mh-e sequence.
+
+2002-05-21  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-utils.el (require): Load mm-decode.el here so that
+       mm-inline-media-tests is properly initialized.
+
+       * mh-comp.el (mh-yank-cur-msg): Don't try to remove the displayed
+       mime parts when yanking the message. This also fixes the problem
+       of regions not being respected during the yank.
+
+2002-05-20  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-utils.el (compiler-warnings): Some code was rearranged to
+       remove all compiler warnings.
+       (mh-decode-mime): New defcustom to control whether
+       mime attachments are shown using Gnus.
+       (mh-globals-hash): New global variable which maps a given buffer
+       to the corresponding mime data structures.
+       (mh-recent-gnus-p): New global variable which checks if Gnus is
+       recent enough so that PGP/GPG encrypted messages can be handled.
+       (mh-mm-inline-media-tests): Tests to determine whether a mime part
+       can be shown inline.
+       (mh-gnus-article-highlight-citation): Shadow the Gnus function,
+       gnus-article-add-button before gnus-article-highlight-citation is
+       called. This prevents the insertion of useless buttons in the
+       message.
+       (mh-show-mode): Don't set font-lock-support-mode to nil. Modify
+       kill-buffer-hook to call mh-mime-cleanup.
+       (mh-modify): Only the edit buffer is shown.
+       (mh-display-msg): Add call to mh-mime-display, mh-display-smileys,
+       mh-display-emphasis when mh-decode-mime is non-nil.
+
+       * mh-mime.el (mh-buffer-data): New structure to keep track of
+       per-buffer mime information.
+       (compiler-warnings): Some code was rearranged to get rid of all
+       compiler warnings.
+       (mh-graphical-smileys-p): New defcustom which controls whether
+       graphical smileys are shown.
+       (mh-graphical-emphasis-p): New defcustom for graphical emphasis.
+       (mh-max-inline-image-width, mh-max-inline-image-height): New
+       defcustoms for inlining image.
+       (gnus-local-map-property, mm-merge-handles): Copy utility
+       functions for use with version of Gnus that ships with Emacs21.1.
+       (mh-mime-cleanup): New function to free mime data-structures.
+       (mh-add-missing-mime-version-header): New function to add missing
+       Mime-Version header if a Content-Type header exists.
+       (mh-display-smileys): New function to show graphical smileys.
+       (mh-display-emphasis): New function to show graphical emphasis.
+       (new-globals): New variables mh-mime-button-* and
+       mh-mime-security-* were added to control mime buttons.
+       (mh-mime-display): New function to display mime messages. The
+       functions mh-mime-display-part, mh-mime-display-alternative,
+       mh-mime-display-mixed, mh-mime-part-index, mh-small-image-p,
+       mh-mime-display-single, mh-insert-mime-button, mh-mm-display-part,
+       mh-press-button, mh-push-button, mh-mime-save-part,
+       mh-mime-inline-part, mh-widget-press-button, mh-mm-inline-message,
+       mh-mime-display-security, mh-mime-security-show-details,
+       mh-mime-security-press-button and mh-insert-mime-security-button
+       were added to support mh-mime-display.
+
+       * mh-e.el (mh-header-display): Bind mh-decode-mime to nil when
+       mh-show-msg is called, so that mime isn't decoded when headers are
+       displayed.
+       (mh-quit): The show buffer is killed instead of invalidating and
+       burying it.
+
+       * mh-comp.el (mh-yank-cur-msg): Filter out the mime buttons from
+       the yanked message.
+       (mh-filter-out-non-text): New function to filter out attachments
+       from message being yanked.
+
+2002-05-20  Bill Wohler <Bill.Wohler@openwave.com>
+
+       * mh-utils.el (mh-invisible-headers-show-xface): First sentence of
+       docstring was not entirely on first line so was truncated in
+       customize and help buffers. Reworded so first sentence could fit
+       within 80 columns per checkdoc recommendation.
+       (mh-defun-show-buffer): Reworded per checkdoc recommendations.
+       Removed @SD while I was in there.
+
+2002-05-18  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-seq.el (mh-narrow-to-seq): This function now removes the
+       current message notation in the folder. Otherwise, two current
+       message notations may be present after mh-widen is called. Also
+       mh-copy-seq-to-eob is called instead of mh-copy-seq-to-point since
+       the latter has a bug.
+       (mh-copy-seq-to-point): This function has a tricky problem. It
+       calls mh-map-to-seq-msgs which uses mh-goto-msg. mh-goto-msg
+       assumes that the folder is sorted (since it uses binary
+       search). The assumption isn't true, so it may not copy all the
+       messages. Since this function is not used any more it has been
+       removed.
+       (mh-copy-seq-to-eob): This function is a specialized (and
+       hopefully correct) replacement for mh-copy-seq-to-point.
+
+2002-05-17  Satyaki Das  <satyaki@theforce.stanford.edu>
+
+       * mh-utils.el (mh-gnus-article-highlight-citation): Workaround for
+       problem caused by low value of recursive-load-depth-limit in
+       Emacs21.1 and CVS version of Gnus.
+       (mh-show-mode-map): New keymap variable to facilitate use of
+       summary commands from the show buffer.
+       (mh-show-folder-buffer): New local variable which keeps track of
+       the folder-buffer corresponding to the message being shown.
+       (mh-defun-show-buffer): New macro to convert interactive functions
+       callable in the summary buffer to interactive functions callable
+       in the show buffer.
+       (mh-show-mode): Make buffer read-only and use mh-show-mode-map as
+       keymap (closes SF #527946).
+       (mh-modify): New interactive function to edit a message in-place.
+
+       * mh-e.el (mh-goto-cur-msg): Add an optional argument,
+       minimal-changes-p. If non-nil, the function will just change
+       the point to current message and do not change folder display.
+       (mh-folder-mode-map): Make "M" call mh-modify.
+
+2002-05-07  Peter S Galbraith  <psg@debian.org>
+
+       * mh-utils.el (mh-invisible-headers-show-xface): New defcustom
+       variable. If non-nil, the X-Face header line will be excluded from
+       the variable `mh-invisible-headers'.  Set this when using a
+       package such as x-face-el to display X-Face icons in mh-show-mode.
+       This variable's setting will eventually be set automatically when
+       mh-e does its own X-Face decoding (or this variable will be replaced
+       by one telling mh-e to decode the X-Face).  We may not ship the
+       next release with this variable.
+       
+2002-05-07  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-x-face-file): New defcustom variable. File name
+       containing the encoded X-Face string to insert in outgoing mail.
+       (mh-insert-x-face): New function.  Appends an X-Face field to the
+       header, but only if it doesn't already exist and if 'mh-x-face-file'
+       is non-nil and points to an existing file.
+       (mh-send-letter): Invoke mh-insert-x-face.
+
+2002-04-29  Mike Kupfer  <m.kupfer@acm.org>
+
+       * mh-e.el (mh-delete-msg, mh-refile-msg, mh-undo): Check
+       whether XEmacs region is actually active (needed at least for 21.1).
+       [Patch committed by psg]
+
+2002-04-29  Mike Kupfer  <m.kupfer@acm.org>
+
+       * mh-utils.el (mh-prompt-for-folder): Remove "default" argument
+       from completing-read as XEmacs-21.1 doesn't have it (21.4 does
+       however) and using the argument adds no functionality.
+       [Patch committed by psg]
+
+2002-04-11  Peter S Galbraith  <psg@debian.org>
+
+       * mh-e.el (mh-delete-msg, mh-refile-msg, mh-undo): Add support for
+       XEmacs to act on selected region when active.
+
+2002-04-10  Peter S Galbraith  <psg@debian.org>
+
+       * mh-e.el (mh-delete-msg, mh-refile-msg, mh-undo): XEmacs fix; Add
+       check to see if mark-active is bound, because Mandrake Linux include 
+       XEmacs initialization code that binds transient-mark-mode.  This
+       fix gets around a problem in Mandrake only.  It wasn't a problem
+       on XEmacs generally.  Fixes SF #541915.
+
+2002-04-08  Bill Wohler  <wohler@newt.com>
+
+       * Released mh-e version 6.1.
+
+       * mh-e.el (mh-folder-unseen-seq-name): Use "mhparam -component
+       Unseen-Sequence" command and "Unseen-Sequence: \\(.*\\)$" regexp
+       to increase robustness.
+       (mh-folder-unseen-seq-list): Use `expand-file-name' as
+       `mh-expand-file-name' isn't needed and the former saves function
+       call.
+       (Version, mh-version): Updated for release 6.1.
+
+2002-04-08  Peter S Galbraith  <psg@debian.org>
+
+       * mh-e.el (mh-folder-unseen-seq-list): Specify mh-progs path in
+       call to mark command.  Fixes a bug in which unseen messages
+       weren't highlighted if "mark" wasn't in the path.
+
+2002-04-07  Bill Wohler  <wohler@newt.com>
+
+       * MH-E-NEWS: Updated for release 6.1.
+
+       * README: Updated for release 6.1. Updated verbiage about reading
+       MH-E-NEWS.
+
+       * mh-comp.el, mh-e.el, mh-funcs.el, mh-mime.el, mh-seq.el,
+       mh-utils.el, mh-xemacs-compat.el: Updated copyright in files
+       modified this year.
+
+       * mh-xemacs-compat.el: Put Author field back in, but set to FSF.
+
+       * mh-comp.el, mh-funcs.el, mh-mime.el, mh-seq.el,
+       mh-utils.el: Fixed all checkdoc errors, except for no
+       documentation, and documentation in comments. Also removed the-
+       prefix from certain local variables.
+
+       * mh-e.el: Fixed all checkdoc errors, except for no documentation,
+       and documentation in comments. Also removed the- prefix from
+       certain local variables.
+       (mh-folder-unseen-seq-name): Refactored to make default sequence
+       name more explicit and to handle undefined Unseen-Sequence MH
+       profile entry better.
+       
+2002-04-02  Peter S Galbraith  <psg@debian.org>
+
+       * mh-e.el: 'defvar mh-folder-unseen-seq-name' called a function to
+       set it's value, and this happens also on byte-compilation (where
+       it can fail if the user's MH environment is not setup correctly).
+       I now set the value of mh-folder-unseen-seq-name at runtime when I
+       first need it.  This should fix Debian bugs
+       http://bugs.debian.org/140232 and http://bugs.debian.org/140817
+
+2002-03-25  Peter S Galbraith  <psg@debian.org>
+
+       * mh-utils.el: remove "(require 'mh-e)" since mh-utils.el should
+       be at the bottom of the dependency tree.
+       * mh-e.el (mh-folder-unseen-seq-name): Make sure mh-progs is set
+       and use it as path to mhparam command in call-process.
+
+2002-01-23  Peter S Galbraith  <psg@debian.org>
+
+       * mh-e.el (mh-folder-font-lock-keywords): Add call to
+       mh-folder-font-lock-unseen to fontify unseen messages in bold.
+       (mh-folder-unseen-seq-name): Provide name of unseen sequence from
+       mhparam.  Used as default for variable of same name.
+       (mh-folder-unseen-seq-list): Returns a list of unseen messages
+       numbers for current folder.
+       (mh-folder-unseen-seq-cache): Cache variable to hold list of
+       unseen message numbers while font-lock iterates.  This variable is
+       buffer-local.
+       (mh-folder-font-lock-unseen): Returns unseen message lines to
+       font-lock one by one.
+
+2002-01-15  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-insert-prefix-string): Wrap a 
+       "(let ((zmacs-regions nil))" around (mark) so it works in XEmacs.
+       Bug reported and fix suggested by Will Partain <partain@dcs.gla.ac.uk>
+       Indeed, this is how it appears in XEmacs-21's mh-comp.el.
+       
+2001-12-16  Jeffrey C Honig  <jch@honig.net>
+
+       * mh-comp.el (mh-forward): Move the assignment to `fwd-msg-file'
+       to before the assignment to `draft' as the later changes buffers
+       and invalidates `mh-seq-list' (which is used in a function called
+       by (mh-seq-to-msgs)).  Resolves SF #489448.
+
+       * mh-utils.el: Add defcustoms for `mh-temp-folders-buffer' and
+       `mh-temp-sequences-buffer'.
+       
+       * mh-e.el (mh-quit): If they exist, kill 'mh-temp-buffer,
+       'mh-temp-folders-buffer and 'mh-temp-sequences-buffer when
+       quitting.
+
+       * mh-funcs.el (mh-list-folders): Use `mh-temp-folders-buffer'
+       (a defcustom initialized to "*Folders*") for folder listing.  Put
+       into view mode and set it up to kill the buffer when exiting view
+       mode.
+       
+       * mh-seq.el (mh-list-sequences): Use `mh-temp-sequences-buffer'
+       (a defcustom initialized to "*Sequences") for sequences listing.
+       Put into view mode and set it up to kill the buffer when exiting
+       view mode.
+
+2001-12-16  Bill Wohler  <wohler@newt.com>
+
+       * Released mh-e version 6.0.
+
+       * MH-E-NEWS: Be a little more specific about incompatible changes.
+       Added info about outdated manual.
+       Removed variables in mh-scan regexp table that did not exist in
+       5.0.2.
+       Added helpful documentation about finding relevant variables
+       containing regexps to mh-scan-format-file's description.
+
+       * mh-e.el (mh-scan-format-file): Added information about getting a
+       list of regexp variables that you'll need to change if you
+       customize your scan's output.
+       (mh-folder-mode): Added documentation about `mh-scan-format-file'
+       for those users who modify their scan formats.
+
+       * README: New file. Describes packages and provides simple
+       installation instructions.
+
+       * Makefile (clean, dist, install-emacs): Replaced $(RM) with rm
+       -rf (closes SF #488661).
+
+2001-12-14  Bill Wohler  <wohler@newt.com>
+
+       * Released mh-e version 5.0.93.
+
+       * Makefile (MH-E-SRC): Added mh-xemacs-compat.el.
+       (MH-E-IMG): Added .pbm images for all. Removed mail_ prefix from
+       all.
+       (MH-E-IMG2): New variable to hold images in mail sub-directory.
+       (dist): Updated target to make mail sub-directory and copy
+       MH-E-IMG2 images there.
+       
+       * mh-xemacs-compat.el: Modified docs per GNU coding conventions.
+
+       * mh-e.el: Reorganized variables having to do with the scan line.
+       Moved some random variables that were interspersed out of the
+       middle. Moved `mh-scan-format-file' first and let the variables
+       flow from there.
+
+       As the number of variables increases, it is becoming important to
+       organize the mh-e namespace. Several variables having to do with
+       the format of scan lines were renamed, as follows:
+       (mh-good-msg-regexp): Renamed to mh-scan-good-msg-regexp.
+       (mh-deleted-msg-regexp): Renamed to mh-scan-deleted-msg-regexp.
+       (mh-refiled-msg-regexp): Renamed to mh-scan-refiled-msg-regexp.
+       (mh-valid-scan-line): Renamed to mh-scan-valid-regexp.
+       (mh-cur-msg-number-regexp): Renamed to mh-scan-cur-msg-number-regexp.
+       (mh-cur-msg-line-regexp): Renamed to mh-scan-cur-msg-regexp.
+       (mh-scan-rcpt-addr-regexp): Renamed to mh-scan-rcpt-regexp.
+       (mh-scan.font-lock-regexp): Renamed to mh-scan-format-regexp.
+       (mh-folder-scan-font-lock-face): Renamed to
+       mh-folder-scan-format-face.
+       (mh-folder-cur-msg-line-face): Renamed to mh-folder-cur-msg-face).
+
+2001-12-13  Bill Wohler  <wohler@newt.com>
+
+       * mh-utils.el (mh-msg-number-regexp): Renamed to
+       mh-scan-msg-number-regexp.
+       (mh-msg-search-regexp): Renamed to mh-scan-msg-search-regexp.
+
+       * Corrected typos, quoted variables in doc strings, and made minor
+       wording changes in docs.
+
+2001-12-13  Peter S Galbraith  <psg@debian.org>
+
+       * mh-xemacs-compat.el: defalias 'match-string-no-properties to
+       'match-string for XEmacs.  I've seen a better function for this
+       that actually removes text properties, but this will do for now.
+
+       * mh-utils.el (mh-decode-quoted-printable): deactivate-mark not
+       bound in XEmacs.
+
+       * mh-xemacs-compat.el: GNU Emacs Functions needed by XEmacs.
+       New file. 
+       * mh-e.el: (require 'mh-xemacs-compat) when running XEmacs. 
+
+2001-12-12  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-send-letter): function local-variable-p needs two
+       arguments in XEmacs.
+       (mh-send-letter): sendmail-coding-system not bound in XEmacs.
+       (mh-send-letter): default-buffer-file-coding-system not bound in
+       Xemacs.
+
+       * mh-e.el (mh-delete-msg, mh-refile-msg, mh-undo):
+       transient-mark-mode not bound in XEmacs.  The feature of
+       operations made on all messages in the selected range when
+       transient-mark-mode is on doesn't work in XEmacs.
+       
+       * mh-e.el, mh-utils: Conditionalize calls to
+       'add-to-list 'facemenu-unlisted-faces for XEmacs.
+2001-12-11  Jeffrey C Honig  <jch@honig.net>
+
+       * mh-e.el (mh-scan-format): Add `mh-scan-format-file' variable to
+       specify the scan format string or file to use.  Define formats for
+       MH and nmh that are compatible with the standard format, but
+       provide hints for font-lock.  Define (mh-scan-format) for use by
+       (mh-regenerate-headers) and (mh-get-new-mail) to specify the args
+       necessary to inform the scan program which scan format string or
+       file to use.
+
+2001-12-07  Peter S Galbraith  <psg@debian.org>
+
+       * mh-e.el (scan.font-lock): New format file documented in comments.
+       (mh-scan.font-lock-regexp): Adapted to new format.
+       (mh-folder-font-lock-keywords): Use new format.
+
+       * mh-e.el (page-down.xpm): Icon renamed from nextpage. 
+
+       * mh-utils.el (mh-decode-quoted-printable): Bug fix.  Better check
+       on what actually is a quoted-printable attachment.
+
+2001-12-06  Eric Ding  <ericding@alum.mit.edu>
+
+       * mh-mime.el (mh-mhn-compose-insertion, mh-mhn-compose-anon-ftp): 
+       require mailcap.el here rather than using autoload at top of
+       mh-mime.
+       (mh-file-mime-type): get rid of unused variables (why were they
+       there to begin with?)
+
+2001-12-06  Peter S Galbraith  <psg@debian.org>
+
+       * mh-e.el (mh-cur-msg-number-regexp, mh-cur-msg-line-regexp):
+       mh-cur-scan-msg-regexp splits into these two variables.
+       The whole-line fontification is disabled, but easily restored by a
+       user (although it could be a defcustom with choices DISABLED or
+       the correct regexp?)
+       (mh-folder-cur-msg-line-face): mh-folder-current-msg-face renamed
+       to this.
+       (mh-folder-cur-msg-number-face): mh-folder-current-face renamed to
+       this.
+
+       * cabinet.xpm: Revert to rescan icon name.
+       * mh-e.el (mh-folder-tool-bar-map): s/cabinet/rescan/
+
+       * mh-e.el (mh-folder-font-lock-keywords): Reorder and tweak such
+       that current message line highlight doesn't mess up other highlights.
+
+2001-12-05  Eric Ding  <ericding@alum.mit.edu>
+
+       * mh-utils.el (mh-show-from-face): Change mh-show-from-face to
+       cyan on dark backgrounds; through a series of changes, it had
+       become the same color as mh-show-subject-face!
+
+2001-12-05  Bill Wohler  <Bill.Wohler@openwave.com>
+
+       * mh-e.el, mh-utils.el: Fixed typos in face definitions, and made
+       a couple of small doc string tweaks while I was in there. Peter,
+       if you don't agree, let me know and I'll back them out. I thought
+       the "mh-e" in the text was redundant since the variables start
+       with "mh"; I was also thinking ahead to how the documentation may
+       read.
+
+2001-12-05  Peter S Galbraith  <psg@debian.org>
+
+       * mh-e.el (mh-cur-scan-msg-regexp): Match 0 is the whole line.
+       (mh-folder-current-msg-face): New face with only a background
+       settings, used in font-lock for the current message.
+       (mh-folder-font-lock-keywords): Use mh-folder-current-msg-face for 
+       mh-cur-scan-msg-regexp.
+       
+       * mh-utils.el (mh-show-from-face): Use red3 instead of red for
+       light backgrounds.  It's not as bright on the eyes.
+       (mh-show-subject-face): copy from mh-folder-subject-face instead.
+       Makes the look consistent with folder-mode.
+
+       * mh-e.el (mh-folder-subject-face): Moved to mh-utils since we
+       need it to copy to mh-show-subject-face.
+
+2001-12-05  Bill Wohler  <wohler@newt.com>
+
+       * mh-e.el (mh-folder-mode-map): Moved `mh-extract-rejected-mail'
+       from "a" to "E". Better mnemonic, nicer to folks used to using a
+       for `mh-reply'.
+
+2001-12-04  Bill Wohler  <wohler@newt.com>
+
+       * mh-e.el (mh-folder-map): Added "S" for `mh-sort-folder'.
+
+2001-12-04  Peter S Galbraith  <psg@debian.org>
+
+       * mh-e.el (mh-folder-subject-face et al.): Yet another attempt at
+       colours for folder-mode.  Still themed, but fewer and darker
+       colours (Blame Eric this time!).  I'll get to underlining tomorrow
+       night.
+
+       * mh-e.el (mh-folder-tool-bar-map): Renamed all icons so they
+       don't have the word mail in them.  Also generated a pbm format of
+       each icon for users without XPM support conpiled into Emacs.
+
+2001-12-04  Eric Ding  <ericding@alum.mit.edu>
+
+       * mh-utils.el (mh-show-font-lock-keywords): Use
+       mh-header-subject-font-lock instead of regexp for subject headers,
+       which may go multiple lines.
+       (mh-header-subject-font-lock): New function.
+       Fix typos (hightlight -> highlight).
+
+2001-12-04  Eric Ding  <ericding@alum.mit.edu>
+
+        * mh-e.el: changes to face colors on dark backgrounds.
+        (mh-folder-followup-face): change to LightGoldenRod.
+        (mh-folder-date-face): change to snow3.
+        (mh-folder-msg-number-face): change to snow4.
+
+2001-12-04  Bill Wohler  <wohler@newt.com>
+
+       * Released mh-e version 5.0.92.
+       
+       * mh-utils.el (gnus-cite-face-list)
+       (mh-gnus-article-highlight-citation): Don't autoload. Revert to
+       requiring in `mh-gnus-article-highlight-citation' as before. With
+       the autoloads, if you ran mh-e before gnus, you'd get an undefined
+       gnus variable when viewing an article in gnus. Go figure.
+
+2001-12-03  Bill Wohler  <wohler@newt.com>
+
+       * Released mh-e version 5.0.91.
+       
+       * MH-E-NEWS: Removed info about bumping up `max-specpdl-size' now
+       that workaround has been implemented.
+
+       * Makefile (MH-E-OBJ): New variable to hold .elc files.
+       (all): Just compile.
+       (clean): New target that blows away MH-E-OBJ.
+       (dist): Added $(MH-E-OBJ) to tarball.
+
+       
+       Attempt to quiet compilation errors to a dull roar.
+       
+       * mh-e.el: Require easymenu, added autoload of info.
+       (mh-smail, mh-smail-other-window): Comment says these were needed
+       by Emacs 18. Out!       
+
+       * mh-utils.el: Don't require sendmail, but require mh-e.
+       Moved autoloads to top of file, and autoload gnus-cite and
+       sendmail too.   
+
+       * mh-pick.el: Require easymenu. Remove cond on
+       `easy-menu-define'--it exists.
+
+       * mh-mime.el: Autoload mailcap.
+
+       * mh-comp.el: Require mh-e and easymenu, moved autoloads to top of
+       file.
+
+       
+       * Makefile: (EMACS): New constant to hold emacs calling sequence.
+       (install): Renamed to install-emacs.
+       (compile): New target to compile all files.
+       (dist): Make dependent on compile.
+       (import): Renamed to import-emacs.
+       (%.elc): New implicit rule to compile elisp files.
+
+       * mh-e.el (mh-thread-map): Added "Td" for
+       mh-delete-subject-thread.
+
+2001-12-03  Peter S Galbraith  <psg@debian.org>
+
+       * mh-e.el (mh-folder-tool-bar-map): Change tooltip for exec icon.
+       
+       * mh-e.el (mh-folder-subject-face): Change to IndianRed1.
+       (mh-folder-followup-face): Change to IndianRed.
+       (mh-folder-deleted-face): Use sedate face instead of bright one.
+
+2001-12-03  Bill Wohler  <wohler@newt.com>
+
+       * mh-utils.el (mh-invisible-headers): Increase size of
+       `max-specpdl-size' locally to work around insufficient default.
+       (mh-invisible-headers): Added X-Info and X-VSMLoop (NTMail).
+
+2001-12-03  Jeffrey C Honig  <jch@honig.net>
+
+       * mh-utils.el (mh-find-progs): Searches should not stop if the
+       strings are not found, there is error detection at the end of the
+       routine (closes SF #488231).
+
+2001-12-02  Bill Wohler  <wohler@newt.com>
+
+       * MH-E-NEWS: Added info about bumping up `max-specpdl-size'.
+
+       * Makefile (MH-E-IMG): New variable that contains images used by
+       mh-e. Add these files to release.
+
+       * MH-E-NEWS: Second draft of mh-e 6.0 (was 5.1) release notes.
+
+       * mh-e.el (mh-folder-updated-hook): Reworded to avoid ambiguity.
+       Is the hook called when you type `d' or when you type `x'?
+       (mh-unseen-updated-hook): Reworded to be consistent with
+       `mh-folder-updated-hook.'
+
+       * mh-utils.el (mh-recenter): Accepted Gerd's change which is
+       evaluated at compile time.
+
+2001-12-02  Bill Wohler  <wohler@newt.com>
+
+       * mh-e.el Major, major keymap changes. The specific changes are
+       listed below, but view the sources, or use "C-h m" in MH Folder
+       mode for the complete list.
+
+       Use of sub-keymaps inspired by gnus. The changes tripped me up at
+       first too, but after about 5 minutes of shock (which is to be
+       expected, I've been using the old keybindings for 16 years), I
+       honestly found the new bindings to be nice indeed. It will also
+       provide flexibility to allow for future functionality. I hate to
+       do this on the eve of the beta release, but you asked for it! It's
+       likely I'll have to pull an Eric and back this change out, but if
+       we can live with pink subjects, this can't be so bad ;-).
+       Question: will the users revolt? If they do, I suppose we can
+       release 6.0.1 the next day ;-).
+       (mh-folder-map, mh-sequence-map, mh-extract-map, mh-digest-map):
+       New keymaps which start with F, S, X, and D, respectively. The
+       mhstore commands can go in the mh-extract-map eventually.
+       (mh-thread-map): Renamed from mh-folder-thread-map.
+
+       Keymap changes and rationale. The sub-keymaps allowed some
+       consistency (e.g., esp. with l(ist) and k(ill).
+        
+       e               Deleted. Already have x. Now used by mh-edit-again.
+       a               Deleted. Already have r. Now used by mh-extract-rej..
+       j               Deleted. Already have g.
+       
+       M-a -> e        Better mnemonic. Matches rmail. Frees movement cmd.
+       M-e -> a        Try `a'gain!
+       
+       M-f -> Fv       Frees movement command
+       M-f -> Ff       Alias (keep?)
+       M-f -> Fo       Alias (keep?)
+       M-k -> Fk       No reason but to keep with folder commands
+       M-l -> Fl       No reason but to keep with folder commands
+       M-p -> Fp       No reason but to keep with folder commands
+       M-r -> Fr       Frees movement command
+       M-s -> Fs       No reason but to keep with folder commands
+       M-u -> Fu       No reason but to keep with folder commands
+       
+       M-% -> Sd       Better mnemonic
+       M-# -> Sk       Better mnemonic
+       M-q -> Sl       Better mnemonic
+       C-xn -> Sn      Frees up standard key binding
+       % -> Sp         Better mnemonic for putting a message in a sequence
+       ? -> Ss         Shows sequences that message is in
+       C-xw -> Sw      Frees up standard key binding
+
+       M-n -> Xs       Better mnemonic (shar)
+       M-n -> Xu       Better mnemonic (uuencode)
+
+       M-SPC -> DSPC   Frees mark command
+       M-\177 -> D\177 No reason but to keep with digest commands
+       M-b -> Db       Frees movement command
+
+2001-12-01  Bill Wohler  <wohler@newt.com>
+
+       * mh-e.el: Use gnus style of keymaps. Now requires gnus-util.
+       (mh-folder-thread-map): New map, created by gnus-define-keys.
+       Reached when typing T in mh-folder-mode-map. Moved threading
+       functions to this new keymap so we can use dired again.
+       (mh-folder-mode-map): Defined by gnus-define-keys. Otherwise than
+       the new threading functions, no changes to the UI were made at
+       this point--saving that for the next check-in.
+       
+       * mh-pick.el (mh-pick-mode-map): Use gnus-define-keys. Now
+       requires gnus-util.
+
+       * mh-comp.el (mh-letter-mode-map): Use gnus-define-keys. Now
+       requires gnus-util.
+
+2001-12-01  Jeffrey C Honig  <jch@honig.net>
+
+       * mh-e.el: Update the documentation for the regexps used by
+       `mh-folder-font-lock-keywords' to specify how many parethesized
+       expressions they are expected to have and what those expressions
+       are expected to match.
+
+2001-12-01  Bill Wohler  <wohler@newt.com>
+
+       * mh-e.el (mh-folder-mode): Removed iteration of key bindings,
+       \\{mh-folder-mode-map} suffices. Removed variable documentation
+       also as this is already out of date and a maintenance hassle.
+       Reference new mh customization group instead.
+
+       * mh-comp.el (mh-letter-mode): Ditto. Also added new information
+       about MIME directives getting processed automatically if inserted
+       via mh-e commands.
+
+       * mh-pick.el (mh-pick-mode): Edited documentation so it reads like
+       the other modes.
+
+       * mh-e.el (mh-compat-quit): Deleted obsolete and unused function.
+       Comment in this function said that `b' shouldn't be used for
+       burst-digest, as it is used for `back' in info, less, and rn. But
+       what does `back' mean in MH Folder? I suppose if you visit a
+       folder, you would go `back' to the original folder. Hmmm, I guess
+       we'll leave the `b' binding alone for now.
+
+       * mh-utils.el: Moved some of the variable comments to the first
+       column so they wouldn't wrap in such an ugly fashion.
+       (mh-showing-mode): Renamed variable and function from mh-showing
+       to conform with minor mode conventions. Added optional arg to
+       function so it would behave like a normal minor mode: no or nil
+       arg toggles mode, 0 arg turns off, non-nil turns on. It also turns
+       out that desktop-create-buffer would barf when recreating mh-e
+       buffers because it was calling mh-show with an arg.
+       (mh-show-mode): Use define-derived-mode to simplify definition a
+       *lot*.
+       (mh-set-mode-name): Deprecated by use of define-derived-mode.
+       Removed.
+
+       * mh-pick.el (mh-pick-mode): Use define-derived-mode to simplify
+       definition a *lot*.
+
+       * mh-e.el (mh-scan-prog): Removed message about "Buffer local" as
+       this message will appear in a future version of Emacs.
+       (mh-inc-folder): mh-showing renamed to mh-show-mode and made a
+       real minor mode.
+       (mh-folder-mode): Use define-derived-mode to simplify definition a
+       *lot*.
+
+       * import-emacs (release): Change `(none)' to `mainline' so import
+       doesn't choke after running `cvs up -A' on Emacs.
+       (COPYING): Moved from $EMACS_HOME/etc to $EMACS_HOME.
+       (cvs update): Whoops! Forgot the second join (-jemacs).
+       make import works fine again.
+
+2001-11-30  Peter S Galbraith  <psg@debian.org>
+
+       * mh-e.el (mh-folder-font-lock-keywords): Change order of
+       font-lock patterns such that subject body text doesn't get date
+       fontification.
+
+       * mh-e.el (mh-scan-subject-regexp): Bug fix.  Remove a dot.
+       scan.font-lock users have to setq it separately.
+
+2001-11-30  Eric Ding  <ericding@alum.mit.edu>
+
+       * mh-utils.el (mh-clean-msg-header): Go back to using
+       mh-delete-line.  Using invisible text property is nicer in some
+       ways, but winds up with somewhat mysterious behavior should user
+       kill/yank stuff from the header (i.e., text gets yanked invisibly
+       and won't be seen by user until file is reloaded).      
+
+2001-11-29  Bill Wohler  <wohler@newt.com>
+
+       * mh-e.el (mh-page-msg): Use mh-next-direction to page in the
+       right direction.
+
+2001-11-29  Jeffrey C Honig  <jch@honig.net>
+
+       * mh-e.el (mh-scan-folder): Fix logic to not attempt to go to
+       the current message if there are no messages in the folder.
+
+2001-11-29  Peter S Galbraith  <psg@debian.org>
+
+       * mh-e.el (mh-folder-font-lock-subject): New fontifier function
+       for subject lines in folder-mode
+       (mh-scan-followup-regexp): Deleted obsolete regexp.  Use
+       mh-scan-subject-regexp instead.
+       (mh-folder-font-lock-keywords): Use mh-folder-font-lock-subject
+       instead of obsolete mh-scan-followup-regexp variable.
+       (mh-folder-date-face, mh-folder-msg-number-face): 
+       (mh-folder-subject-face, mh-folder-followup-face): 
+       Now defined as proper faces instead of copied from font-lock
+       faces.
+       
+       * mh-mime.el (mh-media-type-regexp): New variable. Regexp matching
+       valid media types used in MIME attachment compositions.
+       (mh-file-mime-type): Use mh-media-type-regexp instead of
+       hard-wiring its value.
+
+       * mh-utils.el (mh-show-unquote-From): New function to unquote
+       "^>From" in mh-show-mode (not saved to disk).
+       (mh-show-mode): Call mh-show-unquote-From.
+
+2001-11-29  Eric Ding  <ericding@alum.mit.edu>
+
+       * mh-utils.el (mh-clean-msg-header): Use mh-make-line-invisible
+       rather than mh-delete-line.
+       (mh-make-line-invisible): New function to make line(s) invisible
+       rather than deleting line(s).  Optional argument specifies number
+       of lines to delete.
+       (mh-show-msg): screen-height has been deprecated; use no more.
+       (mh-notate): screen-width has been deprecated; use no more.
+
+2001-11-29  Jeffrey C Honig  <jch@honig.net>
+
+       * mh-utils.el: (mh-find-progs): Change mh-find-progs to rely on
+       the existence of mhparam.  The location of mhparam is used to find
+       `mh-progs'.  It uses the libdir and etcdir to find the
+       `mh-lib-progs' and `mh-lib' directories.  If etcdir doesn't return
+       anything we assume `mh-lib-progs' is the same as `mh-lib' and that
+       we are using MH instead of nmh.
+
+2001-11-29  Peter S Galbraith  <psg@debian.org>
+
+       * mh-e.el (mh-scan.font-lock-regexp): Change docs to reflect that
+       second paren expression is the user match.
+       (mh-folder-font-lock-keywords): Change from 1st to 2nd parenthesized
+       expression to match user name, after Jeffrey's change to the regexps.
+       
+2001-11-29  Bill Wohler  <Bill.Wohler@openwave.com>
+
+       * mh-utils.el (mh-clean-message-header): Default is now t.
+       (mh-invisible-headers): Padded out to contain all the headers that
+       the mh-e developers don't like to see (closes SF #415759).
+
+2001-11-28  Bill Wohler  <Bill.Wohler@openwave.com>
+
+       * mh-comp.el (mh-rejected-letter-start): Added MIME MDN. While
+       this allows mh-extract-rejected-mail to strip the start of the
+       MDN, there is still a closing MIME marker at the end. This should
+       be cleaned up eventually.
+
+2001-11-28  Peter S Galbraith  <psg@debian.org>
+
+       * mh-e.el (mh-folder-seq-tool-bar-map): New tool-bar used for
+       folder-mode when narrowed to sequence.
+       * mh-seq.el (mh-narrow-to-seq): Set tool-bar to
+       mh-folder-seq-tool-bar-map.
+       (mh-widen): Set tool-bar to mh-folder-tool-bar-map.
+       * widen.xpm: New icon used in mh-folder-seq-tool-bar-map.
+
+       * mh-mime.el (mh-file-mime-type): Much better check on validity of
+       'file' output.
+
+       * mh-e.el (mh-scan-subject-regexp): New regexp variable for
+       subject string in folder mode.  Used to extract subject sequence,
+       and will be used for font-lock soon.
+       * mh-seq.el (mh-subject-thread-to-sequence): More robust code by
+       using mh-scan-subject-regexp, allows users with non-standard
+       scan format to use subject sequences.
+
+       * mh-comp.el (mh-letter-fill-column): Fill column to use in
+       mh-letter-mode.  (Yes, I'm doing this in spite of what Bill said;
+       Someone can always undo it later)
+       (mh-letter-mode): setq fill-column to mh-letter-fill-column.
+
+2001-11-28  Bill Wohler  <wohler@newt.com>
+
+       * mh-e.el (mh-page-msg): The first time the end of page is hit,
+       set mh-page-to-next-msg-p to t. The second time the end of page is
+       hit, go to the next message.
+
+       * mh-utils.el: (mh-show-msg): Initialize mh-page-to-next-msg-p to
+       nil.
+
+2001-11-27  Bill Wohler  <wohler@newt.com>
+
+       * mh-mime.el (mh-mime-content-types): Updated list of types to
+       contain types used by mh-e developers, but not including types not
+       listed in
+       http://www.isi.edu/in-notes/iana/assignments/media-types/media-types.
+
+2001-11-27  Peter S Galbraith  <psg@debian.org>
+
+       * mh-seq.el (mh-subject-thread-to-sequence) New function placing
+       all messages with similar subject line into a sequence named
+       'subject.
+       (mh-narrow-to-subject-thread): New command to narrow to all
+       messages with similar subject line into a sequence named 'subject.
+       (mh-toggle-subject-thread): New command to toggle between a new
+       'subject sequence or the wide view of a folder.
+       (mh-delete-subject-thread): New command to delete all following
+       messages with similar subject lines (leaving preceeding ones
+       untouched).
+       (mh-next-unseen-subject-thread): New command to create and move to
+       a new subject thread created from the next unseen message as a
+       starting point.
+       * mh-e.el (mh-folder-message-menu): New menu entries for subject
+       threads.
+       (mh-folder-mode-map): New keybindings for subject threads.
+       (mh-lessp): New function to sort messages.
+
+       * mh-utils.el (mh-show-font-lock-keywords): and various
+       faces... scoped within eval-after-load "font-lock" to avoid
+       requiring font-lock to use its faces.
+       * mh-e.el (mh-folder-font-lock-keywords): Same. 
+
+2001-11-27  Jeffrey C Honig  <jch@honig.net>
+
+       * mh-mime.el (mh-file-mime-type): Use mh-temp-buffer instead of
+       " *mh-temp".
+       
+       * mh-comp.el (mh-insert-x-mailer): Kill mh-temp-buffer after use.
+
+2001-11-26  Eric Ding  <ericding@alum.mit.edu>
+
+       * mh-utils.el: revert to using external mimedecode to decode
+       MIME quoted-printable parts
+
+2001-11-26  Jeffrey C Honig  <jch@honig.net>
+
+       * mh-e.el (mh-process-commands): Added mh-folder-updated-hook.
+       * mh-e.el (mh-update-unseen): Added mh-unseen-updated-hook.
+
+2001-11-26  Peter S Galbraith  <psg@debian.org>
+
+       * mh-mime.el (mh-file-mime-type): Make sure output from file
+       command is known to mailcap file, otherwise prompt the user.
+       (mh-mime-content-types): Add "image/png" type.
+
+       * mh-e.el (mh-folder-font-lock-keywords): Use a bunch of new
+       mh-folder-*-face faces.
+       * mh-utils.el (mh-show-font-lock-keywords): Use a bunch of new
+       mh-show-*-face faces.
+
+       * mh-utils.el (mh-letter-header-font-lock): Bug fix.  Fix infinite
+       loop in emacs20 font-locking.
+       (mh-header-field-font-lock): Preventive fix with similar change.
+
+       * mh-comp.el (mh-reply-show-message-p): Typo.  diplayed -> displayed.
+       * MH-E-NEWS: Same.
+
+       * mh-e.el (mh-folder-tool-bar-map): Bug fix.  I had
+       mh-repack-folder instead of mh-pack-folder.
+
+2001-11-26  Bill Wohler  <wohler@phone.com>
+
+       * mh-e.el:
+       Updated header for consistency and to conform with (elisp)Library
+       Headers.
+       (mh-do-not-confirm): Updated documentation string to reflect
+       reality (e.g., is no longer used by mh-kill-folder and is used by
+       more functions than just mh-undo-folder).
+       (mh-page-msg): Now shows the next undeleted message if looking at the
+       bottom of the current message.
+       (mh-process-or-undo-commands): Fixed indentation.
+
+       * mh-mime.el:
+       (mh-mhn-compose-insertion, mh-mhn-compose-anon-ftp): If MIME type
+       cannot be determined with file command, use mailcap-mime-types (if
+       available) to provide list for completing read.
+
+       * MH-E-NEWS: First draft of mh-e 5.1 release notes.
+
+2001-11-26  Eric Ding  <ericding@alum.mit.edu>
+
+       * mh-utils.el (mh-decode-quoted-printable): Implement
+       quoted-printable decoding in elisp (starting with code copied
+       from FLIM).
+       (mh-decode-quoted-printable-region): Move (require 'hexl) outside
+       while loop.
+       (mh-decode-quoted-printable): give user a choice between using
+       internal code or external program to decode quoted-printable 
+       content.  Resurrect code that calls external mimedecode program.
+
+2001-11-25  Peter S Galbraith  <psg@debian.org>
+
+       * mh-utils.el (mh-highlight-citation-p): New variable to determine
+       whether to hightlight citations in message body with gnus,
+       font-lock or not at all.
+       (mh-show-font-lock-keywords): removed citations from keywords.
+       (mh-show-font-lock-keywords-with-cite): New variable, equivalent
+       to prior mh-show-font-lock-keywords.
+       (mh-gnus-article-highlight-citation): hook into gnus for
+       multi-level citation highlighting.
+       (mh-show-mode): Use either mh-show-font-lock-keywords or
+       mh-show-font-lock-keywords-with-cite, depending on value of
+       mh-highlight-citation-p, and possibly call
+       mh-gnus-article-highlight-citation.
+       * mh-comp.el (mh-letter-mode): Same as for mh-show-mode above.
+
+2001-11-25  Jeffrey C Honig  <jch@honig.net>
+
+       * mh-comp.el (mh-redistribute): Added mh-redist-background
+       variable to cause mh-redistribute to run the redist command in the
+       background.  This causes the transaction log to be visible, like
+       with send.
+
+2001-11-25  Peter S Galbraith  <psg@debian.org>
+
+       * mh-e.el (mh-inc-folder): 'inc' finishes by displaying the first
+       new message if already showing messages.
+
+2001-11-22  Peter S Galbraith  <psg@debian.org>
+
+       * mh-utils.el (mh-prompt-for-folder): Exit with error if no folder
+       specified, otherwise mh-refile-msg may try to create a folder with
+       empty name, and this creates problems;  even mh-undo can't handle
+       it (Closes SF #476824).
+
+       * mh-comp.el (mh-letter-tool-bar-map): Info button needed to
+       require 'info.  Also tweaked help texts.
+       (mh-letter-menu): Use headline capitalization (Closes SF #483203).
+       * mh-e.el (mh-folder-tool-bar-map): Same as above.
+       (mh-folder-folder-menu, mh-folder-message-menu):
+       (mh-folder-sequence-menu): Same as above.
+       * mh-pick.el (mh-pick-menu): Same as above.
+
+2001-11-21  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-reply-show-message-p): The setting of this
+       variable determines whether the MH show-buffer is diplayed with
+       the current message when using mh-reply without a prefix argument.
+       Set it to nil if you already include the message automatically in
+       your draft using "repl: -filter repl.filter" in your ~/.mh_profile
+       file.
+       (mh-reply): Don't show message in other window if
+       mh-reply-show-message-p is nil.
+
+       * mh-e.el (mh-folder-tool-bar-map): Add mail_exec.xpm icon for
+       mh-execute-commands.
+
+       * mh-utils.el (mh-show-mouse): New function to click on a message
+       in folder-mode and show that message.
+       * mh-e.el (mh-folder-mode-map): Bind mh-show-mouse to mouse-2.
+       
+       * mh-e.el (mh-page-msg): Show buffer first if not displayed,
+       instead of simply complaining there's no other window.
+
+       * mh-e.el (mh-folder-tool-bar-map): New tool-bar for folder mode!
+       (mh-folder-mode): Setup tool-bar.
+
+       * mh-mime.el (mh-have-file-command): try to non-fatally load
+       executable.el because emacs20 doesn't autoload it.
+       * mh-utils.el (load "executable" t t): Idem. 
+
+       * mh-utils.el (mh-clean-msg-header): Bug fix. locally bind
+       after-change-functions to nil, working around a strange font-lock
+       bug in emacs20 when (add-hook 'mh-show-mode-hook 'turn-on-font-lock) 
+       was used.
+       
+       * mh-comp.el (require 'sendmail): Moved from mh-comp.el to
+       mh-utils.el because it is needed in reading mail too.
+       (mh-header-field-end, mh-in-header-p): Moved to mh-utils.el
+       because they are needed by mh-show-mode's font-lock code.
+       Unfortunately, this splits the field related code into two files.
+       Perhaps it should all go into mh-utils?
+
+2001-11-20  Eric Ding  <ericding@alum.mit.edu>
+
+       * mh-utils.el (mh-show-from-face): Fix typo in defface
+
+2001-11-20  Bill Wohler  <wohler@newt.com>
+
+       * mh-utils.el (mh-mail-header-separator): Set to -------- as
+       defined by MH (components, and replcomps files). This variable
+       cannot be a regexp since it is used as an argument to insert and
+       is passed through regexp-quote before being used. The previous
+       value broke a lot of code, including mailcrypt.
+
+       * mh-comp.el (mh-letter-mode, mh-send-letter): Insert X-Mailer
+       header field from mh-send-letter.
+       (mh-edit-again, mh-extract-rejected-mail): Call
+       mh-insert-header-separator to ensure that there is a separator.
+       Packages such as mailcrypt depend on it.
+       (mh-insert-header-separator): New function to insert
+       mh-mail-header-separator if it doesn't exist.
+
+2001-11-20  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-letter-mode): Make font-lock-defaults a local variable
+       * mh-e.el (mh-folder-mode):  Same.
+       * mh-utils.el (mh-show-mode):  Same.
+
+       * mh-e.el (mh-scan-msg-num-regexp): Delete variable and replace
+       with mh-good-msg-regexp.
+
+       * mh-utils.el (mh-mail-header-separator): Bug fix.  Moved from
+       mh-comp.el to mh-utils.el (which mh-comp.el loads).
+
+       * mh-comp.el (mh-in-header-p): Recycle sendmail.el code (as
+       suggested by Bill).
+       * mh-utils.el (mh-letter-header-font-lock): Use mh-in-header-p.
+
+       * mh-comp.el (mh-letter-tool-bar-map): tool-bar customize button goes
+       to customizing mh-compose group.
+
+       * mh-utils.el (mh-show-mode): font-lock bug fix. Locally set
+       font-lock-support-mode to nil. 
+       (mh-letter-header-font-lock, mh-header-field-font-lock): font-lock
+       bug fix. Don't return match beyond font-lock search limit.
+
+       * mh-comp.el (mh-letter-mode): Emacs20 bug fix. tool-bar-mode is
+       not a bound variable.
+
+2001-11-19  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-letter-tool-bar-map): tool-bar help button goes
+       to 'Draft Editing' info node. 
+
+       * mh-utils.el (mh-show-from-face, mh-show-to-face): New faces used
+       for font-lock.
+       (mh-header-to-font-lock, mh-header-cc-font-lock)
+       (mh-header-field-font-lock): New helper function returning whole
+       header field arguments to font-lock.
+       (mh-show-font-lock-keywords): Heavily modified using the above.
+
+       * mh-e.el (mh-scan-msg-num-regexp): Regexp matching the message
+       number in scan lines.
+       (mh-scan-date-regexp): Regexp matching a valid date in scan lines.
+       (mh-scan-rcpt-addr-regexp): Regexp specifying the recipient in
+       scan lines for messages we sent.
+       (mh-scan-followup-regexp): Regexp matching a followup subject
+       line, starting with Re:
+       (mh-scan-body-regexp):
+       Regexp matching the message body beginning displayed in scan lines.
+       (mh-scan.font-lock-regexp): Regexp matching output of the the
+       optional scan.font-lock format file.
+       (mh-folder-font-lock-keywords): New font-lock for folder-mode that
+       uses the above regexps.
+
+2001-11-19  chad  <y@mit.edu>
+
+       * mh-comp.el (mh-letter-tool-bar-map): made both references to
+       mh-letter-tool-bar-map conditional on tool-bar-mode, instead of
+       just one. 
+       
+2001-11-19  Bill Wohler  <wohler@newt.com>
+
+       * mh-comp.el (mh-position-on-field): Move to the end of the header
+       if the field is not present. This function was documented to do
+       this, but wasn't doing so.
+       (mh-insert-x-mailer): Simplified by using existing
+       mh-goto-header-field and mh-insert-fields functions. Now that
+       mh-insert-fields is used to insert X-Mailer header field, no
+       longer need to include X-Mailer in mh-x-mailer-string.
+
+2001-11-18  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-letter-tool-bar-map): New version of
+       mh-letter-mode tool-bar.  Changed order of buttons; made customize
+       and info buttons specific to mh-e.
+
+       * mh-e.el (mh-folder-font-lock-keywords): New font-lock regexp
+       uses variables mh-deleted-msg-regexp, mh-refiled-msg-regexp and
+       mh-cur-scan-msg-regexp, so will better adapt to non-default scan
+       formats.  Also, lines marked for refiling are now fontified.
+
+2001-11-18  Bill Wohler  <wohler@newt.com>
+
+       * mh-utils.el (mh-show-mode): Added local variable
+       mail-header-separator which is initialized to
+       mh-mail-header-separator.
+
+       * mh-comp.el (mh-mail-header-separator): Updated to include ^$.
+       Needed when running mh-edit-again, since by then the separator is
+       gone. Added documentation saying one should use
+       mail-header-separator and initialize it from
+       mh-mail-header-separator.
+       (mh-forward): Initialize mail-header-separator since
+       mh-letter-mode hasn't kicked in yet (which does initialize
+       mail-header-separator).
+       (mh-letter-mode): Initialize mail-header-separator from
+       mh-mail-header-separator, not hard-coded string.
+
+       * mh-comp.el (mh-insert-x-mailer-p): New variable to control
+       whether X-Mailer string is inserted. Default: t.
+       (mh-x-mailer-string): New variable that caches actual X-Mailer
+       string.
+       (mh-letter-mode): Call mh-insert-x-mailer if mh-insert-x-mailer-p
+       is t.
+       (mh-insert-x-mailer): New function that inserts X-Mailer header
+       field.
+
+2001-11-17  Peter S Galbraith  <psg@debian.org>
+
+       * mh-utils.el (mh-letter-header-font-lock): New function to return
+       the entire mail header to font-lock for sedate font-locking.
+       (mh-show-font-lock-keywords): Modified to fontify whole lines and use
+       mh-letter-header-font-lock above to fontify whole header.
+
+2001-11-17  Bill Wohler  <wohler@newt.com>
+
+       * mh-comp.el (mail-header-separator): Added ^ and $ to make more
+       specific.
+       (mh-forward, mh-letter-mode): Replaced hard-coded string with
+       mail-header-separator.
+
+2001-11-16  Bill Wohler  <wohler@newt.com>
+
+       * mh-e.el (mh-e-RCS-id): Renamed to mh-version.
+       (mh-version): The variable: Set to a number instead of Id since
+       the Id didn't have the mh-e version number, and both Emacs and
+       gnus do it this way too.
+       (mh-version): The function: Fixed for nmh. Now displays mh-e
+       version correctly. Cleaned up output and display mh-progs, etc.
+       (Closes SF #405620.)
+
+2001-11-15  Peter S Galbraith  <psg@debian.org>        
+
+       * mh-comp.el (mh-letter-tool-bar-map): New tool-bar support for
+       mh-letter-mode in emacs21.  Uses icons from gnus/message.el.
+       * mh-comp.el (mh-letter-mode): Add buffer-local binding of
+       tool-bar-map to mh-letter-tool-bar-map.
+
+2001-11-15  Peter S Galbraith  <psg@debian.org>
+
+       * mh-mime.el (mh-have-file-command): Add check for existence of
+       executable-find command, which Jeffrey didn't exist in emacs-20.4.
+       * mh-utils.el (mh-decode-quoted-printable-have-mimedecode): same
+       as above.
+       * mh-mime.el (mh-file-mime-type): Bug Fix.  Some versions of
+       'file' output a string like "file: Using regular magic file..." 
+       to stderr, so discard stderr when using call-process with 'file'.
+
+2001-11-14  Peter S Galbraith  <psg@debian.org>
+
+       * mh-mime.el (mh-have-file-command): Check if 'file' command on
+       system accepts arguments -i -b before accepting it for our use.
+
+2001-11-14  Peter S Galbraith  <psg@debian.org>
+
+       * mh-utils.el (mh-find-progs): Use expand-file-name instead of
+       concatenating together strings into a path.
+
+2001-11-14  Peter S Galbraith  <psg@debian.org>
+
+       * mh-e.el (mh-folder-sequence-menu): Enable mh-widen in sequence
+       menu only when mh-narrowed-to-seq is t.
+
+2001-11-14  Peter S Galbraith  <psg@debian.org>
+
+       * mh-mime.el (mh-have-file-command): Use 'executable-find' instead
+       of more complicated and error-prone call-process to which command.
+       * mh-utils.el (mh-decode-quoted-printable-have-mimedecode): Same
+       change as above.
+
+2001-11-14  Jeffrey C Honig  <jch@honig.net>
+
+       * mh-e.el (mh-make-folder-mode-line): Bug fix.  Properly deal with
+       folders that do not have any lines in them.  Print "no msgs"
+       instead of "0 msgs".  Do not try to print a range when there are
+       no messages.
+       * mh-e.el (mh-regenerate-headers): Bug fix.  Catch and remove the
+       "scan: band message list" message.
+
+2001-11-13  Jeffrey C Honig  <jch@honig.net>
+
+       * mh-utils.el (mh-find-progs): Bug fix.  Add "mh/etc" to the
+       subdirectories to search for "components".  On BSD/OS, nmh is in
+       "/usr/contrib/mh/*". 
+
+2001-11-13  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-letter-mode): Bug fix.  Load mh-mime before
+       setting mh-mhn-compose-insert-p (when looking at a "forw: -mime"
+       message containing a MIME composition) such that the variable is
+       properly declared as buffer-local.
+
+2001-11-12  Bill Wohler  <wohler@newt.com>
+
+       * mh-funcs.el (mh-print-msg): mhl is in the mh-lib-progs
+       directory, not mh-lib (closes SF #481128).
+
+2001-11-12  Peter S Galbraith  <psg@debian.org>
+
+       * mh-seq.el (mh-widen): Bug fix (closes SF #481036).
+       In a sequence with pending deletes and refiles, running mh-widen
+       would wipe out their notations, even though the sequences are still
+       defined.  Fixed by calling a new function,
+       mh-notate-deleted-and-refiled.  Also changed the coping of
+       mh-goto-msg-num since it didn't work consistently.
+       * mh-seq.el (mh-notate-deleted-and-refiled): New functions written
+       to fix above mh-widen bug.  It's a first cut, we may want to clear
+       all notations first, and notate the current-message sequence and
+       user sequences.  Time will tell.
+
+2001-11-12  Peter S Galbraith  <psg@debian.org>
+
+       * mh-seq.el (mh-widen): Make it attempt to stay on the same
+       message number (closes SF bug #480922).
+
+2001-11-11  Bill Wohler  <wohler@newt.com>
+
+       * import-emacs: New shell script to import Emacs changes to mh-e.
+
+       * Makefile (import): New target to import Emacs changes.
+
+2001-11-09  Peter S Galbraith  <psg@debian.org>
+
+       * mh-mime.el (mh-file-mime-type): Bug fix.  Change regexp to
+       extract mime type from 'file -i' command output.
+
+2001-11-08  Peter S Galbraith  <psg@debian.org>
+
+       * mh-utils.el (mh-update-sequences-after-mh-show): 
+       New customizable variable telling whether to run
+       mh-update-sequences in mh-show-mode.  Default is t.
+       * mh-utils.el (mh-show-msg): Run mh-update-sequences when       
+       mh-update-sequences-after-mh-show is set.
+
+2001-11-08  Peter S Galbraith  <psg@debian.org>
+
+       * mh-utils.el (mh-decode-quoted-printable-have-mimedecode): 
+       New variable telling whether command 'mimedecode' is on system.
+       (http://www.freesoft.org/CIE/FAQ/mimedeco.c)
+       * mh-utils.el (mh-decode-quoted-printable): 
+       New customizable variable telling whether to run mimedecode on 
+       MIME message containing quoted-printable parts.  mimedecode will
+       only alter quoted-printable parts , leaving others intact, and the
+       resulting message is still fully MIME.
+       * mh-utils.el (mh-decode-quoted-printable): New function to run
+       mimedecode on the current buffer.
+       * mh-utils.el (mh-display-msg): Conditionnaly call
+       mh-decode-quoted-printable function if mh-decode-quoted-printable
+       variable is set, to view messages containing quoted-printable
+       characters into 8-bit.
+       
+2001-11-08  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-letter-mode): Set mh-mhn-compose-insert-p if
+       looking at a "forw: -mime" message containing a MIME composition.
+       * mh-mime.el (mh-file-mime-type): Bug fix.  Failed on files like
+       "~/.mh_profile" because of shell construct.  Wrapped filename with
+       expand-file-name.
+       * mh-comp.el (mh-letter-mode-map): C-cC-o keybinding in
+       mh-letter-mode-map for mh-open-line.
+
+2001-11-07  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-open-line): New user function to split open a line
+       when editing a reply with included text.
+       * mh-comp.el (mh-current-fill-prefix): New function used by
+       mh-open-line to get the fill-prefix on the current line.
+       * mh-comp.el: Add mh-open-line to mh-letter-mode menubar.
+
+2001-11-06  Peter S Galbraith  <psg@debian.org>
+
+       * mh-seq.el (mh-region-to-sequence): New function, creating a
+       sequence named 'region containing the message list in the selected
+       region.
+       * mh-e.el (mh-delete-msg): Mark messages in region for deletion if
+       mark is active and in transient-mark-mode.
+       * mh-e.el (mh-refile-msg): Mark messages in region for refiling if
+       mark is active and in transient-mark-mode.
+       * mh-e.el (mh-undo): Undo message marks for refile or deletion if
+       region if mark is active and in transient-mark-mode.
+
+2001-11-06  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-letter-mode): Use sendmail.el's fill-paragraph.
+       Copy its settings for paragraph-start, paragraph-separate,
+       fill-paragraph-function, adaptive-fill-regexp and
+       adaptive-fill-first-line-regexp.  This make M-q (fill-paragraph)
+       work correctly!
+
+2001-11-05  Peter S Galbraith  <psg@debian.org>
+
+       * mh-funcs.el (mh-kill-folder): Remove mh-do-not-confirm condition
+       and always prompt the user for such a drastic step.  Also change
+       the prompt a bit to clarify it.
+
+2001-11-04  Peter S Galbraith  <psg@debian.org>
+
+       * mh-mime.el (mh-mhn-compose-insert-p): New buffer-local variable
+       to tell when a MIME insertion was done in a letter.
+       * mh-mime.el (mh-mhn-compose-type): Set mh-mhn-compose-insert-p.
+       * mh-mime.el (mh-mhn-compose-external-type): 
+       Set mh-mhn-compose-insert-p.
+       * mh-mime.el (mh-mhn-compose-forw): Set mh-mhn-compose-insert-p.
+       * mh-mime.el (mh-edit-mhn): Clear mh-mhn-compose-insert-p.
+       * mh-comp.el (mh-send-letter): Run mh-edit-mhn when
+       mh-mhn-compose-insert-p is set.
+
+2001-11-03  Peter S Galbraith  <psg@debian.org>
+
+       * mh-mime.el (mh-have-file-command): new function testing whether
+       file command is on the system.
+       * mh-mime.el (mh-file-mime-type): new function returning MIME type
+       from file command.
+       * mh-mime.el (mh-mhn-compose-insertion): Make use of
+       mh-file-mime-type function instead of prompting.
+
+2001-10-30  Peter S Galbraith  <psg@debian.org>
+
+       * mh-utils.el (mh-show-use-goto-addr): defcustom this new
+       variable, determining whether to call goto-addr in mh-show-mode.
+       * mh-utils.el (mh-show-mode): Call goto-address when
+       mh-show-use-goto-addr is t.
+
+2001-10-25  Peter S Galbraith  <psg@debian.org>
+
+       * mh-utils.el (mh-recenter): Clarify docs and change '(t) to 
+       (list 4) to match elisp doc on what C-u prefix argument actually is. 
+
+2001-10-23  Peter S Galbraith  <psg@debian.org>
+
+       * mh-utils.el (mh-summary-height): In my quest to make mh-e more
+       useful out-of-the-box for new users, set mh-summary-height to a
+       minimum of 4 and a maximum of 10 depending on frame height.  I
+       typically have 70 lines in my Emacs frame, so having a default of
+       4 was silly for my case.
+       * mh-e.el (mh-update-sequences): Check for nil value of
+        mh-current-folder, which happens if mh-summary-height < 4
+       although I haven't tracked doen why that happens.
+
+2001-10-22  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-insert-fields): Test for nil value when inserting
+       field.
+
+2001-10-20  Peter S Galbraith  <psg@debian.org>
+
+       * mh-comp.el (mh-user-agent-compose): Merged-in from XEmacs-21.4 source
+       * mh-comp.el (mh-letter-mode): Add easy-menu-add statement for XEmacs21
+       * mh-pick.el (mh-pick-mode): Add easy-menu-add statement for XEmacs21.
+       * mh-e.el (mh-folder-mode): Add easy-menu-add statements for XEmacs21.
+       * mh-utils.el: defalias 'screen-height to 'frame-height for XEmacs21.
+
+2001-10-19  Peter S Galbraith  <psg@debian.org>
+
+       * mh-mime.el (mh-edit-mhn): Use mhbuild in nmh context.
+       * mh-utils.el (mh-find-progs): The variable mh-nmh-p (t when nmh
+       is in use rather than MH) was set assuming that the string "nmh"
+       will be in mh-lib-progs or mh-lib.  This failed on Debian systems.
+       Better to check for the existence of mhbuild in directory mh-progs.
+       (closes SF bug #441776)
+
+2001-10-18  Peter S Galbraith  <psg@debian.org>
+
+       * mh-e.el: Add menubar entry from contrib/mh-menubar.el
+       * mh-comp.el: Add menubar entry from contrib/mh-menubar.el
+       * mh-pick.el: Add menubar entry from contrib/mh-menubar.el
+
+2001-07-30  Peter S Galbraith  <psg@debian.org>
+
+       * mh-e.el: Change font-lock patterns for folders.
+       Fontify scan.font-lock patterns (which will be documented)
+       and fontify subject lines prefixed with "Re:" differently.
+       * mh-comp.el (mh-letter-mode): Add font-lock support as in 
+       mh-show-mode.
+
+2001-04-14  chad brown  <y@mit.edu>
+
+       * rearrange the font-lock keywords a bit
+
+2001-04-12  chad brown  <y@mit.edu>
+
+       * preliminary (somewhat boring) font-lock support for mh-e.  More
+       interesting font-lock support probably wants to have better
+       support for multiple format files
+       
+2001-02-24  chad brown  <y@mit.edu>
+
+       * add default nmh paths to mh-find-prog in mh-utils.el.
+       change to mh-kill-folder in mh-funcs.el to make it more general.
+
+2001-02-19  Bill Wohler  <wohler@newt.com>
+
+       * Makefile (EMACS): Renamed to EMACS_HOME. Also, don't define if
+       EMACS_HOME already exists to give developer a chance to set
+       environment variable.
+       (install): $MH-E-SRC is copied to $(EMACS_HOME)/lisp/mail, not
+       $(EMACS_HOME)/src.
+       (dist): Leave release in current directory.
index b9f144fae020e1e89b165fd1affe36075175d27d..0e45edf288a8c5244a3b061c31953131f08d24a1 100644 (file)
 ;;  `mh-alias-insert-file').  In particular, there is a tool-bar icon to grab
 ;;  an alias from the From line of the current message.
 
+;;; Change Log:
+
+;; $Id: mh-alias.el,v 1.25 2003/01/27 04:16:47 wohler Exp $
+
 ;;; Code:
 
 (require 'mh-e)
@@ -283,7 +287,7 @@ Blind aliases or users from /etc/passwd are not expanded."
                   (multi-prompt "," nil prompt mh-alias-alist nil nil))
                  (t
                   (split-string
-                   (completing-read "To: " mh-alias-alist nil nil)
+                   (completing-read prompt mh-alias-alist nil nil)
                    ","))))))
       (if (not mh-alias-expand-aliases-flag)
           (mapconcat 'identity the-answer ", ")
@@ -447,14 +451,14 @@ Set `mh-alias-insert-file' or set AliasFile in your .mh_profile file"))
             (completing-read "Alias file [press Tab]: "
                              (mapcar 'list autolist) nil t))))))))
 
+;;;###mh-autoload
 (defun mh-alias-address-to-alias (address)
   "Return the ADDRESS alias if defined, or nil."
   (let* ((aliases (mh-alias-ali address t)))
     (if (string-equal aliases address)
         nil                             ; ali returned same string -> no.
-      ;; For the comma-separated aliases reyurned by ali, check that one of
-      ;; them doesn't expand into a list.  e.g. we do have an individual
-      ;; alias for that adress.
+      ;; Double-check that we have an individual alias. This means that the
+      ;; alias doesn't expand into a list (of which this address is part).
       (car (delq nil (mapcar
                       (function
                        (lambda (alias)
@@ -501,7 +505,7 @@ after it."
                 ((string-match "^a" answer)
                  (forward-line 1))
                 (t
-                 error "Quitting."))))
+                 (error "Quitting")))))
        ;; No, so sort-in at the right place
        ;; search for "^alias", then "^alia", etc.
        ((eq mh-alias-insertion-location 'sorted)
index 36c314e65880f7956ce43a4c1293c88ab4630272..20e7ecf4ee97d950f89c51b891f220994100d3ff 100644 (file)
@@ -30,7 +30,7 @@
 
 ;;; Change Log:
 
-;; $Id: mh-comp.el,v 1.26 2003/01/08 23:21:16 wohler Exp $
+;; $Id: mh-comp.el,v 1.173 2003/01/26 19:37:22 jchonig Exp $
 
 ;;; Code:
 
@@ -461,7 +461,7 @@ setting of the variable `mh-redist-full-contents'.  See its documentation."
                        "-component" "Resent:"
                        "-text" (format "\"%s %s\"" to cc))
       (if mh-redist-background
-          (mh-exec-cmd-daemon "/bin/sh" "-c"
+          (mh-exec-cmd-daemon "/bin/sh" nil "-c"
                               (format "mhdist=1 mhaltmsg=%s %s %s %s"
                                       (if mh-redist-full-contents
                                           buffer-file-name
@@ -1038,12 +1038,18 @@ called, with no arguments, before the signature is actually inserted."
   (let ((file-name buffer-file-name))
     (save-buffer)
     (message "Checking recipients...")
-    (mh-in-show-buffer ("*Recipients*")
+    (mh-in-show-buffer (mh-recipients-buffer)
       (bury-buffer (current-buffer))
       (erase-buffer)
       (mh-exec-cmd-output "whom" t file-name))
     (message "Checking recipients...done")))
 
+(defun mh-tidy-draft-buffer ()
+  "Run when a draft buffer is destroyed."
+  (let ((buffer (get-buffer mh-recipients-buffer)))
+    (if buffer
+       (kill-buffer buffer))))
+
 \f
 
 ;;; Routines to compose and send a letter.
@@ -1067,20 +1073,29 @@ The versions of MH-E, Emacs, and MH are shown."
   ;; Lazily initialize mh-x-mailer-string.
   (when (null mh-x-mailer-string)
     (save-window-excursion
-      (mh-version)
-      (set-buffer mh-temp-buffer)
-      (if mh-nmh-flag
-          (search-forward-regexp "^nmh-\\(\\S +\\)")
-        (search-forward-regexp "^MH \\(\\S +\\)" nil t))
-      (let ((x-mailer-mh (buffer-substring (match-beginning 1) (match-end 1))))
-        (setq mh-x-mailer-string
-              (format "MH-E %s; %s %s; %s %d.%d"
-                      mh-version (if mh-nmh-flag "nmh" "MH") x-mailer-mh
-                      (if mh-xemacs-flag
-                          "XEmacs"
-                        "Emacs")
-                      emacs-major-version emacs-minor-version)))
-      (kill-buffer mh-temp-buffer)))
+      ;; User would be confused if version info buffer disappeared magically,
+      ;; so don't delete buffer if it already existed.
+      (let ((info-buffer-exists-p (get-buffer mh-info-buffer)))
+        (mh-version)
+        (set-buffer mh-info-buffer)
+        (if mh-nmh-flag
+            (search-forward-regexp "^nmh-\\(\\S +\\)")
+          (search-forward-regexp "^MH \\(\\S +\\)" nil t))
+        (let ((x-mailer-mh (buffer-substring (match-beginning 1)
+                                             (match-end 1))))
+          (setq mh-x-mailer-string
+                (format "MH-E %s; %s %s; %sEmacs %s"
+                        mh-version (if mh-nmh-flag "nmh" "MH") x-mailer-mh
+                        (if mh-xemacs-flag "X" "GNU ")
+                        (cond ((not mh-xemacs-flag) emacs-version)
+                              ((string-match "[0-9.]*\\( +\([ a-z]+[0-9]+\)\\)?"
+                                             emacs-version)
+                               (match-string 0 emacs-version))
+                              (t (format "%s.%s"
+                                         emacs-major-version
+                                         emacs-minor-version))))))
+        (if (not info-buffer-exists-p)
+            (kill-buffer mh-info-buffer)))))
   ;; Insert X-Mailer, but only if it doesn't already exist.
   (save-excursion
     (when (null (mh-goto-header-field "X-Mailer"))
@@ -1152,7 +1167,9 @@ CONFIG is the window configuration to restore after sending the letter."
   (setq mh-annotate-char annotate-char)
   (setq mh-annotate-field annotate-field)
   (setq mh-previous-window-config config)
-  (setq mode-line-buffer-identification (list "{%b}"))
+  (setq mode-line-buffer-identification (list "    {%b}"))
+  (mh-logo-display)
+  (add-hook 'kill-buffer-hook 'mh-tidy-draft-buffer nil t)
   (if (and (boundp 'mh-compose-letter-function)
            mh-compose-letter-function)
       ;; run-hooks will not pass arguments.
@@ -1223,7 +1240,7 @@ Insert X-Face field if the file specified by `mh-x-face-file' exists."
            (recenter -1)
            (set-buffer draft-buffer))   ; for annotation below
           (t
-           (mh-exec-cmd-daemon mh-send-prog "-nodraftfolder" "-noverbose"
+           (mh-exec-cmd-daemon mh-send-prog nil "-nodraftfolder" "-noverbose"
                                mh-send-args file-name)))
     (if mh-annotate-char
         (mh-annotate-msg mh-sent-from-msg
index ccda1a8b192e55a574d045213acecac4de00db89..9bc67afcfa389bd60bccf651a423774f139dbaac 100644 (file)
 
 ;;; Change Log:
 
-;; $Id: mh-customize.el,v 1.1 2003/01/08 23:21:16 wohler Exp $
+;; $Id: mh-customize.el,v 1.30 2003/02/02 17:28:50 wohler Exp $
 
 ;;; Code:
+(provide 'mh-customize)
+(require 'mh-e)
 
 ;;;###mh-autoload
-(defun mh-customize ()
-  "Customize MH-E variables."
-  (interactive)
-  (customize-group 'mh))
+(defun mh-customize (&optional delete-other-windows-flag)
+  "Customize MH-E variables.
+With optional argument DELETE-OTHER-WINDOWS-FLAG, other windows in the frame
+are removed."
+  (interactive "P")
+  (customize-group 'mh)
+  (when delete-other-windows-flag
+    (delete-other-windows)))
 
 ;;; MH-E Customization Groups
 
@@ -326,13 +332,14 @@ See `mh-search-folder' and `mh-index-search' for details."
        (if (member mh-tool-bar-item-prefs mh-tool-bar-folder-buttons)
            (tool-bar-add-item "preferences" (lambda ()
                                               (interactive)
-                                              (customize-group "mh"))
+                                              (mh-customize t))
                               'mh-showtoolbar-customize
                               :help mh-tool-bar-item-prefs))
        (if (member mh-tool-bar-item-help mh-tool-bar-folder-buttons)
            (tool-bar-add-item "help" (lambda ()
                                        (interactive)
-                                       (Info-goto-node "(mh-e)Top"))
+                                       (Info-goto-node "(mh-e)Top")
+                                       (delete-other-windows))
                               'mh-showtoolbar-help
                               :help mh-tool-bar-item-help))
        tool-bar-map))))
@@ -373,13 +380,14 @@ See `mh-search-folder' and `mh-index-search' for details."
        (if (member mh-tool-bar-item-comp-prefs mh-tool-bar-letter-buttons)
           (tool-bar-add-item "preferences" (lambda ()
                                              (interactive)
-                                             (customize-group "mh-compose"))
+                                             (mh-customize t))
                              'mh-lettertoolbar-customize
                              :help mh-tool-bar-item-comp-prefs))
        (if (member mh-tool-bar-item-help mh-tool-bar-letter-buttons)
           (tool-bar-add-item "help" (lambda ()
                                       (interactive)
-                                      (Info-goto-node "(mh-e)Draft Editing"))
+                                      (Info-goto-node "(mh-e)Draft Editing")
+                                      (delete-other-windows))
                              'mh-lettertoolbar-help
                              :help mh-tool-bar-item-help))
           tool-bar-map))))
@@ -485,13 +493,14 @@ See `mh-search-folder' and `mh-index-search' for details."
        (if (member mh-tool-bar-item-prefs mh-tool-bar-folder-buttons)
            (tool-bar-add-item "preferences" (lambda ()
                                               (interactive)
-                                              (customize-group "mh"))
+                                              (mh-customize t))
                               'mh-foldertoolbar-customize
                               :help mh-tool-bar-item-prefs))
        (if (member mh-tool-bar-item-help mh-tool-bar-folder-buttons)
            (tool-bar-add-item "help" (lambda ()
                                        (interactive)
-                                       (Info-goto-node "(mh-e)Top"))
+                                       (Info-goto-node "(mh-e)Top")
+                                       (delete-other-windows))
                               'mh-foldertoolbar-help
                               :help mh-tool-bar-item-help))
        tool-bar-map))
@@ -631,6 +640,8 @@ be updated manually with the \\[mh-speed-flists] command."
   :type 'boolean
   :group 'mh-speed)
 
+\f
+
 ;;; Options for controlling scan listing (:group 'mh-folder)
 
 (defcustom mh-adaptive-cmd-note-flag t
@@ -646,13 +657,37 @@ If you prefer fixed-width message numbers, set this variable to nil and call
   :type 'boolean
   :group 'mh-folder)
 
-(defcustom mh-auto-folder-collect-flag t
-  "*Non-nil means to collect all folder names at startup in the background.
-Otherwise, the internal list of folder names is built as folders are
-referenced."
+(defcustom mh-default-folder-list nil
+  "*Alist of addresses and folders.
+When refiling messages, these folders are the default that is provided if the
+sender has the associated address. You do not need to list your aliases here
+as that lookup is already performed.
+See `mh-prompt-for-refile-folder' and `mh-folder-from-address' for more
+information."
+  :type '(repeat (list (string :tag "Address")
+                       (string :tag "Folder")))
+  :group 'mh-folder)
+
+(defcustom mh-default-folder-must-exist-flag t
+  "*Non-nil means guessed folder name must exist to be used.
+If this variable is t, then the guessed name is only used if the folder
+already exists\; if the folder doesn't exist, then the last folder name used
+is suggested. This is useful if you get mail from various people for whom you
+have an alias, but file them all in the same project folder.
+See `mh-prompt-for-refile-folder' and `mh-folder-from-address' for more
+information."
   :type 'boolean
   :group 'mh-folder)
 
+(defcustom mh-default-folder-prefix ""
+  "*Prefix used for guessed folder names.
+This can be used to put folders associated with your aliases in a sub-folder
+so as to not clutter your mail directory.
+See `mh-prompt-for-refile-folder' and `mh-folder-from-address' for more
+information."
+  :type 'string
+  :group 'mh-folder)
+
 (defcustom mh-inc-prog "inc"
   "*Program to run to incorporate new mail into a folder.
 Normally \"inc\".  This file is searched for relative to
@@ -742,6 +777,8 @@ display MIME content using \"M-! mhshow RET\""
   :type 'boolean
   :group 'mh-folder)
 
+\f
+
 ;;; Message display (:group 'mh-show)
 
 (defcustom mh-bury-show-buffer-flag t
@@ -761,18 +798,18 @@ what is removed."
   :type 'boolean
   :group 'mh-show)
 
-(defcustom mh-decode-quoted-printable-flag
-  (not (null (and (fboundp 'executable-find)(executable-find "mimedecode"))))
-  "Non-nil means decode quoted-printable MIME part with `mimedecode'.
+(defcustom mh-decode-content-transfer-encoded-message-flag
+  (and (fboundp 'executable-find) (executable-find "mimencode") t)
+  "Non-nil means decode messages with `mimencode', if necessary.
 
-Quoted-printable message parts are translated to 8-bit characters by the
-`mimedecode' command. However, unless there is only one quoted-printable body
-part, Gnus will have already decoded the quoted-printable parts.
+Messages which are encoded as quoted-printable or base64 are translated into
+8-bit characters by the `mimencode' command.
 
-This variable is initialized t if `mimedecode' is available.
+This variable is initialized to t if `mimencode' is available.
 
-The source code for `mimedecode' can be obtained from
-http://www.freesoft.org/CIE/FAQ/mimedeco.c."
+The `mimencode' program is part of the metamail package. The source can be
+obtained from
+   ftp://thumper.bellcore.com/pub/nsb/"
   :type 'boolean
   :group 'mh-show)
 
@@ -812,7 +849,7 @@ list. The setting only has effect if `mh-decode-mime-flag' is non-nil."
 (defcustom mh-highlight-citation-p 'gnus
   "How to highlight citations in show buffers.
 The gnus method uses a different color for each indentation."
-  :type '(choice (const :tag "Use gnus" gnus)
+  :type '(choice (const :tag "Use Gnus" gnus)
                  (const :tag "Use font-lock" font-lock)
                  (const :tag "Don't fontify" nil))
   :group 'mh-show)
@@ -906,12 +943,11 @@ Done using `mh-invisible-header-fields' as input."
   (setq mh-invisible-headers
         (concat
          "^"
-         (let ((max-specpdl-size 1000)) ;workaround for insufficient default
-           (regexp-opt
-            (append
-             (if (not mh-show-use-xface-flag)
-                 '("X-Face: "))
-             mh-invisible-header-fields))))))
+         (let ((max-specpdl-size 1000) ;workaround for insufficient default
+               (fields (append (if (not mh-show-use-xface-flag)
+                                   '("X-Face: "))
+                               mh-invisible-header-fields)))
+           (regexp-opt fields t)))))
 
 (defun mh-invisible-header-fields-set (symbol value)
   "Update `mh-invisible-header-fields'.
@@ -1003,6 +1039,7 @@ variable `mh-invisible-fields' is set."
     "X-Mailing-List: "                  ; Unknown mailing list managers
     "X-Mailman-Version: "               ; Mailman mailing list manager
     "X-Message-Id"
+    "X-MHE-Checksum"                    ; Checksum added during index search
     "X-MimeOLE: "                       ; MS Outlook
     "X-Mozilla-Status: "                ; Netscape/Mozilla
     "X-Msmail-"                         ; MS Outlook
@@ -1044,19 +1081,21 @@ variable `mh-invisible-fields' is set."
     "X400-"                             ; X400
     "Xref: ")
 "*List of header fields that are not to be shown.
-Regexps are not allowed. Unique fields should have a \": \" suffix;
-otherwise, the element can be used to render an entire class of fields
-that start with the same prefix invisible.
+Regexps are not allowed. Unique fields should have a \": \" suffix; otherwise,
+the element can be used to render invisible an entire class of fields that
+start with the same prefix.
 This variable is ignored if `mh-visible-headers' is set."
   :type '(repeat (string :tag "Header field"))
   :set 'mh-invisible-header-fields-set
   :group 'mh-show)
 
+\f
+
 ;;; Composing messages (:group 'mh-letter)
 
 (defcustom mh-compose-insertion (if (locate-library "mml") 'gnus 'mhn)
   "Use either 'gnus or 'mhn to insert MIME message directives in messages."
-  :type '(choice (const :tag "Use gnus" gnus)
+  :type '(choice (const :tag "Use Gnus" gnus)
                  (const :tag "Use mhn"  mhn))
   :group 'mh-letter)
 
@@ -1122,7 +1161,8 @@ This corresponds to:
 While it might be tempting to add a descriptive name to the mailing list
 address, consider that this field will appear in other people's outgoing
 mail in their To: field.  It might be best to keep it simple."
-  :type '(repeat (list (string :tag "regexp") (string :tag "address")))
+  :type '(repeat (list (string :tag "Regexp")
+                       (string :tag "Address")))
   :group 'mh-letter)
 
 (defcustom mh-insert-x-mailer-flag t
@@ -1225,6 +1265,8 @@ to the yanked region."
   :type '(choice function (const nil))
   :group 'mh-letter)
 
+\f
+
 ;;; Alias handling (:group 'mh-alias)
 
 (defcustom mh-alias-system-aliases
@@ -1293,21 +1335,30 @@ Options are sorted alphabetically, at the top of the file or at the bottom."
                  (const :tag "At the bottom of file" bottom))
   :group 'mh-alias)
 
+\f
+
 ;;; Indexed searching (:group 'mh-index)
 
 (defcustom mh-index-program nil
   "Indexing program that MH-E shall use.
-The possible choices are swish++, swish-e, namazu, glimpse and grep. By
-default this variable is nil which means that the programs are tried in order
-and the first one found is used."
-  :type '(choice (const :tag "auto-detect" nil)
+The possible choices are swish++, swish-e, mairix, namazu, glimpse, pick and
+grep. By default this variable is nil which means that the programs are tried
+in order and the first one found is used.
+
+More information about setting up an indexing program to use with MH-E can be
+found in the documentation of `mh-index-search'."
+  :type '(choice (const :tag "Auto-detect" nil)
                  (const :tag "swish++" swish++)
                  (const :tag "swish-e" swish)
+                 (const :tag "mairix" mairix)
                  (const :tag "namazu" namazu)
                  (const :tag "glimpse" glimpse)
+                 (const :tag "pick" pick)
                  (const :tag "grep" grep))
   :group 'mh-index)
 
+\f
+
 ;;; Multiple personalities (:group 'mh-identity)
 
 (defcustom mh-identity-list nil
@@ -1366,11 +1417,13 @@ This would produce the equivalent of:
   ;;                (const "work"))
   :type (append
          '(radio)
-         (cons '(const :tag "none" nil)
+         (cons '(const :tag "None" nil)
                (mapcar (function (lambda (arg) `(const ,arg)))
                        (mapcar 'car mh-identity-list))))
   :group 'mh-identity)
 
+\f
+
 ;;; Hooks (:group 'mh-hooks + group where hook defined)
 
 ;;; These are alphabetized. All hooks should be placed in the 'mh-hook group;
@@ -1408,12 +1461,6 @@ See also `mh-quit-hook'."
   :group 'mh-hooks
   :group 'mh-folder)
 
-(defcustom mh-folder-list-change-hook nil
-  "Invoked whenever the cached folder list `mh-folder-list' is changed."
-  :type 'hook
-  :group 'mh-hooks
-  :group 'mh-folder)
-
 (defcustom mh-folder-mode-hook nil
   "Invoked in `mh-folder-mode' on a new folder."
   :type 'hook
@@ -1527,6 +1574,8 @@ will be removed from the unseen sequence."
   "Face used for the current folder when it has unread messages."
   :group 'mh-speed-faces)
 
+\f
+
 ;;; Faces used in scan listing (:group mh-folder-faces)
 
 (defvar mh-folder-body-face 'mh-folder-body-face
@@ -1656,6 +1705,8 @@ will be removed from the unseen sequence."
   "Face for highlighting the To: string in MH-Folder buffers."
   :group 'mh-folder-faces)
 
+\f
+
 ;;; Faces used in message display (:group mh-show-faces)
 
 (defvar mh-show-cc-face 'mh-show-cc-face
@@ -1727,6 +1778,8 @@ will be removed from the unseen sequence."
   "Face for highlighting the Subject header field.")
 (copy-face 'mh-folder-subject-face 'mh-show-subject-face)
 
+\f
+
 ;;; Faces used in indexed searches (:group mh-index-faces)
 
 (defvar mh-index-folder-face 'mh-index-folder-face
@@ -1741,8 +1794,6 @@ will be removed from the unseen sequence."
   "Face for highlighting folders in MH-Index buffers."
   :group 'mh-index-faces)
 
-(provide 'mh-customize)
-
 ;;; Local Variables:
 ;;; indent-tabs-mode: nil
 ;;; sentence-end-double-space: nil
index 8b8d2e11531fbcb8dd4f8bd645a9d66f8c04bce3..c51d6aa4b8eaf6a5eaef0b5015b1b30bfd31ae45 100644 (file)
@@ -4,7 +4,7 @@
 
 ;; Author: Bill Wohler <wohler@newt.com>
 ;; Maintainer: Bill Wohler <wohler@newt.com>
-;; Version: 7.1
+;; Version: 7.2
 ;; Keywords: mail
 
 ;; This file is part of GNU Emacs.
@@ -79,7 +79,7 @@
 ;; Maintenance picked up by Bill Wohler <wohler@newt.com> and the
 ;; SourceForge Crew <http://mh-e.sourceforge.net/>. 2001.
 
-;; $Id: mh-e.el,v 1.34 2003/01/08 23:21:16 wohler Exp $
+;; $Id: mh-e.el,v 1.262 2003/02/03 19:11:43 wohler Exp $
 
 ;;; Code:
 
 (defvar font-lock-auto-fontify)
 (defvar font-lock-defaults)
 
-(defconst mh-version "7.1" "Version number of MH-E.")
+(defconst mh-version "7.2" "Version number of MH-E.")
 
 ;;; Autoloads
 (autoload 'Info-goto-node "info")
@@ -457,6 +457,8 @@ is done highlighting.")
 (defvar mh-folder-mode-map (make-keymap)
   "Keymap for MH folders.")
 
+(defvar mh-arrow-marker nil)            ;Marker for arrow display in fringe.
+
 (defvar mh-delete-list nil)             ;List of msg numbers to delete.
 
 (defvar mh-refile-list nil)             ;List of folder names in mh-seq-list.
@@ -512,6 +514,8 @@ the Emacs front end to the MH mail system."
   (mh-find-path)
   (if arg
       (call-interactively 'mh-visit-folder)
+    (unless (get-buffer mh-inbox)
+      (mh-visit-folder mh-inbox (symbol-name mh-unseen-seq)))
     (mh-inc-folder)))
 
 ;;;###autoload
@@ -537,11 +541,11 @@ prompt for the message sequence. If variable `transient-mark-mode' is non-nil
 and the mark is active, then the selected region is marked for deletion."
   (interactive (list (cond
                       ((mh-mark-active-p t)
-                       (mh-region-to-msg-list (region-beginning) (region-end)))
+                       (cons (region-beginning) (region-end)))
                       (current-prefix-arg
                        (mh-read-seq-default "Delete" t))
                       (t
-                       (mh-get-msg-num t)))))
+                       (cons (line-beginning-position) (line-end-position))))))
   (mh-delete-msg-no-motion msg-or-seq)
   (mh-next-msg))
 
@@ -552,9 +556,13 @@ then prompt for the message sequence."
   (interactive (list (if current-prefix-arg
                          (mh-read-seq-default "Delete" t)
                        (mh-get-msg-num t))))
-  (if (numberp msg-or-seq)
-      (mh-delete-a-msg msg-or-seq)
-    (mh-map-to-seq-msgs 'mh-delete-a-msg msg-or-seq)))
+  (cond ((numberp msg-or-seq)
+         (mh-delete-a-msg msg-or-seq))
+        ((and (consp msg-or-seq)
+              (numberp (car msg-or-seq)) (numberp (cdr msg-or-seq)))
+         (mh-iterate-on-messages-in-region () (car msg-or-seq) (cdr msg-or-seq)
+           (mh-delete-a-msg nil)))
+        (t (mh-map-to-seq-msgs 'mh-delete-a-msg msg-or-seq))))
 
 (defun mh-execute-commands ()
   "Process outstanding delete and refile requests."
@@ -585,6 +593,7 @@ Type \"\\[mh-show]\" to show the message normally again."
        (mh-invalidate-show-buffer))
   (let ((mh-decode-mime-flag nil)
         (mhl-formfile nil)
+        (mh-decode-content-transfer-encoded-message-flag nil)
         (mh-clean-message-header-flag nil))
     (mh-show-msg nil)
     (mh-in-show-buffer (mh-show-buffer)
@@ -645,6 +654,62 @@ Do not call this function from outside MH-E; use \\[mh-rmail] instead."
         (t (forward-line -1)
            (message "No more undeleted messages"))))
 
+(defun mh-folder-from-address ()
+  "Determine folder name from address in From field.
+Takes the address in the From: header field, and returns one of:
+
+  a) The folder name associated with the address in the alist
+     `mh-default-folder-list'.
+
+  b) The address' corresponding alias from the user's personal
+     aliases file prefixed by `mh-default-folder-prefix'.
+
+Returns nil if the address was not found in either place or if the variable
+`mh-default-folder-must-exist-flag' is nil and the folder does not exist."
+  ;; Is address in mh-default-folder-list?
+  (let* ((address
+          (nth 1 (mail-extract-address-components
+                  (mh-extract-from-header-value))))
+         (folder-name
+          (nth 1 (assoc-ignore-case address mh-default-folder-list))))
+
+    ;; If not, is there an alias for the address?
+    (if (not folder-name)
+        (let* ((alias (mh-alias-address-to-alias address)))
+          (setq folder-name
+                (and alias (concat "+" mh-default-folder-prefix alias)))))
+
+    ;; If mh-default-folder-must-exist-flag set, check that folder exists.
+    (if (and folder-name
+             (or (not mh-default-folder-must-exist-flag)
+                 (file-exists-p (mh-expand-file-name folder-name))))
+        folder-name)))
+
+(defun mh-prompt-for-refile-folder ()
+  "Prompt the user for a folder in which the message should be filed.
+The folder is returned as a string.
+
+If `mh-default-folder-for-message-function' is a function then the message
+being refiled is yanked into a temporary buffer and the function is called to
+intelligently guess where the message is to be refiled.
+
+Otherwise, a default folder name is generated by `mh-folder-from-address'."
+  (mh-prompt-for-folder
+   "Destination"
+   (let ((refile-file (mh-msg-filename (mh-get-msg-num t))))
+     (save-excursion
+       (set-buffer (get-buffer-create mh-temp-buffer))
+       (erase-buffer)
+       (insert-file-contents refile-file)
+       (or (and mh-default-folder-for-message-function
+                (let ((buffer-file-name refile-file))
+                  (funcall mh-default-folder-for-message-function)))
+           (mh-folder-from-address)
+           (and (eq 'refile (car mh-last-destination-folder))
+                (symbol-name (cdr mh-last-destination-folder)))
+           "")))
+   t))
+
 (defun mh-refile-msg (msg-or-seq folder)
   "Refile MSG-OR-SEQ (default: displayed message) into FOLDER.
 If optional prefix argument provided, then prompt for message sequence.
@@ -653,31 +718,21 @@ selected region is marked for refiling."
   (interactive
    (list (cond
           ((mh-mark-active-p t)
-           (mh-region-to-msg-list (region-beginning) (region-end)))
+           (cons (region-beginning) (region-end)))
           (current-prefix-arg
            (mh-read-seq-default "Refile" t))
           (t
-           (mh-get-msg-num t)))
-         (intern
-          (mh-prompt-for-folder
-           "Destination"
-           (or (and mh-default-folder-for-message-function
-                    (let ((refile-file (mh-msg-filename (mh-get-msg-num t))))
-                      (save-excursion
-                        (set-buffer (get-buffer-create mh-temp-buffer))
-                        (erase-buffer)
-                        (insert-file-contents refile-file)
-                        (let ((buffer-file-name refile-file))
-                          (funcall mh-default-folder-for-message-function)))))
-               (and (eq 'refile (car mh-last-destination-folder))
-                    (symbol-name (cdr mh-last-destination-folder)))
-               "")
-           t))))
+           (cons (line-beginning-position) (line-end-position))))
+         (intern (mh-prompt-for-refile-folder))))
   (setq mh-last-destination (cons 'refile folder)
         mh-last-destination-folder mh-last-destination)
-  (if (numberp msg-or-seq)
-      (mh-refile-a-msg msg-or-seq folder)
-    (mh-map-to-seq-msgs 'mh-refile-a-msg msg-or-seq folder))
+  (cond ((numberp msg-or-seq)
+         (mh-refile-a-msg msg-or-seq folder))
+        ((and (consp msg-or-seq)
+              (numberp (car msg-or-seq)) (numberp (cdr msg-or-seq)))
+         (mh-iterate-on-messages-in-region () (car msg-or-seq) (cdr msg-or-seq)
+           (mh-refile-a-msg nil folder)))
+        (t (mh-map-to-seq-msgs 'mh-refile-a-msg msg-or-seq folder)))
   (mh-next-msg))
 
 (defun mh-refile-or-write-again (message)
@@ -701,7 +756,9 @@ Restore the previous window configuration, if one exists.
 The value of `mh-before-quit-hook' is a list of functions to be called, with
 no arguments, immediately upon entry to this function.
 The value of `mh-quit-hook' is a list of functions to be called, with no
-arguments, upon exit of this function."
+arguments, upon exit of this function.
+MH-E working buffers (whose name begins with \" *mh-\" or \"*MH-E \") are
+killed."
   (interactive)
   (run-hooks 'mh-before-quit-hook)
   (let ((show-buffer (get-buffer mh-show-buffer)))
@@ -710,12 +767,13 @@ arguments, upon exit of this function."
   (mh-update-sequences)
   (mh-destroy-postponed-handles)
   (bury-buffer (current-buffer))
-  (if (get-buffer mh-temp-buffer)
-      (kill-buffer mh-temp-buffer))
-  (if (get-buffer mh-temp-folders-buffer)
-      (kill-buffer mh-temp-folders-buffer))
-  (if (get-buffer mh-temp-sequences-buffer)
-      (kill-buffer mh-temp-sequences-buffer))
+
+  ;; Delete all MH-E temporary and working buffers.
+  (dolist (buffer (buffer-list))
+    (when (or (string-match "^ \\*mh-" (buffer-name buffer))
+              (string-match "^\\*MH-E " (buffer-name buffer)))
+      (kill-buffer buffer)))
+
   (if mh-previous-window-config
       (set-window-configuration mh-previous-window-config))
   (run-hooks 'mh-quit-hook))
@@ -985,7 +1043,7 @@ If variable `transient-mark-mode' is non-nil and the mark is active, then the
 selected region is unmarked."
   (interactive (list (cond
                       ((mh-mark-active-p t)
-                       (mh-region-to-msg-list (region-beginning) (region-end)))
+                       (cons (region-beginning) (region-end)))
                       (current-prefix-arg
                        (mh-read-seq-default "Undo" t))
                       (t
@@ -1006,6 +1064,10 @@ selected region is unmarked."
                  (mh-maybe-show))
              (goto-char original-position)
              (error "Nothing to undo"))))
+        ((and (consp msg-or-seq)
+              (numberp (car msg-or-seq)) (numberp (cdr msg-or-seq)))
+         (mh-iterate-on-messages-in-region () (car msg-or-seq) (cdr msg-or-seq)
+           (mh-undo-msg nil)))
         (t
          (mh-map-to-seq-msgs 'mh-undo-msg msg-or-seq)))
   (if (not (mh-outstanding-commands-p))
@@ -1045,7 +1107,7 @@ compiled then macro expansion happens at compile time."
   "Display version information about MH-E and the MH mail handling system."
   (interactive)
   (mh-find-progs)
-  (set-buffer (get-buffer-create mh-temp-buffer))
+  (set-buffer (get-buffer-create mh-info-buffer))
   (erase-buffer)
   ;; MH-E version.
   (insert "MH-E " mh-version "\n\n")
@@ -1079,10 +1141,13 @@ compiled then macro expansion happens at compile time."
       (call-process "uname" nil t nil "-a")
     (file-error))
   (goto-char (point-min))
-  (display-buffer mh-temp-buffer))
+  (display-buffer mh-info-buffer))
 
-(defun mh-parse-flist-output-line (line)
-  "Parse LINE to generate folder name, unseen messages and total messages."
+(defun mh-parse-flist-output-line (line &optional current-folder)
+  "Parse LINE to generate folder name, unseen messages and total messages.
+If CURRENT-FOLDER is non-nil then it contains the current folder name and it is
+used to avoid problems in corner cases involving folders whose names end with a
+'+' character."
   (with-temp-buffer
     (insert line)
     (goto-char (point-max))
@@ -1096,23 +1161,24 @@ compiled then macro expansion happens at compile time."
           (when (search-backward " has " (point-min) t)
             (setq unseen (read-from-string (buffer-substring-no-properties
                                             (match-end 0) p)))
-            (while (or (eq (char-after) ?+) (eq (char-after) ? ))
+            (while (eq (char-after) ? )
               (backward-char))
             (setq folder (buffer-substring-no-properties
                           (point-min) (1+ (point))))
+            (when (and (equal (aref folder (1- (length folder))) ?+)
+                       (equal current-folder folder))
+              (setq folder (substring folder 0 (1- (length folder)))))
             (values (format "+%s" folder) (car unseen) (car total))))))))
 
 (defun mh-folder-size (folder)
   "Find size of FOLDER."
   (with-temp-buffer
     (call-process (expand-file-name "flist" mh-progs) nil t nil
-                  "-norecurse" folder)
+                  "-norecurse" folder "-sequence" (symbol-name mh-unseen-seq))
     (goto-char (point-min))
     (multiple-value-bind (folder1 unseen total)
         (mh-parse-flist-output-line
          (buffer-substring (point) (line-end-position)))
-      (unless (equal folder folder1)
-        (error "Call to flist failed on folder %s" folder))
       (values total unseen))))
 
 (defun mh-visit-folder (folder &optional range index-data)
@@ -1123,9 +1189,13 @@ If RANGE is nil (the default if it is omitted when called non-interactively),
 then all messages in FOLDER are displayed.
 
 If an index buffer is being created then INDEX-DATA is used to initialize the
-index buffer specific data structures."
+index buffer specific data structures.
+
+A prefix argument will cause a prompt for the RANGE of messages
+regardless of the size of the `mh-large-folder' variable."
   (interactive (let ((folder-name (mh-prompt-for-folder "Visit" mh-inbox t)))
-                 (list folder-name (mh-read-msg-range folder-name))))
+                 (list folder-name
+                       (mh-read-msg-range folder-name current-prefix-arg))))
   (let ((config (current-window-configuration))
         (threaded-view-flag mh-show-threads-flag))
     (save-excursion
@@ -1171,7 +1241,7 @@ Flush MH-E's state out to MH. The message at the cursor becomes current."
           (mh-define-sequence 'cur (list new-cur))
           (beginning-of-line)
           (if (looking-at mh-scan-good-msg-regexp)
-              (mh-notate nil mh-note-cur mh-cmd-note)))
+              (mh-notate-cur)))
       (or folder-set
           (save-excursion
             ;; psg - mh-current-folder is nil if mh-summary-height < 4 !
@@ -1186,26 +1256,36 @@ Flush MH-E's state out to MH. The message at the cursor becomes current."
 
 (defun mh-delete-a-msg (msg)
   "Delete the MSG.
+If MSG is nil then the message at point is deleted.
+
 The value of `mh-delete-msg-hook' is a list of functions to be called, with no
 arguments, after the message has been deleted."
   (save-excursion
-    (mh-goto-msg msg nil t)
+    (if (numberp msg)
+        (mh-goto-msg msg nil t)
+      (beginning-of-line)
+      (setq msg (mh-get-msg-num t)))
     (if (looking-at mh-scan-refiled-msg-regexp)
         (error "Message %d is refiled.  Undo refile before deleting" msg))
     (if (looking-at mh-scan-deleted-msg-regexp)
         nil
       (mh-set-folder-modified-p t)
       (setq mh-delete-list (cons msg mh-delete-list))
-      (mh-notate msg mh-note-deleted mh-cmd-note)
+      (mh-notate nil mh-note-deleted mh-cmd-note)
       (run-hooks 'mh-delete-msg-hook))))
 
 (defun mh-refile-a-msg (msg folder)
   "Refile MSG in FOLDER.
+If MSG is nil then the message at point is refiled.
+
 Folder is a symbol, not a string.
 The value of `mh-refile-msg-hook' is a list of functions to be called, with no
 arguments, after the message has been refiled."
   (save-excursion
-    (mh-goto-msg msg nil t)
+    (if (numberp msg)
+        (mh-goto-msg msg nil t)
+      (beginning-of-line)
+      (setq msg (mh-get-msg-num t)))
     (cond ((looking-at mh-scan-deleted-msg-regexp)
            (error "Message %d is deleted.  Undo delete before moving" msg))
           ((looking-at mh-scan-refiled-msg-regexp)
@@ -1222,7 +1302,7 @@ arguments, after the message has been refiled."
                   (push (list folder msg) mh-refile-list))
                  ((not (member msg (cdr (assoc folder mh-refile-list))))
                   (push msg (cdr (assoc folder mh-refile-list)))))
-           (mh-notate msg mh-note-refiled mh-cmd-note)
+           (mh-notate nil mh-note-refiled mh-cmd-note)
            (run-hooks 'mh-refile-msg-hook)))))
 
 (defun mh-next-msg ()
@@ -1271,15 +1351,21 @@ With optional argument COUNT, COUNT-1 unread messages are skipped."
       (mh-recenter nil)))
 
 (defun mh-undo-msg (msg)
-  "Undo the deletion or refile of one MSG."
-  (cond ((memq msg mh-delete-list)
-         (setq mh-delete-list (delq msg mh-delete-list)))
-        (t
-         (dolist (folder-msg-list mh-refile-list)
-           (setf (cdr folder-msg-list) (remove msg (cdr folder-msg-list))))
-         (setq mh-refile-list (loop for x in mh-refile-list
-                                    unless (null (cdr x)) collect x))))
-  (mh-notate msg ?  mh-cmd-note))
+  "Undo the deletion or refile of one MSG.
+If MSG is nil then act on the message at point"
+  (save-excursion
+    (if (numberp msg)
+        (mh-goto-msg msg t t)
+      (beginning-of-line)
+      (setq msg (mh-get-msg-num t)))
+    (cond ((memq msg mh-delete-list)
+           (setq mh-delete-list (delq msg mh-delete-list)))
+          (t
+           (dolist (folder-msg-list mh-refile-list)
+             (setf (cdr folder-msg-list) (remove msg (cdr folder-msg-list))))
+           (setq mh-refile-list (loop for x in mh-refile-list
+                                      unless (null (cdr x)) collect x))))
+    (mh-notate nil ?  mh-cmd-note)))
 
 \f
 
@@ -1423,6 +1509,9 @@ When a folder is visited, the hook `mh-folder-mode-hook' is run.
    'mh-show-buffer (format "show-%s" (buffer-name)) ; Buffer that displays msgs
    'mh-folder-filename                  ; e.g. "/usr/foobar/Mail/inbox/"
    (file-name-as-directory (mh-expand-file-name (buffer-name)))
+   'mh-arrow-marker (make-marker)       ; Marker where arrow is displayed
+   'overlay-arrow-position nil          ; Allow for simultaneous display in
+   'overlay-arrow-string ">"            ;  different MH-E buffers.
    'mh-showing-mode nil                 ; Show message also?
    'mh-delete-list nil                  ; List of msgs nums to delete
    'mh-refile-list nil                  ; List of folder names in mh-seq-list
@@ -1489,15 +1578,8 @@ Return in the folder's buffer."
           (message "Folder %s is empty" folder)
         (message "No messages in %s, range %s" folder range))
     (mh-goto-cur-msg))
-  (save-excursion
-    (when dont-exec-pending
-      ;; Re-annotate messages to be refiled...
-      (dolist (folder-msg-list mh-refile-list)
-        (dolist (msg (cdr folder-msg-list))
-          (mh-notate msg mh-note-refiled mh-cmd-note)))
-      ;; Re-annotate messages to be deleted...
-      (dolist (msg mh-delete-list)
-        (mh-notate msg mh-note-deleted mh-cmd-note)))))
+  (when dont-exec-pending
+    (mh-notate-deleted-and-refiled)))
 
 (defun mh-set-cmd-note (width)
   "Set `mh-cmd-note' to WIDTH characters (minimum of 2).
@@ -1655,7 +1737,7 @@ Return in the current buffer."
         (keep-lines mh-scan-valid-regexp) ; Flush random scan lines
         (setq mh-seq-list (mh-read-folder-sequences folder t))
         (when (equal (point-max) start-of-inc)
-          (mh-notate-seq 'cur mh-note-cur mh-cmd-note))
+          (mh-notate-cur))
         (mh-notate-user-sequences)
         (if new-mail-flag
             (progn
@@ -1689,7 +1771,7 @@ in what is now stored in the buffer-local variable `mh-mode-line-annotation'."
                              (count-lines (point-min) (point-max))
                            0))
       (setq mode-line-buffer-identification
-            (list (format "{%%b%s} %s msg%s"
+            (list (format "    {%%b%s} %s msg%s"
                           (if mh-mode-line-annotation
                               (format "/%s" mh-mode-line-annotation)
                             "")
@@ -1703,7 +1785,8 @@ in what is now stored in the buffer-local variable `mh-mode-line-annotation'."
                                            mh-last-msg-num))
                                   (mh-first-msg-num
                                    (format " (%d)" mh-first-msg-num))
-                                  ("")))))))))
+                                  (""))))))
+      (mh-logo-display))))
 
 (defun mh-unmark-all-headers (remove-all-flags)
   "Remove all '+' flags from the folder listing.
@@ -1737,14 +1820,16 @@ Optimized for speed (i.e., no regular expressions)."
   "Remove old cur notation."
   (let ((cur-msg (car (mh-seq-to-msgs 'cur))))
     (save-excursion
-      (and cur-msg
-           (mh-goto-msg cur-msg t t)
-           (looking-at mh-scan-cur-msg-number-regexp)
-           (mh-notate nil ?  mh-cmd-note)))))
+      (when (and cur-msg
+                 (mh-goto-msg cur-msg t t)
+                 (looking-at mh-scan-cur-msg-number-regexp))
+        (mh-notate nil ?  mh-cmd-note)
+        (setq overlay-arrow-position nil)))))
 
 (defun mh-remove-all-notation ()
   "Remove all notations on all scan lines that MH-E introduces."
   (save-excursion
+    (setq overlay-arrow-position nil)
     (goto-char (point-min))
     (while (not (eobp))
       (unless (or (equal (char-after) ?+) (eolp))
@@ -1762,10 +1847,11 @@ recenter the folder buffer."
     (cond ((and cur-msg
                 (mh-goto-msg cur-msg t t))
            (unless minimal-changes-flag
-             (mh-notate nil mh-note-cur mh-cmd-note)
+             (mh-notate-cur)
              (mh-recenter 0)
              (mh-maybe-show cur-msg)))
           (t
+           (setq overlay-arrow-position nil)
            (message "No current message")))))
 
 (defun mh-process-or-undo-commands (folder)
@@ -1976,12 +2062,14 @@ Expands ranges into set of individual numbers."
 (defun mh-notate-user-sequences ()
   "Mark the scan listing of all messages in user-defined sequences."
   (let ((seqs mh-seq-list)
-        name)
-    (while seqs
-      (setq name (mh-seq-name (car seqs)))
-      (if (not (mh-internal-seq name))
-          (mh-notate-seq name mh-note-seq (1+ mh-cmd-note)))
-      (setq seqs (cdr seqs)))))
+        (msg-hash (make-hash-table)))
+    (dolist (seq seqs)
+      (unless (mh-internal-seq (mh-seq-name seq))
+        (dolist (msg (mh-seq-msgs seq))
+          (setf (gethash msg msg-hash) t))))
+    (mh-iterate-on-messages-in-region msg (point-min) (point-max)
+      (when (gethash msg msg-hash)
+        (mh-notate nil mh-note-seq (1+ mh-cmd-note))))))
 
 (defun mh-internal-seq (name)
   "Return non-nil if NAME is the name of an internal MH-E sequence."
index f2ffeede00229ddff1947c6c6ce1b33c44e35129..1707793e114b11221d1ff757e0b8a98d6ae7658d 100644 (file)
@@ -32,7 +32,7 @@
 
 ;;; Change Log:
 
-;; $Id: mh-funcs.el,v 1.9 2003/01/08 23:21:16 wohler Exp $
+;; $Id: mh-funcs.el,v 1.43 2003/01/26 00:57:35 jchonig Exp $
 
 ;;; Code:
 
@@ -80,49 +80,66 @@ Default is the displayed message. If optional prefix argument is provided,
 then prompt for the message sequence."
   (interactive (list (cond
                       ((mh-mark-active-p t)
-                       (mh-region-to-msg-list (region-beginning) (region-end)))
+                       (cons (region-beginning) (region-end)))
                       (current-prefix-arg
                        (mh-read-seq-default "Copy" t))
                       (t
-                       (mh-get-msg-num t)))
+                       (cons (line-beginning-position) (line-end-position))))
                      (mh-prompt-for-folder "Copy to" "" t)))
-  (mh-exec-cmd "refile"
-               (cond ((numberp msg-or-seq) msg-or-seq)
-                     ((listp msg-or-seq) msg-or-seq)
-                     (t (mh-coalesce-msg-list (mh-seq-to-msgs msg-or-seq))))
-               "-link" "-src" mh-current-folder folder)
-  (if (numberp msg-or-seq)
-      (mh-notate msg-or-seq mh-note-copied mh-cmd-note)
-    (mh-notate-seq msg-or-seq mh-note-copied mh-cmd-note)))
+  (let ((msg-list (cond ((numberp msg-or-seq) (list msg-or-seq))
+                        ((symbolp msg-or-seq) (mh-seq-to-msgs msg-or-seq))
+                        ((and (consp msg-or-seq) (numberp (car msg-or-seq))
+                              (numberp (cdr msg-or-seq)))
+                         (let ((result ()))
+                           (mh-iterate-on-messages-in-region msg
+                               (car msg-or-seq) (cdr msg-or-seq)
+                             (mh-notate nil mh-note-copied mh-cmd-note)
+                             (push msg result))
+                           result))
+                        (t msg-or-seq))))
+    (mh-exec-cmd "refile" (mh-coalesce-msg-list msg-list)
+                 "-link" "-src" mh-current-folder folder)
+    (cond ((numberp msg-or-seq)
+           (mh-notate msg-or-seq mh-note-copied mh-cmd-note))
+          ((symbolp msg-or-seq)
+           (mh-notate-seq msg-or-seq mh-note-copied mh-cmd-note)))))
 
 ;;;###mh-autoload
 (defun mh-kill-folder ()
   "Remove the current folder and all included messages.
 Removes all of the messages (files) within the specified current folder,
-and then removes the folder (directory) itself.
-The value of `mh-folder-list-change-hook' is a list of functions to be called,
-with no arguments, after the folders has been removed."
+and then removes the folder (directory) itself."
   (interactive)
-  (if (yes-or-no-p (format "Remove folder %s (and all included messages)?"
-                           mh-current-folder))
-      (let ((folder mh-current-folder))
-        (if (null mh-folder-list)
-            (mh-set-folder-list))
+  (if (or mh-index-data
+          (yes-or-no-p (format "Remove folder %s (and all included messages)?"
+                               mh-current-folder)))
+      (let ((folder mh-current-folder)
+            (window-config mh-previous-window-config))
         (mh-set-folder-modified-p t)    ; lock folder to kill it
-        (mh-exec-cmd-daemon "rmf" folder)
-        (setq mh-folder-list
-              (delq (assoc folder mh-folder-list) mh-folder-list))
+        (mh-exec-cmd-daemon "rmf" 'mh-rmf-daemon folder)
         (when (boundp 'mh-speed-folder-map)
           (mh-speed-invalidate-map folder))
-        (run-hooks 'mh-folder-list-change-hook)
-        (message "Folder %s removed" folder)
+        (mh-remove-from-sub-folders-cache folder)
         (mh-set-folder-modified-p nil)  ; so kill-buffer doesn't complain
-        (if (get-buffer mh-show-buffer)
+        (if (and mh-show-buffer (get-buffer mh-show-buffer))
             (kill-buffer mh-show-buffer))
         (if (get-buffer folder)
-            (kill-buffer folder)))
+            (kill-buffer folder))
+        (when window-config
+          (set-window-configuration window-config))
+        (message "Folder %s removed" folder))
     (message "Folder not removed")))
 
+(defun mh-rmf-daemon (process output)
+  "The rmf PROCESS puts OUTPUT in temporary buffer.
+Display the results only if something went wrong."
+  (set-buffer (get-buffer-create mh-temp-buffer))
+  (insert-before-markers output)
+  (when (save-excursion
+          (beginning-of-buffer)
+          (re-search-forward "^rmf: " (point-max) t))
+    (display-buffer mh-temp-buffer)))
+
 ;; Avoid compiler warning...
 (defvar view-exit-action)
 
@@ -130,7 +147,7 @@ with no arguments, after the folders has been removed."
 (defun mh-list-folders ()
   "List mail folders."
   (interactive)
-  (let ((temp-buffer mh-temp-folders-buffer))
+  (let ((temp-buffer mh-folders-buffer))
     (with-output-to-temp-buffer temp-buffer
       (save-excursion
         (set-buffer temp-buffer)
@@ -267,7 +284,7 @@ The messages are formatted by mhl. See the variable `mhl-formfile'."
                              (format "Sequence from %s"
                                      mh-current-folder)))))))
     (if mh-print-background-flag
-        (mh-exec-cmd-daemon shell-file-name "-c" print-command)
+        (mh-exec-cmd-daemon shell-file-name nil "-c" print-command)
       (call-process shell-file-name nil nil nil "-c" print-command))
     (if (numberp msg-or-seq)
         (mh-notate msg-or-seq mh-note-printed mh-cmd-note)
index 494136801aee2619edfe8110bfdbdf95e1f59fac..1347225a2ede2babf61b20adc4c54da384c3d628 100644 (file)
@@ -37,7 +37,7 @@
 
 ;;; Change Log:
 
-;; $Id: mh-identity.el,v 1.1 2003/01/08 23:21:16 wohler Exp $
+;; $Id: mh-identity.el,v 1.17 2002/12/03 15:54:27 psg Exp $
 
 ;;; Code:
 
index 105c3a7113d146d80ce2e5f122388a7a4ea750b6..2a6cceb1389b5fc138fff54b354b51309de7b00b 100644 (file)
 
 ;;; Change Log:
 
-;; $Id: mh-index.el,v 1.2 2003/01/08 23:21:16 wohler Exp $
+;; $Id: mh-index.el,v 1.83 2003/01/27 04:16:47 wohler Exp $
 
 ;;; Code:
 
 (require 'cl)
 (require 'mh-e)
 (require 'mh-mime)
+(require 'mh-pick)
 
 (autoload 'gnus-local-map-property "gnus-util")
 (autoload 'gnus-eval-format "gnus-spec")
 ;; Support different indexing programs
 (defvar mh-indexer-choices
   '((swish++
-     mh-swish++-binary mh-swish++-execute-search mh-swish++-next-result)
+     mh-swish++-binary mh-swish++-execute-search mh-swish++-next-result
+     mh-swish++-regexp-builder)
     (swish
-     mh-swish-binary mh-swish-execute-search mh-swish-next-result)
+     mh-swish-binary mh-swish-execute-search mh-swish-next-result nil)
+    (mairix
+     mh-mairix-binary mh-mairix-execute-search mh-mairix-next-result
+     mh-mairix-regexp-builder)
     (namazu
-     mh-namazu-binary mh-namazu-execute-search mh-namazu-next-result)
+     mh-namazu-binary mh-namazu-execute-search mh-namazu-next-result nil)
     (glimpse
-     mh-glimpse-binary mh-glimpse-execute-search mh-glimpse-next-result)
+     mh-glimpse-binary mh-glimpse-execute-search mh-glimpse-next-result nil)
+    (pick
+     mh-pick-binary mh-pick-execute-search mh-pick-next-result
+     mh-pick-regexp-builder)
     (grep
-     mh-grep-binary mh-grep-execute-search mh-grep-next-result))
+     mh-grep-binary mh-grep-execute-search mh-grep-next-result nil))
   "List of possible indexer choices.")
 (defvar mh-indexer nil
   "Chosen index program.")
@@ -72,6 +80,8 @@
   "Function which executes the search program.")
 (defvar mh-index-next-result-function nil
   "Function to parse the next line of output.")
+(defvar mh-index-regexp-builder nil
+  "Function used to construct search regexp.")
 
 ;; FIXME: This should be a defcustom...
 (defvar mh-index-folder "+mhe-index"
@@ -254,16 +264,26 @@ checksum -> (origin-folder, origin-index) map is updated too."
   "Given STRING generate a name which is suitable for use as a folder name.
 White space from the beginning and end are removed. All spaces in the name are
 replaced with underscores and all / are replaced with $. If STRING is longer
-than 20 it is truncated too."
+than 20 it is truncated too. STRING could be a list of strings in which case
+they are concatenated to construct the base name."
   (with-temp-buffer
-    (insert string)
+    (if (stringp string)
+        (insert string)
+      (when (car string) (insert (car string)))
+      (dolist (s (cdr string))
+        (insert "_" s)))
+    (setq string (mh-replace-string "-lbrace" " "))
+    (setq string (mh-replace-string "-rbrace" " "))
+    (subst-char-in-region (point-min) (point-max) ?( ?  t)
+    (subst-char-in-region (point-min) (point-max) ?) ?  t)
+    (subst-char-in-region (point-min) (point-max) ?- ?  t)
     (goto-char (point-min))
-    (while (and (not (eobp)) (memq (char-after) '(?  ?\t ?\n ?\r)))
+    (while (and (not (eobp)) (memq (char-after) '(?  ?\t ?\n ?\r ?_)))
       (delete-char 1))
     (goto-char (point-max))
-    (while (and (not (bobp)) (memq (char-before) '(?  ?\t ?\n ?\r)))
+    (while (and (not (bobp)) (memq (char-before) '(?  ?\t ?\n ?\r ?_)))
       (delete-backward-char 1))
-    (subst-char-in-region (point-min) (point-max) ? ?_ t)
+    (subst-char-in-region (point-min) (point-max) ?  ?_ t)
     (subst-char-in-region (point-min) (point-max) ?\t ?_ t)
     (subst-char-in-region (point-min) (point-max) ?\n ?_ t)
     (subst-char-in-region (point-min) (point-max) ?\r ?_ t)
@@ -271,13 +291,16 @@ than 20 it is truncated too."
     (truncate-string-to-width (buffer-substring (point-min) (point-max)) 20)))
 
 ;;;###mh-autoload
-(defun mh-index-search (redo-search-flag folder search-regexp)
+(defun* mh-index-search (redo-search-flag folder search-regexp
+                        &optional window-config)
   "Perform an indexed search in an MH mail folder.
 
 If REDO-SEARCH-FLAG is non-nil and the current folder buffer was generated by a
 index search, then the search is repeated. Otherwise, FOLDER is searched with
 SEARCH-REGEXP and the results are presented in an MH-E folder. If FOLDER is
-\"+\" then mail in all folders are searched.
+\"+\" then mail in all folders are searched. Optional argument WINDOW-CONFIG
+stores the window configuration that will be restored after the user quits the
+folder containing the index search results.
 
 Four indexing programs are supported; if none of these are present, then grep
 is used. This function picks the first program that is available on your
@@ -289,9 +312,16 @@ index for each program:
 
     - `mh-swish++-execute-search'
     - `mh-swish-execute-search'
+    - `mh-mairix-execute-search'
     - `mh-namazu-execute-search'
     - `mh-glimpse-execute-search'
 
+If none of these programs are present then we use pick. If desired grep can be
+used instead. Details about these methods can be found in:
+
+    - `mh-pick-execute-search'
+    - `mh-grep-execute-search'
+
 This and related functions use an X-MHE-Checksum header to cache the MD5
 checksum of a message. This means that already present X-MHE-Checksum headers
 in the incoming email could result in messages not being found. The following
@@ -306,18 +336,28 @@ This has the effect of renaming already present X-MHE-Checksum headers."
          (progn
            (unless mh-find-path-run (mh-find-path))
            (or (and current-prefix-arg (car mh-index-previous-search))
-               (mh-prompt-for-folder "Search" "+" nil "all")))
+               (mh-prompt-for-folder "Search" "+" nil "all" t)))
          (progn
            ;; Yes, we do want to call mh-index-choose every time in case the
            ;; user has switched the indexer manually.
            (unless (mh-index-choose) (error "No indexing program found"))
            (or (and current-prefix-arg (cadr mh-index-previous-search))
+               mh-index-regexp-builder
                (read-string (format "%s regexp: "
                                     (upcase-initials
-                                     (symbol-name mh-indexer))))))))
+                                     (symbol-name mh-indexer))))))
+         (if (and (not
+                   (and current-prefix-arg (cadr mh-index-previous-search)))
+                  mh-index-regexp-builder)
+             (current-window-configuration)
+           nil)))
+  (when (symbolp search-regexp)
+    (mh-search-folder folder window-config)
+    (setq mh-searching-function 'mh-index-do-search)
+    (return-from mh-index-search))
   (mh-checksum-choose)
   (let ((result-count 0)
-        (old-window-config mh-previous-window-config)
+        (old-window-config (or window-config mh-previous-window-config))
         (previous-search mh-index-previous-search)
         (index-folder (format "%s/%s" mh-index-folder
                               (mh-index-generate-pretty-name search-regexp))))
@@ -373,7 +413,7 @@ This has the effect of renaming already present X-MHE-Checksum headers."
       (mh-recenter nil)
 
       ;; Maintain history
-      (when (and redo-search-flag previous-search)
+      (when (or (and redo-search-flag previous-search) window-config)
         (setq mh-previous-window-config old-window-config))
       (setq mh-index-previous-search (list folder search-regexp))
 
@@ -384,6 +424,123 @@ This has the effect of renaming already present X-MHE-Checksum headers."
                (loop for msg-hash being hash-values of mh-index-data
                      count (> (hash-table-count msg-hash) 0))))))
 
+;;;###mh-autoload
+(defun mh-index-do-search ()
+  "Construct appropriate regexp and call `mh-index-search'."
+  (interactive)
+  (unless (mh-index-choose) (error "No indexing program found"))
+  (let* ((regexp-list (mh-pick-parse-search-buffer))
+         (pattern (funcall mh-index-regexp-builder regexp-list)))
+    (if pattern
+        (mh-index-search nil mh-current-folder pattern
+                         mh-previous-window-config)
+      (error "No search terms"))))
+
+(defun mh-replace-string (old new)
+  "Replace all occurrences of OLD with NEW in the current buffer."
+  (goto-char (point-min))
+  (while (search-forward old nil t)
+    (replace-match new)))
+
+;;;###mh-autoload
+(defun mh-index-parse-search-regexp (input-string)
+  "Construct parse tree for INPUT-STRING.
+All occurrences of &, |, ! and ~ in INPUT-STRING are replaced by AND, OR and
+NOT as appropriate. Then the resulting string is parsed."
+  (let (input)
+    (with-temp-buffer
+      (insert input-string)
+      (downcase-region (point-min) (point-max))
+      ;; replace tabs
+      (mh-replace-string "\t" " ")
+      ;; synonyms of AND
+      (mh-replace-string "&" " and ")
+      (mh-replace-string " -and " " and ")
+      ;; synonyms of OR
+      (mh-replace-string "|" " or ")
+      (mh-replace-string " -or " " or ")
+      ;; synonyms of NOT
+      (mh-replace-string "!" " not ")
+      (mh-replace-string "~" " not ")
+      (mh-replace-string " -not " " not ")
+      ;; synonyms of left brace
+      (mh-replace-string "(" " ( ")
+      (mh-replace-string " -lbrace " " ( ")
+      ;; synonyms of right brace
+      (mh-replace-string ")" " ) ")
+      (mh-replace-string " -rbrace " " ) ")
+      ;; get the normalized input
+      (setq input (format "( %s )" (buffer-substring (point-min) (point-max)))))
+
+    (let ((tokens (mh-index-add-implicit-ops (split-string input)))
+          (op-stack ())
+          (operand-stack ())
+          oper1)
+      (dolist (token tokens)
+        (cond ((equal token "(") (push 'paren op-stack))
+              ((equal token "not") (push 'not op-stack))
+              ((equal token "or") (push 'or op-stack))
+              ((equal token "and") (push 'and op-stack))
+              ((equal token ")")
+               (multiple-value-setq (op-stack operand-stack)
+                 (mh-index-evaluate op-stack operand-stack))
+               (when (eq (car op-stack) 'not)
+                 (pop op-stack)
+                 (push `(not ,(pop operand-stack)) operand-stack))
+               (when (eq (car op-stack) 'and)
+                 (pop op-stack)
+                 (setq oper1 (pop operand-stack))
+                 (push `(and ,(pop operand-stack) ,oper1) operand-stack)))
+              ((eq (car op-stack) 'not)
+               (pop op-stack)
+               (push `(not ,token) operand-stack)
+               (when (eq (car op-stack) 'and)
+                 (pop op-stack)
+                 (setq oper1 (pop operand-stack))
+                 (push `(and ,(pop operand-stack) ,oper1) operand-stack)))
+              ((eq (car op-stack) 'and)
+               (pop op-stack)
+               (push `(and ,(pop operand-stack) ,token) operand-stack))
+              (t (push token operand-stack))))
+      (prog1 (pop operand-stack)
+        (when (or op-stack operand-stack)
+          (error "Invalid regexp: %s" input))))))
+
+(defun mh-index-add-implicit-ops (tokens)
+  "Add implicit operators in the list TOKENS."
+  (let ((result ())
+        (literal-seen nil)
+        current)
+    (while tokens
+      (setq current (pop tokens))
+      (cond ((or (equal current ")") (equal current "and") (equal current "or"))
+             (setq literal-seen nil)
+             (push current result))
+            ((and literal-seen
+                  (push "and" result)
+                  (setq literal-seen nil)
+                  nil))
+            (t
+             (push current result)
+             (unless (or (equal current "(") (equal current "not"))
+               (setq literal-seen t)))))
+    (nreverse result)))
+
+(defun mh-index-evaluate (op-stack operand-stack)
+  "Read expression till starting paren based on OP-STACK and OPERAND-STACK."
+  (block mh-index-evaluate
+    (let (op oper1)
+      (while op-stack
+        (setq op (pop op-stack))
+        (cond ((eq op 'paren)
+               (return-from mh-index-evaluate (values op-stack operand-stack)))
+              ((eq op 'not)
+               (push `(not ,(pop operand-stack)) operand-stack))
+              ((or (eq op 'and) (eq op 'or))
+               (setq oper1 (pop operand-stack))
+               (push `(,op ,(pop operand-stack) ,oper1) operand-stack))))
+      (error "Ran out of tokens"))))
+
 ;;;###mh-autoload
 (defun mh-index-next-folder (&optional backward-flag)
   "Jump to the next folder marker.
@@ -446,9 +603,9 @@ we find a new folder name."
                    (setq chosen-name new-name)
                    (return-from unique-name)))))
     (mh-exec-cmd-quiet nil "folder" "-create" "-fast" chosen-name)
+    (mh-remove-from-sub-folders-cache chosen-name)
     (when (boundp 'mh-speed-folder-map)
       (mh-speed-add-folder chosen-name))
-    (push (list chosen-name) mh-folder-list)
     chosen-name))
 
 ;;;###mh-autoload
@@ -476,6 +633,9 @@ we find a new folder name."
   (let ((cur-msg (mh-get-msg-num nil))
         (old-buffer-modified-flag (buffer-modified-p))
         (buffer-read-only nil))
+    (while (and (not cur-msg) (not (eobp)))
+      (forward-line)
+      (setq cur-msg (mh-get-msg-num nil)))
     (goto-char (point-min))
     (while (not (eobp))
       (if (or (char-equal (char-after) ?+) (char-equal (char-after) 10))
@@ -620,6 +780,43 @@ other matches left then return nil. If the current record is invalid return
 
 \f
 
+;; Pick interface
+
+(defvar mh-index-pick-folder)
+(defvar mh-pick-binary "pick")
+
+(defun mh-pick-execute-search (folder-path search-regexp)
+  "Execute pick.
+
+Unlike the other index search programs \"pick\" only searches messages present
+in the folder itself and does not descend into any sub-folders that may be
+present.
+
+FOLDER-PATH is the directory containing the mails to be searched and
+SEARCH-REGEXP is the pattern that pick gets."
+  (set-buffer (get-buffer-create mh-index-temp-buffer))
+  (erase-buffer)
+  (setq mh-index-pick-folder
+        (concat "+" (substring folder-path (length mh-user-path))))
+  (apply #'call-process (expand-file-name "pick" mh-progs) nil '(t nil) nil
+         mh-index-pick-folder "-list" search-regexp)
+  (goto-char (point-min)))
+
+(defun mh-pick-next-result ()
+  "Return the next pick search result."
+  (prog1 (block nil
+           (when (eobp) (return nil))
+           (unless (re-search-forward "^[1-9][0-9]*$" (line-end-position) t)
+             (return 'error))
+           (list mh-index-pick-folder
+                 (car (read-from-string (buffer-substring-no-properties
+                                         (line-beginning-position)
+                                         (line-end-position))))
+                 nil))
+    (forward-line)))
+
+\f
+
 ;; Grep interface
 
 (defvar mh-grep-binary (executable-find "grep"))
@@ -669,6 +866,140 @@ other matches left then return nil. If the current record is invalid return
 
 \f
 
+;; Mairix interface
+
+(defvar mh-mairix-binary (executable-find "mairix"))
+(defvar mh-mairix-directory ".mairix")
+(defvar mh-mairix-folder nil)
+
+(defun mh-mairix-execute-search (folder-path search-regexp-list)
+  "Execute mairix and read the results.
+
+In the examples below replace /home/user/Mail with the path to your MH
+directory.
+
+First create the directory /home/user/Mail/.mairix. Then create the file
+/home/user/Mail/.mairix/config with the following contents:
+
+   # This should contain the same thing as your `mh-user-path'
+   base=/home/user/Mail
+   
+   # List of folders that should be indexed. 3 dots at the end means there are
+   # subfolders within the folder
+   mh_folders=archive...:inbox:drafts:news:sent:trash
+   
+   vfolder_format=raw
+   database=/home/user/Mail/mairix/database
+
+Use the following command line to generate the mairix index. Run this daily
+from cron:
+
+    mairix -f /home/user/Mail/.mairix/config
+
+FOLDER-PATH is the directory in which SEARCH-REGEXP-LIST is used to search."
+  (set-buffer (get-buffer-create mh-index-temp-buffer))
+  (erase-buffer)
+  (unless mh-mairix-binary
+    (error "Set mh-mairix-binary appropriately"))
+  (apply #'call-process mh-mairix-binary nil '(t nil) nil
+         "-f" (format "%s%s/config" mh-user-path mh-mairix-directory)
+         search-regexp-list)
+  (goto-char (point-min))
+  (setq mh-mairix-folder
+        (let ((last-char (substring folder-path (1- (length folder-path)))))
+          (if (equal last-char "/")
+              folder-path
+            (format "%s/" folder-path)))))
+
+(defun mh-mairix-next-result ()
+  "Return next result from mairix output."
+  (prog1
+      (block nil
+        (when (or (eobp) (and (bolp) (eolp)))
+          (return nil))
+        (unless (eq (char-after) ?/)
+          (return error))
+        (let ((start (point))
+              end msg-start)
+          (setq end (line-end-position))
+          (unless (search-forward mh-mairix-folder end t)
+            (return 'error))
+          (goto-char (match-beginning 0))
+          (unless (equal (point) start)
+            (return 'error))
+          (goto-char end)
+          (unless (search-backward "/" start t)
+            (return 'error))
+          (setq msg-start (1+ (point)))
+          (goto-char start)
+          (unless (search-forward mh-user-path end t)
+            (return 'error))
+          (list (format "+%s" (buffer-substring-no-properties
+                               (point) (1- msg-start)))
+                (car (read-from-string
+                      (buffer-substring-no-properties msg-start end)))
+                ())))
+    (forward-line)))
+
+(defun mh-mairix-regexp-builder (regexp-list)
+  "Generate query for mairix.
+REGEXP-LIST is an alist of fields and values."
+  (let ((result ()))
+    (dolist (pair regexp-list)
+      (when (cdr pair)
+        (push
+         (concat
+          (cond ((eq (car pair) 'to) "t:")
+                ((eq (car pair) 'from) "f:")
+                ((eq (car pair) 'cc) "c:")
+                ((eq (car pair) 'subject) "s:")
+                ((eq (car pair) 'date) "d:")
+                (t ""))
+          (let ((sop (cdr (mh-mairix-convert-to-sop* (cdr pair))))
+                (final ""))
+            (dolist (conjunct sop)
+              (let ((expr-list (cdr conjunct))
+                    (expr-string ""))
+                (dolist (e expr-list)
+                  (setq expr-string (concat expr-string "+"
+                                            (if (atom e) "" "~")
+                                            (if (atom e) e (cadr e)))))
+                (setq final (concat final "," (substring expr-string 1)))))
+            (substring final 1)))
+         result)))
+    result))
+
+(defun mh-mairix-convert-to-sop* (expr)
+  "Convert EXPR to sum of product form."
+  (cond ((atom expr) `(or (and ,expr)))
+        ((eq (car expr) 'or)
+         (cons 'or
+               (loop for e in (mapcar #'mh-mairix-convert-to-sop* (cdr expr))
+                     append (cdr e))))
+        ((eq (car expr) 'and)
+         (let ((conjuncts (mapcar #'mh-mairix-convert-to-sop* (cdr expr)))
+               result next-factor)
+           (setq result (pop conjuncts))
+           (while conjuncts
+             (setq next-factor (pop conjuncts))
+             (setq result (let ((res ()))
+                            (dolist (t1 (cdr result))
+                              (dolist (t2 (cdr next-factor))
+                                (push `(and ,@(cdr t1) ,@(cdr t2)) res)))
+                            (cons 'or res))))
+           result))
+        ((atom (cadr expr)) `(or (and ,expr)))
+        ((eq (caadr expr) 'not) (mh-mairix-convert-to-sop* (cadadr expr)))
+        ((eq (caadr expr) 'and) (mh-mairix-convert-to-sop*
+                                 `(or ,@(mapcar #'(lambda (x) `(not ,x))
+                                                (cdadr expr)))))
+        ((eq (caadr expr) 'or) (mh-mairix-convert-to-sop*
+                                `(and ,@(mapcar #'(lambda (x) `(not ,x))
+                                                (cdadr expr)))))
+        (t (error "Unreachable: %s" expr))))
+
+\f
+
 ;; Swish interface
 
 (defvar mh-swish-binary (executable-find "swish-e"))
@@ -704,7 +1035,7 @@ First create the directory /home/user/Mail/.swish. Then create the file
     FileRules pathname contains /home/user/Mail/.swish
     FileRules pathname contains /home/user/Mail/mhe-index
     FileRules filename is index
-    FileRules filename is \..*
+    FileRules filename is \\..*
     FileRules filename is #.*
     FileRules filename is ,.*
     FileRules filename is .*~
@@ -829,6 +1160,29 @@ FOLDER-PATH is the directory in which SEARCH-REGEXP is used to search."
 
 (defalias 'mh-swish++-next-result 'mh-swish-next-result)
 
+(defun mh-swish++-regexp-builder (regexp-list)
+  "Generate query for swish++.
+REGEXP-LIST is an alist of fields and values."
+  (let ((regexp "") meta)
+    (dolist (elem regexp-list)
+      (when (cdr elem)
+        (setq regexp (concat regexp " and "
+                             (if (car elem) "(" "")
+                             (if (car elem) (symbol-name (car elem)) "")
+                             (if (car elem) " = " "")
+                             (mh-swish++-print-regexp (cdr elem))
+                             (if (car elem) ")" "")))))
+    (substring regexp 4)))
+
+(defun mh-swish++-print-regexp (expr)
+  "Return infix expression corresponding to EXPR."
+  (cond ((atom expr) (format "%s" expr))
+        ((eq (car expr) 'not)
+         (format "(not %s)" (mh-swish++-print-regexp (cadr expr))))
+        (t (format "(%s %s %s)" (mh-swish++-print-regexp (cadr expr))
+                   (symbol-name (car expr))
+                   (mh-swish++-print-regexp (caddr expr))))))
+
 \f
 
 ;; Namazu interface
@@ -931,8 +1285,9 @@ system."
                (executable (symbol-value (cadr current))))
           (when executable
             (setq mh-indexer (car current))
-            (setq mh-index-execute-search-function (caddr current))
-            (setq mh-index-next-result-function (cadddr current))
+            (setq mh-index-execute-search-function (nth 2 current))
+            (setq mh-index-next-result-function (nth 3 current))
+            (setq mh-index-regexp-builder (nth 4 current))
             (return mh-indexer))))
       nil)))
 
index 20cfb8571bdda7a72e2093d7f66ff878a420a1c3..9646df03ad177ac6d72b108e8467411a637dddbf 100644 (file)
@@ -1,6 +1,11 @@
 ;;; mh-loaddefs.el --- automatically extracted autoloads
 ;;
+;;; Copyright (C) 2003 Free Software Foundation, Inc.
+;;; Author: Bill Wohler <wohler@newt.com>
+;;; Keywords: mail
 ;;; Commentary:
+;;; Change Log:
+;; $Id: mh-loaddefs.el,v 1.36 2003/02/03 19:15:13 wohler Exp $
 ;;; Code:
 \f
 ;;;### (autoloads (mh-letter-complete mh-open-line mh-fully-kill-draft
@@ -8,7 +13,7 @@
 ;;;;;;  mh-insert-signature mh-to-fcc mh-to-field mh-fill-paragraph-function
 ;;;;;;  mh-send-other-window mh-send mh-reply mh-redistribute mh-forward
 ;;;;;;  mh-extract-rejected-mail mh-edit-again) "mh-comp" "mh-comp.el"
-;;;;;;  (15899 19356))
+;;;;;;  (15924 43423))
 ;;; Generated autoloads from mh-comp.el
 
 (autoload (quote mh-edit-again) "mh-comp" "\
@@ -145,11 +150,13 @@ passing the prefix ARG if any." t nil)
 ;;;***
 \f
 ;;;### (autoloads (mh-tool-bar-folder-set mh-tool-bar-letter-set
-;;;;;;  mh-customize) "mh-customize" "mh-customize.el" (15899 29873))
+;;;;;;  mh-customize) "mh-customize" "mh-customize.el" (15933 21842))
 ;;; Generated autoloads from mh-customize.el
 
 (autoload (quote mh-customize) "mh-customize" "\
-Customize MH-E variables." t nil)
+Customize MH-E variables.
+With optional argument DELETE-OTHER-WINDOWS-FLAG, other windows in the frame
+are removed." t nil)
 
 (autoload (quote mh-tool-bar-letter-set) "mh-customize" "\
 Construct toolbar for `mh-letter-mode'." nil nil)
@@ -160,7 +167,7 @@ Construct toolbar for `mh-folder-mode'." nil nil)
 ;;;***
 \f
 ;;;### (autoloads (mh-goto-cur-msg mh-update-sequences mh-folder-line-matches-show-buffer-p)
-;;;;;;  "mh-e" "mh-e.el" (15899 29921))
+;;;;;;  "mh-e" "mh-e.el" (15934 48879))
 ;;; Generated autoloads from mh-e.el
 
 (autoload (quote mh-folder-line-matches-show-buffer-p) "mh-e" "\
@@ -183,7 +190,7 @@ recenter the folder buffer." nil nil)
 ;;;;;;  mh-undo-folder mh-sort-folder mh-print-msg mh-page-digest-backwards
 ;;;;;;  mh-page-digest mh-pipe-msg mh-pack-folder mh-list-folders
 ;;;;;;  mh-kill-folder mh-copy-msg mh-burst-digest) "mh-funcs" "mh-funcs.el"
-;;;;;;  (15886 19303))
+;;;;;;  (15923 15465))
 ;;; Generated autoloads from mh-funcs.el
 
 (autoload (quote mh-burst-digest) "mh-funcs" "\
@@ -199,9 +206,7 @@ then prompt for the message sequence." t nil)
 (autoload (quote mh-kill-folder) "mh-funcs" "\
 Remove the current folder and all included messages.
 Removes all of the messages (files) within the specified current folder,
-and then removes the folder (directory) itself.
-The value of `mh-folder-list-change-hook' is a list of functions to be called,
-with no arguments, after the folders has been removed." t nil)
+and then removes the folder (directory) itself." t nil)
 
 (autoload (quote mh-list-folders) "mh-funcs" "\
 List mail folders." t nil)
@@ -260,7 +265,7 @@ Display cheat sheet for the commands of the current prefix in minibuffer." t nil
 ;;;***
 \f
 ;;;### (autoloads (mh-insert-identity mh-identity-list-set mh-identity-make-menu)
-;;;;;;  "mh-identity" "mh-identity.el" (15852 60439))
+;;;;;;  "mh-identity" "mh-identity.el" (15900 46388))
 ;;; Generated autoloads from mh-identity.el
 
 (autoload (quote mh-identity-make-menu) "mh-identity" "\
@@ -281,8 +286,9 @@ Edit the `mh-identity-list' variable to define identity." t nil)
 ;;;### (autoloads (mh-namazu-execute-search mh-swish++-execute-search
 ;;;;;;  mh-swish-execute-search mh-glimpse-execute-search mh-index-execute-commands
 ;;;;;;  mh-index-visit-folder mh-index-delete-folder-headers mh-index-insert-folder-headers
-;;;;;;  mh-index-previous-folder mh-index-next-folder mh-index-search
-;;;;;;  mh-index-update-maps) "mh-index" "mh-index.el" (15899 19358))
+;;;;;;  mh-index-previous-folder mh-index-next-folder mh-index-parse-search-regexp
+;;;;;;  mh-index-do-search mh-index-search mh-index-update-maps)
+;;;;;;  "mh-index" "mh-index.el" (15924 45743))
 ;;; Generated autoloads from mh-index.el
 
 (autoload (quote mh-index-update-maps) "mh-index" "\
@@ -298,7 +304,9 @@ Perform an indexed search in an MH mail folder.
 If REDO-SEARCH-FLAG is non-nil and the current folder buffer was generated by a
 index search, then the search is repeated. Otherwise, FOLDER is searched with
 SEARCH-REGEXP and the results are presented in an MH-E folder. If FOLDER is
-\"+\" then mail in all folders are searched.
+\"+\" then mail in all folders are searched. Optional argument WINDOW-CONFIG
+stores the window configuration that will be restored after the user quits the
+folder containing the index search results.
 
 Four indexing programs are supported; if none of these are present, then grep
 is used. This function picks the first program that is available on your
@@ -310,9 +318,16 @@ index for each program:
 
     - `mh-swish++-execute-search'
     - `mh-swish-execute-search'
+    - `mh-mairix-execute-search'
     - `mh-namazu-execute-search'
     - `mh-glimpse-execute-search'
 
+If none of these programs are present then we use pick. If desired grep can be
+used instead. Details about these methods can be found in:
+
+    - `mh-pick-execute-search'
+    - `mh-grep-execute-search'
+
 This and related functions use an X-MHE-Checksum header to cache the MD5
 checksum of a message. This means that already present X-MHE-Checksum headers
 in the incoming email could result in messages not being found. The following
@@ -323,6 +338,14 @@ procmail recipe should avoid this:
 
 This has the effect of renaming already present X-MHE-Checksum headers." t nil)
 
+(autoload (quote mh-index-do-search) "mh-index" "\
+Construct appropriate regexp and call `mh-index-search'." t nil)
+
+(autoload (quote mh-index-parse-search-regexp) "mh-index" "\
+Construct parse tree for INPUT-STRING.
+All occurrences of &, |, ! and ~ in INPUT-STRING are replaced by AND, OR and
+NOT as appropriate. Then the resulting string is parsed." nil nil)
+
 (autoload (quote mh-index-next-folder) "mh-index" "\
 Jump to the next folder marker.
 The function is only applicable to folders displaying index search results.
@@ -408,7 +431,7 @@ First create the directory /home/user/Mail/.swish. Then create the file
     FileRules pathname contains /home/user/Mail/.swish
     FileRules pathname contains /home/user/Mail/mhe-index
     FileRules filename is index
-    FileRules filename is ..*
+    FileRules filename is \\..*
     FileRules filename is #.*
     FileRules filename is ,.*
     FileRules filename is .*~
@@ -501,7 +524,7 @@ FOLDER-PATH is the directory in which SEARCH-REGEXP is used to search." nil nil)
 ;;;;;;  mh-mml-attach-file mh-mml-forward-message mh-mml-to-mime
 ;;;;;;  mh-revert-mhn-edit mh-edit-mhn mh-mhn-compose-forw mh-mhn-compose-external-compressed-tar
 ;;;;;;  mh-mhn-compose-anon-ftp mh-mhn-compose-insertion mh-compose-forward
-;;;;;;  mh-compose-insertion) "mh-mime" "mh-mime.el" (15858 6046))
+;;;;;;  mh-compose-insertion) "mh-mime" "mh-mime.el" (15923 15465))
 ;;; Generated autoloads from mh-mime.el
 
 (autoload (quote mh-compose-insertion) "mh-mime" "\
@@ -665,30 +688,45 @@ Toggle display of the raw MIME part." t nil)
 
 ;;;***
 \f
-;;;### (autoloads (mh-do-pick-search mh-search-folder) "mh-pick"
-;;;;;;  "mh-pick.el" (15854 20166))
+;;;### (autoloads (mh-do-search mh-pick-do-search mh-do-pick-search
+;;;;;;  mh-search-folder) "mh-pick" "mh-pick.el" (15924 45743))
 ;;; Generated autoloads from mh-pick.el
 
 (autoload (quote mh-search-folder) "mh-pick" "\
 Search FOLDER for messages matching a pattern.
 This function uses the MH command `pick' to do the work.
-Add the messages found to the sequence named `search'." t nil)
+Add the messages found to the sequence named `search'.
+Argument WINDOW-CONFIG is the current window configuration and is used when
+the search folder is dismissed." t nil)
 
 (autoload (quote mh-do-pick-search) "mh-pick" "\
 Find messages that match the qualifications in the current pattern buffer.
 Messages are searched for in the folder named in `mh-searching-folder'.
+Add the messages found to the sequence named `search'.
+
+This is a deprecated function and `mh-pick-do-search' should be used instead." t nil)
+
+(autoload (quote mh-pick-do-search) "mh-pick" "\
+Find messages that match the qualifications in the current pattern buffer.
+Messages are searched for in the folder named in `mh-searching-folder'.
 Add the messages found to the sequence named `search'." t nil)
 
+(autoload (quote mh-do-search) "mh-pick" "\
+Use the default searching function.
+If \\[mh-search-folder] was used to create the search pattern then pick is used
+to search the folder. Otherwise if \\[mh-index-search] was used then the
+indexing program specified in `mh-index-program' is used." t nil)
+
 ;;;***
 \f
 ;;;### (autoloads (mh-thread-refile mh-thread-delete mh-thread-ancestor
 ;;;;;;  mh-thread-previous-sibling mh-thread-next-sibling mh-thread-forget-message
 ;;;;;;  mh-toggle-threads mh-thread-add-spaces mh-thread-inc mh-delete-subject-or-thread
 ;;;;;;  mh-delete-subject mh-narrow-to-subject mh-region-to-msg-list
-;;;;;;  mh-add-to-sequence mh-notate-seq mh-map-to-seq-msgs mh-rename-seq
-;;;;;;  mh-widen mh-put-msg-in-seq mh-narrow-to-seq mh-msg-is-in-seq
-;;;;;;  mh-list-sequences mh-delete-seq) "mh-seq" "mh-seq.el" (15899
-;;;;;;  19358))
+;;;;;;  mh-iterate-on-messages-in-region mh-add-to-sequence mh-notate-cur
+;;;;;;  mh-notate-seq mh-map-to-seq-msgs mh-rename-seq mh-widen mh-put-msg-in-seq
+;;;;;;  mh-narrow-to-seq mh-msg-is-in-seq mh-list-sequences mh-delete-seq)
+;;;;;;  "mh-seq" "mh-seq.el" (15923 15465))
 ;;; Generated autoloads from mh-seq.el
 
 (autoload (quote mh-delete-seq) "mh-seq" "\
@@ -726,9 +764,21 @@ Mark the scan listing.
 All messages in SEQ are marked with NOTATION at OFFSET from the beginning of
 the line." nil nil)
 
+(autoload (quote mh-notate-cur) "mh-seq" "\
+Mark the MH sequence cur.
+In addition to notating the current message with `mh-note-cur' the function
+uses `overlay-arrow-position' to put a marker in the fringe." nil nil)
+
 (autoload (quote mh-add-to-sequence) "mh-seq" "\
 The sequence SEQ is augmented with the messages in MSGS." nil nil)
 
+(autoload (quote mh-iterate-on-messages-in-region) "mh-seq" "\
+Iterate over region.
+VAR is bound to the message on the current line as we loop starting from BEGIN
+till END. In each step BODY is executed.
+
+If VAR is nil then the loop is executed without any binding." nil (quote macro))
+
 (autoload (quote mh-region-to-msg-list) "mh-seq" "\
 Return a list of messages within the region between BEGIN and END." nil nil)
 
@@ -756,11 +806,7 @@ All messages after START-POINT are added to the thread tree." nil nil)
 Add COUNT spaces to each scan line in `mh-thread-scan-line-map'." nil nil)
 
 (autoload (quote mh-toggle-threads) "mh-seq" "\
-Toggle threaded view of folder.
-The conversion of normal view to threaded view is exact, that is the same
-messages are displayed in the folder buffer before and after threading. However
-the conversion from threaded view to normal view is inexact. So more messages
-than were originally present may be shown as a result." t nil)
+Toggle threaded view of folder." t nil)
 
 (autoload (quote mh-thread-forget-message) "mh-seq" "\
 Forget the message INDEX from the threading tables." nil nil)
@@ -787,7 +833,7 @@ Mark current message and all its children for refiling to FOLDER." t nil)
 \f
 ;;;### (autoloads (mh-speed-add-folder mh-speed-invalidate-map mh-speed-flists
 ;;;;;;  mh-speed-view mh-speed-toggle mh-folder-speedbar-buttons)
-;;;;;;  "mh-speed" "mh-speed.el" (15899 19358))
+;;;;;;  "mh-speed" "mh-speed.el" (15933 21584))
 ;;; Generated autoloads from mh-speed.el
 
 (autoload (quote mh-folder-speedbar-buttons) "mh-speed" "\
@@ -820,7 +866,7 @@ The function invalidates the latest ancestor that is present." nil nil)
 ;;;***
 \f
 ;;;### (autoloads (mh-get-msg-num mh-goto-address-find-address-at-point)
-;;;;;;  "mh-utils" "mh-utils.el" (15899 28827))
+;;;;;;  "mh-utils" "mh-utils.el" (15924 47279))
 ;;; Generated autoloads from mh-utils.el
 
 (autoload (quote mh-goto-address-find-address-at-point) "mh-utils" "\
@@ -836,9 +882,10 @@ not pointing to a message." nil nil)
 ;;;***
 \f
 ;;;### (autoloads (mh-alias-add-address-under-point mh-alias-grab-from-field
-;;;;;;  mh-alias-add-alias mh-alias-from-has-no-alias-p mh-alias-letter-expand-alias
-;;;;;;  mh-alias-minibuffer-confirm-address mh-read-address mh-alias-reload)
-;;;;;;  "mh-alias" "mh-alias.el" (15899 29102))
+;;;;;;  mh-alias-add-alias mh-alias-from-has-no-alias-p mh-alias-address-to-alias
+;;;;;;  mh-alias-letter-expand-alias mh-alias-minibuffer-confirm-address
+;;;;;;  mh-read-address mh-alias-reload) "mh-alias" "mh-alias.el"
+;;;;;;  (15924 45743))
 ;;; Generated autoloads from mh-alias.el
 
 (autoload (quote mh-alias-reload) "mh-alias" "\
@@ -853,6 +900,9 @@ Display the alias expansion if `mh-alias-flash-on-comma' is non-nil." t nil)
 (autoload (quote mh-alias-letter-expand-alias) "mh-alias" "\
 Expand mail alias before point." nil nil)
 
+(autoload (quote mh-alias-address-to-alias) "mh-alias" "\
+Return the ADDRESS alias if defined, or nil." nil nil)
+
 (autoload (quote mh-alias-from-has-no-alias-p) "mh-alias" "\
 Return t is From has no current alias set." nil nil)
 
index 16347b3011a13842d773e8dca4a8bab2a929296a..a14a548e2c485b904a460ff8162e4ebb4dd9a98a 100644 (file)
@@ -32,7 +32,7 @@
 
 ;;; Change Log:
 
-;; $Id: mh-mime.el,v 1.12 2003/01/08 23:21:16 wohler Exp $
+;; $Id: mh-mime.el,v 1.100 2003/01/25 19:18:51 satyaki Exp $
 
 ;;; Code:
 
@@ -787,7 +787,16 @@ displayed."
           (setq handles pre-dissected-handles)
         (setq handles (or (mm-dissect-buffer nil) (mm-uu-dissect)))
         (setf (mh-mime-handles (mh-buffer-data))
-              (mm-merge-handles handles (mh-mime-handles (mh-buffer-data)))))
+              (mm-merge-handles handles (mh-mime-handles (mh-buffer-data))))
+
+        ;; Use charset to decode body...
+        (unless handles
+          (let* ((ct (ignore-errors
+                       (mail-header-parse-content-type
+                        (message-fetch-field "Content-Type" t))))
+                 (charset (mail-content-type-get ct 'charset)))
+            (when (stringp charset)
+              (mm-decode-body charset)))))
 
       (when (and handles (or (not (stringp (car handles))) (cdr handles)))
         ;; Goto start of message body
@@ -1215,14 +1224,9 @@ Parameter EL is unused."
 The function decodes the message and displays it. It avoids decoding the same
 message multiple times."
   (let ((b (point))
-        (charset (mail-content-type-get (mm-handle-type handle) 'charset))
         (clean-message-header mh-clean-message-header-flag)
         (invisible-headers mh-invisible-headers)
         (visible-headers mh-visible-headers))
-    (when (and charset (stringp charset))
-      (setq charset (intern (downcase charset)))
-      (when (eq charset 'us-ascii)
-        (setq charset nil)))
     (save-excursion
       (save-restriction
         (narrow-to-region b b)
index 373004fa34234bfb8f3d81938610bc22224604d3..3367392343b185a27d7ae588e0bde7bf1fa6ada0 100644 (file)
@@ -30,7 +30,7 @@
 
 ;;; Change Log:
 
-;; $Id: mh-pick.el,v 1.10 2003/01/08 23:21:16 wohler Exp $
+;; $Id: mh-pick.el,v 1.30 2003/01/27 04:16:47 wohler Exp $
 
 ;;; Code:
 
   "Keymap for searching folder.")
 
 (defvar mh-searching-folder nil)        ;Folder this pick is searching.
+(defvar mh-searching-function nil)
 
 ;;;###mh-autoload
-(defun mh-search-folder (folder)
+(defun mh-search-folder (folder window-config)
   "Search FOLDER for messages matching a pattern.
 This function uses the MH command `pick' to do the work.
-Add the messages found to the sequence named `search'."
-  (interactive (list (mh-prompt-for-folder "Search"
-                                           mh-current-folder
-                                           t)))
-  (switch-to-buffer-other-window "pick-pattern")
-  (if (or (zerop (buffer-size))
-          (not (y-or-n-p "Reuse pattern? ")))
-      (mh-make-pick-template)
-    (message ""))
-  (setq mh-searching-folder folder)
-  (message "%s" (substitute-command-keys
-                 (concat "Type \\[mh-do-pick-search] to search messages, "
-                         "\\[mh-help] for help."))))
+Add the messages found to the sequence named `search'.
+Argument WINDOW-CONFIG is the current window configuration and is used when
+the search folder is dismissed."
+  (interactive (list (mh-prompt-for-folder "Search" mh-current-folder nil nil t)
+                     (current-window-configuration)))
+  (let ((pick-folder (if (equal folder "+") mh-current-folder folder)))
+    (switch-to-buffer-other-window "search-pattern")
+    (if (or (zerop (buffer-size))
+            (not (y-or-n-p "Reuse pattern? ")))
+        (mh-make-pick-template)
+      (message ""))
+    (setq mh-searching-function 'mh-pick-do-search
+          mh-searching-folder pick-folder
+          mh-current-folder folder
+          mh-previous-window-config window-config)
+    (message "%s" (substitute-command-keys
+                   (concat "Type \\[mh-do-search] to search messages, "
+                           "\\[mh-help] for help.")))))
 
 (defun mh-make-pick-template ()
   "Initialize the current buffer with a template for a pick pattern."
-  (erase-buffer)
+  (let ((inhibit-read-only t)) (erase-buffer))
   (insert "From: \n"
           "To: \n"
           "Cc: \n"
@@ -74,20 +80,29 @@ Add the messages found to the sequence named `search'."
           "---------\n")
   (mh-pick-mode)
   (goto-char (point-min))
-  (end-of-line))
+  (dotimes (i 5)
+    (add-text-properties (point) (1+ (point)) '(front-sticky t))
+    (add-text-properties (- (line-end-position) 2) (1- (line-end-position))
+                         '(rear-nonsticky t))
+    (add-text-properties (point) (1- (line-end-position)) '(read-only t))
+    (forward-line))
+  (add-text-properties (point) (1+ (point)) '(front-sticky t))
+  (add-text-properties (point) (1- (line-end-position)) '(read-only t))
+  (goto-char (point-max)))
 
 ;;; Menu extracted from mh-menubar.el V1.1 (31 July 2001)
 (easy-menu-define
   mh-pick-menu mh-pick-mode-map "Menu for MH-E pick-mode"
   '("Pick"
-    ["Execute the Search"       mh-do-pick-search t]))
+    ["Execute the Search"       mh-pick-do-search t]))
 
 
 ;;; Help Messages
 ;;; Group messages logically, more or less.
 (defvar mh-pick-mode-help-messages
   '((nil
-     "Search messages:  \\[mh-do-pick-search]\n"
+     "Search messages using pick:  \\[mh-pick-do-search]\n"
+     "Search messages using index:  \\[mh-index-do-search]\n"
      "Move to a field by typing C-c C-f C-<field>\n"
      "where <field> is the first letter of the desired field."))
   "Key binding cheat sheet.
@@ -111,7 +126,7 @@ 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.
+When you have finished, type  \\[mh-pick-do-search]  to do the search.
 
 The value of `mh-pick-mode-hook' is a list of functions to be called,
 with no arguments, upon entry to this mode.
@@ -119,8 +134,9 @@ with no arguments, upon entry to this mode.
 \\{mh-pick-mode-map}"
 
   (make-local-variable 'mh-searching-folder)
-  (easy-menu-add mh-pick-menu)
+  (make-local-variable 'mh-searching-function)
   (make-local-variable 'mh-help-messages)
+  (easy-menu-add mh-pick-menu)
   (setq mh-help-messages mh-pick-mode-help-messages)
   (run-hooks 'mh-pick-mode-hook))
 
@@ -128,41 +144,58 @@ with no arguments, upon entry to this mode.
 (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 the messages found to the sequence named `search'.
+
+This is a deprecated function and `mh-pick-do-search' should be used instead."
+  (interactive)
+  (mh-pick-do-search))
+
+;;;###mh-autoload
+(defun mh-pick-do-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 the messages found to the sequence named `search'."
   (interactive)
-  (let ((pattern-buffer (buffer-name))
-        (searching-buffer mh-searching-folder)
-        range
-        msgs
-        (pattern nil)
-        (new-buffer nil))
+  (let ((pattern-list (mh-pick-parse-search-buffer))
+        (folder mh-searching-folder)
+        (new-buffer-flag nil)
+        (window-config mh-previous-window-config)
+        range pick-args msgs)
+    (unless pattern-list
+      (error "No search pattern specified"))
     (save-excursion
-      (cond ((get-buffer searching-buffer)
-             (set-buffer searching-buffer)
-             (setq range (list (format "%d-%d"
-                                       mh-first-msg-num mh-last-msg-num))))
+      (cond ((get-buffer folder)
+             (set-buffer folder)
+             (setq range (if (and mh-first-msg-num mh-last-msg-num)
+                             (format "%d-%d" mh-first-msg-num mh-last-msg-num)
+                           "all")))
             (t
-             (mh-make-folder searching-buffer)
-             (setq range '("all"))
-             (setq new-buffer t))))
-    (message "Searching...")
-    (goto-char (point-min))
-    (while (and range
-                (setq pattern (mh-next-pick-field pattern-buffer)))
-      (setq msgs (mh-seq-from-command searching-buffer
-                                      '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
+             (mh-make-folder folder)
+             (setq range "all")
+             (setq new-buffer-flag t))))
+    (setq pick-args (mh-pick-regexp-builder pattern-list))
+    (when pick-args
+      (setq msgs (mh-seq-from-command folder 'search
+                                      `("pick" ,folder ,range ,@pick-args))))
     (message "Searching...done")
-    (if new-buffer
-        (mh-scan-folder searching-buffer msgs)
-      (switch-to-buffer searching-buffer))
+    (if (not new-buffer-flag)
+        (switch-to-buffer folder)
+      (mh-scan-folder folder msgs)
+      (setq mh-previous-window-config window-config))
     (mh-add-msgs-to-seq msgs 'search)
     (delete-other-windows)))
 
+;;;###mh-autoload
+(defun mh-do-search ()
+  "Use the default searching function.
+If \\[mh-search-folder] was used to create the search pattern then pick is used
+to search the folder. Otherwise if \\[mh-index-search] was used then the
+indexing program specified in `mh-index-program' is used."
+  (interactive)
+  (if (symbolp mh-searching-function)
+      (funcall mh-searching-function)
+    (error "No searching function defined")))
+
 (defun mh-seq-from-command (folder seq command)
   "In FOLDER, make a sequence named SEQ by executing COMMAND.
 COMMAND is a list.  The first element is a program name
@@ -181,31 +214,66 @@ and the subsequent elements are its arguments, all strings."
       (setq msgs (nreverse msgs))       ;put in ascending order
       msgs)))
 
-(defun mh-next-pick-field (buffer)
-  "Return the next piece of a pick argument extracted from 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)
-           nil)
-          ((re-search-forward "^\\([a-z][^: \t\n]*\\):[ \t]*\\([a-z0-9].*\\)$"
-                              nil t)
-           (let* ((component
-                   (format "--%s"
-                           (downcase (buffer-substring (match-beginning 1)
-                                                       (match-end 1)))))
-                  (pat (buffer-substring (match-beginning 2) (match-end 2))))
-             (forward-line 1)
-             (list component pat)))
-          ((re-search-forward "^-*$" nil t)
-           (forward-char 1)
-           (let ((body (buffer-substring (point) (point-max))))
-             (if (and (> (length body) 0) (not (equal body "\n")))
-                 (list "-search" body)
-               nil)))
-          (t
-           nil))))
+(defun mh-pick-parse-search-buffer ()
+  "Parse the search buffer contents.
+The function returns a alist. The car of each element is either the header name
+to search in or nil to search the whole message. The cdr of the element is the
+pattern to search."
+  (save-excursion
+    (let ((pattern-list ())
+          (in-body-flag nil)
+          start begin)
+      (goto-char (point-min))
+      (while (not (eobp))
+        (if (search-forward "--------" (line-end-position) t)
+            (setq in-body-flag t)
+          (beginning-of-line)
+          (setq begin (point))
+          (setq start (if in-body-flag
+                          (point)
+                        (search-forward ":" (line-end-position) t)
+                        (point)))
+          (push (cons (and (not in-body-flag)
+                           (intern (downcase
+                                    (buffer-substring-no-properties
+                                     begin (1- start)))))
+                      (mh-index-parse-search-regexp
+                       (buffer-substring-no-properties
+                        start (line-end-position))))
+                pattern-list))
+        (forward-line))
+      pattern-list)))
+
+\f
+
+;; Functions specific to how pick works...
+(defun mh-pick-construct-regexp (expr component)
+  "Construct pick compatible expression corresponding to EXPR.
+COMPONENT is the component to search."
+  (cond ((atom expr) (list component expr))
+        ((eq (car expr) 'and)
+         `("-lbrace" ,@(mh-pick-construct-regexp (cadr expr) component) "-and"
+           ,@(mh-pick-construct-regexp (caddr expr) component) "-rbrace"))
+        ((eq (car expr) 'or)
+         `("-lbrace" ,@(mh-pick-construct-regexp (cadr expr) component) "-or"
+           ,@(mh-pick-construct-regexp (caddr expr) component) "-rbrace"))
+        ((eq (car expr) 'not)
+         `("-lbrace" "-not" ,@(mh-pick-construct-regexp (cadr expr) component)
+           "-rbrace"))
+        (t (error "Unknown operator '%s' seen" (car expr)))))
+
+(defun mh-pick-regexp-builder (pattern-list)
+  "Generate pick search expression from PATTERN-LIST."
+  (let ((result ()))
+    (dolist (pattern pattern-list)
+      (when (cdr pattern)
+        (setq result `(,@result "-and" "-lbrace"
+                       ,@(mh-pick-construct-regexp
+                          (cdr pattern) (if (car pattern)
+                                            (format "-%s" (car pattern))
+                                          "-search"))
+                       "-rbrace"))))
+    (cdr result)))
 
 \f
 
@@ -213,7 +281,9 @@ or nil if no pieces remain."
 ;;; If this changes, modify mh-pick-mode-help-messages accordingly, above.
 (gnus-define-keys  mh-pick-mode-map
   "\C-c?"               mh-help
-  "\C-c\C-c"            mh-do-pick-search
+  "\C-c\C-i"            mh-index-do-search
+  "\C-c\C-p"            mh-pick-do-search
+  "\C-c\C-c"            mh-do-search
   "\C-c\C-f\C-b"        mh-to-field
   "\C-c\C-f\C-c"        mh-to-field
   "\C-c\C-f\C-d"        mh-to-field
index d3859821ae12b76446f72b1ef75cb199d38cd9bb..f00afa84f86cde0a1c14699bafa717607ae3660f 100644 (file)
 ;;               -format "%(msg)\n%{message-id}\n%{references}\n%{subject}\n"
 ;;        I would really appreciate it if someone would help me with this.
 ;;
-;;    (2) Implement heuristics to recognize message-id's in In-Reply-To:
-;;        header. Right now it just assumes that the last text between angles
-;;        (< and >) is the message-id. There is the chance that this will
-;;        incorrectly use an email address like a message-id.
+;;    (2) Implement heuristics to recognize message identifiers in
+;;        In-Reply-To: header. Right now it just assumes that the last text
+;;        between angles (< and >) is the message identifier. There is the
+;;        chance that this will incorrectly use an email address like a
+;;        message identifier.
 ;;
-;;    (3) Error checking of found message-id's should be done.
+;;    (3) Error checking of found message identifiers should be done.
 ;;
 ;;    (4) Since this breaks the assumption that message indices increase as
 ;;        one goes down the buffer, the binary search based mh-goto-msg
 ;;        doesn't work. I have a simpler replacement which may be less
 ;;        efficient.
 ;;
-;;    (5) Better canonicalizing for message-id and subject strings.
+;;    (5) Better canonicalizing for message identifier and subject strings.
 ;;
 
 ;; Internal support for MH-E package.
 
 ;;; Change Log:
 
-;; $Id: mh-seq.el,v 1.10 2003/01/08 23:21:16 wohler Exp $
+;; $Id: mh-seq.el,v 1.101 2003/01/26 00:57:35 jchonig Exp $
 
 ;;; Code:
 
 
 ;;; Maps and hashes...
 (defvar mh-thread-id-hash nil
-  "Hashtable used to canonicalize message-id strings.")
+  "Hashtable used to canonicalize message identifiers.")
 (defvar mh-thread-subject-hash nil
   "Hashtable used to canonicalize subject strings.")
 (defvar mh-thread-id-table nil
-  "Thread ID table maps from message-id's to message containers.")
+  "Thread ID table maps from message identifiers to message containers.")
 (defvar mh-thread-id-index-map nil
-  "Table to lookup message index number from message-id.")
+  "Table to look up message index number from message identifier.")
 (defvar mh-thread-index-id-map nil
-  "Table to lookup message-id from message index.")
+  "Table to look up message identifier from message index.")
 (defvar mh-thread-scan-line-map nil
   "Map of message index to various parts of the scan line.")
 (defvar mh-thread-old-scan-line-map nil
@@ -117,7 +118,7 @@ This is the original map that is stored when the folder is narrowed.")
 (defvar mh-thread-subject-container-hash nil
   "Hashtable used to group messages by subject.")
 (defvar mh-thread-duplicates nil
-  "Hashtable used to remember multiple messages with the same message-id.")
+  "Hashtable used to associate messages with the same message identifier.")
 (defvar mh-thread-history ()
   "Variable to remember the transformations to the thread tree.
 When new messages are added, these transformations are rewound, then the
@@ -141,10 +142,12 @@ redone to get the new thread tree. This makes incremental threading easier.")
 (defun mh-delete-seq (sequence)
   "Delete the SEQUENCE."
   (interactive (list (mh-read-seq-default "Delete" t)))
-  (mh-map-to-seq-msgs 'mh-notate-if-in-one-seq sequence ?  (1+ mh-cmd-note)
-                      sequence)
-  (mh-undefine-sequence sequence '("all"))
-  (mh-delete-seq-locally sequence))
+  (let ((msg-list (mh-seq-to-msgs sequence)))
+    (mh-undefine-sequence sequence '("all"))
+    (mh-delete-seq-locally sequence)
+    (mh-iterate-on-messages-in-region msg (point-min) (point-max)
+      (when (and (member msg msg-list) (not (mh-seq-containing-msg msg nil)))
+        (mh-notate nil ?  (1+ mh-cmd-note))))))
 
 ;; Avoid compiler warnings
 (defvar view-exit-action)
@@ -154,7 +157,7 @@ redone to get the new thread tree. This makes incremental threading easier.")
   "List the sequences defined in the folder being visited."
   (interactive)
   (let ((folder mh-current-folder)
-        (temp-buffer mh-temp-sequences-buffer)
+        (temp-buffer mh-sequences-buffer)
         (seq-list mh-seq-list)
         (max-len 0))
     (with-output-to-temp-buffer temp-buffer
@@ -223,7 +226,7 @@ Use \\<mh-folder-mode-map>\\[mh-widen] to undo this command."
              (narrow-to-region eob (point-max))
              (mh-notate-user-sequences)
              (mh-notate-deleted-and-refiled)
-             (mh-notate-seq 'cur mh-note-cur mh-cmd-note)
+             (mh-notate-cur)
              (when msg-at-cursor (mh-goto-msg msg-at-cursor t t))
              (make-variable-buffer-local 'mh-non-seq-mode-line-annotation)
              (setq mh-non-seq-mode-line-annotation mh-mode-line-annotation)
@@ -246,18 +249,28 @@ If variable `transient-mark-mode' is non-nil and the mark is active, then
 the selected region is added to the sequence."
   (interactive (list (cond
                       ((mh-mark-active-p t)
-                       (mh-region-to-msg-list (region-beginning) (region-end)))
+                       (cons (region-beginning) (region-end)))
                       (current-prefix-arg
                        (mh-read-seq-default "Add messages from" t))
                       (t
-                       (mh-get-msg-num t)))
+                       (cons (line-beginning-position) (line-end-position))))
                      (mh-read-seq-default "Add to" nil)))
-  (if (not (mh-internal-seq sequence))
-      (setq mh-last-seq-used sequence))
-  (mh-add-msgs-to-seq (cond ((numberp msg-or-seq) (list msg-or-seq))
-                            ((listp msg-or-seq) msg-or-seq)
-                            (t (mh-seq-to-msgs msg-or-seq)))
-                      sequence))
+  (let ((internal-seq-flag (mh-internal-seq sequence))
+        msg-list)
+    (cond ((and (consp msg-or-seq)
+                (numberp (car msg-or-seq)) (numberp (cdr msg-or-seq)))
+           (mh-iterate-on-messages-in-region m (car msg-or-seq) (cdr msg-or-seq)
+             (push m msg-list)
+             (unless internal-seq-flag
+               (mh-notate nil mh-note-seq (1+ mh-cmd-note))))
+           (mh-add-msgs-to-seq msg-list sequence internal-seq-flag t))
+          ((or (numberp msg-or-seq) (listp msg-or-seq))
+           (when (numberp msg-or-seq)
+             (setq msg-or-seq (list msg-or-seq)))
+           (mh-add-msgs-to-seq msg-or-seq sequence internal-seq-flag))
+          (t (mh-add-msgs-to-seq (mh-seq-to-msgs msg-or-seq) sequence)))
+    (if (not internal-seq-flag)
+        (setq mh-last-seq-used sequence))))
 
 (defun mh-valid-view-change-operation-p (op)
   "Check if the view change operation can be performed.
@@ -289,7 +302,7 @@ OP is one of 'widen and 'unthread."
           (mh-goto-msg msg t t))
       (mh-notate-deleted-and-refiled)
       (mh-notate-user-sequences)
-      (mh-notate-seq 'cur mh-note-cur mh-cmd-note)
+      (mh-notate-cur)
       (mh-recenter nil)))
   (if (and (boundp 'tool-bar-mode) tool-bar-mode)
       (set (make-local-variable 'tool-bar-map) mh-folder-tool-bar-map))
@@ -301,15 +314,18 @@ OP is one of 'widen and 'unthread."
   "Notate messages marked for deletion or refiling.
 Messages to be deleted are given by `mh-delete-list' while messages to be
 refiled are present in `mh-refile-list'."
-  (mh-mapc #'(lambda (msg) (mh-notate msg mh-note-deleted mh-cmd-note))
-           mh-delete-list)
-  (mh-mapc #'(lambda (dest-msg-list)
-               ;; foreach folder name, get the keyed sequence from mh-seq-list
-               (let ((msg-list (cdr dest-msg-list)))
-                 (mh-mapc #'(lambda (msg)
-                              (mh-notate msg mh-note-refiled mh-cmd-note))
-                          msg-list)))
-           mh-refile-list))
+  (let ((refiled-hash (make-hash-table))
+        (deleted-hash (make-hash-table)))
+    (dolist (msg mh-delete-list)
+      (setf (gethash msg deleted-hash) t))
+    (dolist (dest-msg-list mh-refile-list)
+      (dolist (msg (cdr dest-msg-list))
+        (setf (gethash msg refiled-hash) t)))
+    (mh-iterate-on-messages-in-region msg (point-min) (point-max)
+      (cond ((gethash msg refiled-hash)
+             (mh-notate nil mh-note-refiled mh-cmd-note))
+            ((gethash msg deleted-hash)
+             (mh-notate nil mh-note-deleted mh-cmd-note))))))
 
 \f
 
@@ -380,7 +396,22 @@ passed as arguments to FUNC."
   "Mark the scan listing.
 All messages in SEQ are marked with NOTATION at OFFSET from the beginning of
 the line."
-  (mh-map-to-seq-msgs 'mh-notate seq notation offset))
+  (let ((msg-list (mh-seq-to-msgs seq)))
+    (mh-iterate-on-messages-in-region msg (point-min) (point-max)
+      (when (member msg msg-list)
+        (mh-notate nil notation offset)))))
+
+;;;###mh-autoload
+(defun mh-notate-cur ()
+  "Mark the MH sequence cur.
+In addition to notating the current message with `mh-note-cur' the function
+uses `overlay-arrow-position' to put a marker in the fringe."
+  (let ((cur (car (mh-seq-to-msgs 'cur))))
+    (when (and cur (mh-goto-msg cur t t))
+      (mh-notate nil mh-note-cur mh-cmd-note)
+      (beginning-of-line)
+      (setq mh-arrow-marker (set-marker mh-arrow-marker (point)))
+      (setq overlay-arrow-position mh-arrow-marker))))
 
 ;;;###mh-autoload
 (defun mh-add-to-sequence (seq msgs)
@@ -448,19 +479,33 @@ LOCATION."
       (goto-char location)
       (insert-buffer-substring (current-buffer) beginning-of-line end))))
 
+;;;###mh-autoload
+(defmacro mh-iterate-on-messages-in-region (var begin end &rest body)
+  "Iterate over region.
+VAR is bound to the message on the current line as we loop starting from BEGIN
+till END. In each step BODY is executed.
+
+If VAR is nil then the loop is executed without any binding."
+  (unless (symbolp var)
+    (error "Can not bind the non-symbol %s" var))
+  (let ((binding-needed-flag var))
+    `(save-excursion
+       (goto-char ,begin)
+       (while (and (<= (point) ,end) (not (eobp)))
+         (when (looking-at mh-scan-valid-regexp)
+           (let ,(if binding-needed-flag `((,var (mh-get-msg-num t))) ())
+             ,@body))
+         (forward-line 1)))))
+
 ;;;###mh-autoload
 (defun mh-region-to-msg-list (begin end)
   "Return a list of messages within the region between BEGIN and END."
-  (save-excursion
-    ;; If end is end of buffer back up one position
-    (setq end (if (equal end (point-max)) (1- end) end))
-    (goto-char begin)
-    (let ((result ()))
-      (while (<= (point) end)
-        (let ((index (mh-get-msg-num nil)))
-          (when (numberp index) (push index result)))
-        (forward-line 1))
-      result)))
+  ;; If end is end of buffer back up one position
+  (setq end (if (equal end (point-max)) (1- end) end))
+  (let ((result))
+    (mh-iterate-on-messages-in-region index begin end
+      (when (numberp index) (push index result)))
+    result))
 
 \f
 
@@ -877,13 +922,14 @@ table."
 
 ;;; Generate Threads...
 
+(defvar mh-message-id-regexp "^<.*@.*>$"
+  "Regexp to recognize whether a string is a message identifier.")
+
 (defun mh-thread-generate (folder msg-list)
   "Scan FOLDER to get info for threading.
 Only information about messages in MSG-LIST are added to the tree."
-  (save-excursion
-    (set-buffer (get-buffer-create "*mh-thread*"))
+  (with-temp-buffer
     (mh-thread-set-tables folder)
-    (erase-buffer)
     (when msg-list
       (apply
        #'call-process (expand-file-name mh-scan-prog mh-progs) nil '(t nil) nil
@@ -917,7 +963,9 @@ Only information about messages in MSG-LIST are added to the tree."
               (multiple-value-setq (subject subject-re-p)
                 (mh-thread-prune-subject subject))
               (setq in-reply-to (mh-thread-process-in-reply-to in-reply-to))
-              (setq refs (append (split-string refs) in-reply-to))
+              (setq refs (loop for x in (append (split-string refs) in-reply-to)
+                               when (string-match mh-message-id-regexp x)
+                               collect x))
               (setq id (mh-thread-canonicalize-id id))
               (mh-thread-update-id-index-maps id index)
               (setq refs (mapcar #'mh-thread-canonicalize-id refs))
@@ -963,7 +1011,7 @@ All messages after START-POINT are added to the thread tree."
         (mh-thread-generate-scan-lines thread-tree -2))
       (mh-notate-user-sequences)
       (mh-notate-deleted-and-refiled)
-      (mh-notate-seq 'cur mh-note-cur mh-cmd-note)
+      (mh-notate-cur)
       (set-buffer-modified-p old-buffer-modified-flag))))
 
 (defvar mh-thread-last-ancestor)
@@ -997,20 +1045,19 @@ the message."
                  (while (mh-container-parent mh-thread-last-ancestor)
                    (setq mh-thread-last-ancestor
                          (mh-container-parent mh-thread-last-ancestor))))
-               (insert (car scan-line)
-                       (format (format "%%%ss"
-                                      (if dupl-flag level new-level)) "")
-                       (if (and (mh-container-real-child-p tree) dupl-flag
-                                (not force-angle-flag))
-                           "[" "<")
-                       (cadr scan-line)
-                       (if (and (mh-container-real-child-p tree) dupl-flag
-                                (not force-angle-flag))
-                           "]" ">")
-                       (truncate-string-to-width
-                        (caddr scan-line) (- mh-thread-body-width
-                                             (if dupl-flag level new-level)))
-                       "\n")
+               (let* ((lev (if dupl-flag level new-level))
+                      (square-flag (or (and (mh-container-real-child-p tree)
+                                            (not force-angle-flag)
+                                            dupl-flag)
+                                       (equal lev 0))))
+                 (insert (car scan-line)
+                         (format (format "%%%ss" lev) "")
+                         (if square-flag "[" "<")
+                         (cadr scan-line)
+                         (if square-flag "]" ">")
+                         (truncate-string-to-width
+                          (caddr scan-line) (- mh-thread-body-width lev))
+                         "\n"))
                (setq increment-level-flag t)
                (setq dupl-flag nil)))
            (unless increment-level-flag (setq new-level level))
@@ -1057,51 +1104,50 @@ Otherwise uses the line at point as the scan line to parse."
   (message "Threading %s..." (buffer-name))
   (mh-thread-initialize)
   (goto-char (point-min))
-  (while (not (eobp))
-    (let ((index (mh-get-msg-num nil)))
-      (when (numberp index)
-        (setf (gethash index mh-thread-scan-line-map)
-              (mh-thread-parse-scan-line))))
-    (forward-line))
-  (let* ((range (format "%s-%s" mh-first-msg-num mh-last-msg-num))
-         (thread-tree (mh-thread-generate (buffer-name) (list range))))
-    (delete-region (point-min) (point-max))
-    (let ((mh-thread-body-width (- (window-width) mh-cmd-note
-                                   (1- mh-scan-field-subject-start-offset)))
-          (mh-thread-last-ancestor nil))
-      (mh-thread-generate-scan-lines thread-tree -2))
-    (mh-notate-user-sequences)
-    (mh-notate-deleted-and-refiled)
-    (mh-notate-seq 'cur mh-note-cur mh-cmd-note)
-    (message "Threading %s...done" (buffer-name))))
+  (let ((msg-list ()))
+    (while (not (eobp))
+      (let ((index (mh-get-msg-num nil)))
+        (when (numberp index)
+          (push index msg-list)
+          (setf (gethash index mh-thread-scan-line-map)
+                (mh-thread-parse-scan-line))))
+      (forward-line))
+    (let* ((range (mh-coalesce-msg-list msg-list))
+           (thread-tree (mh-thread-generate (buffer-name) range)))
+      (delete-region (point-min) (point-max))
+      (let ((mh-thread-body-width (- (window-width) mh-cmd-note
+                                     (1- mh-scan-field-subject-start-offset)))
+            (mh-thread-last-ancestor nil))
+        (mh-thread-generate-scan-lines thread-tree -2))
+      (mh-notate-user-sequences)
+      (mh-notate-deleted-and-refiled)
+      (mh-notate-cur)
+      (message "Threading %s...done" (buffer-name)))))
 
 ;;;###mh-autoload
 (defun mh-toggle-threads ()
-  "Toggle threaded view of folder.
-The conversion of normal view to threaded view is exact, that is the same
-messages are displayed in the folder buffer before and after threading. However
-the conversion from threaded view to normal view is inexact. So more messages
-than were originally present may be shown as a result."
+  "Toggle threaded view of folder."
   (interactive)
   (let ((msg-at-point (mh-get-msg-num nil))
         (old-buffer-modified-flag (buffer-modified-p))
         (buffer-read-only nil))
-    (cond ((and (memq 'unthread mh-view-ops) mh-narrowed-to-seq)
-           (unless (mh-valid-view-change-operation-p 'unthread)
-             (error "Can't unthread folder"))
-           (mh-scan-folder mh-current-folder
-                           (format "%s" mh-narrowed-to-seq)
-                           t)
-           (when mh-index-data
-             (mh-index-insert-folder-headers)))
-          ((memq 'unthread mh-view-ops)
+    (cond ((memq 'unthread mh-view-ops)
            (unless (mh-valid-view-change-operation-p 'unthread)
              (error "Can't unthread folder"))
-           (mh-scan-folder mh-current-folder
-                           (format "%s-%s" mh-first-msg-num mh-last-msg-num)
-                           t)
+           (let ((msg-list ()))
+             (goto-char (point-min))
+             (while (not (eobp))
+               (let ((index (mh-get-msg-num t)))
+                 (when index
+                   (push index msg-list)))
+               (forward-line))
+             (mh-scan-folder mh-current-folder
+                             (mapcar #'(lambda (x) (format "%s" x))
+                                     (mh-coalesce-msg-list msg-list))
+                             t))
            (when mh-index-data
-             (mh-index-insert-folder-headers)))
+             (mh-index-insert-folder-headers)
+             (mh-notate-cur)))
           (t (mh-thread-folder)
              (push 'unthread mh-view-ops)))
     (when msg-at-point (mh-goto-msg msg-at-point t t))
@@ -1244,28 +1290,23 @@ start of the region and the second is the point at the end."
          (error "Folder isn't threaded"))
         ((eobp)
          (error "No message at point"))
-        (t (mh-delete-msg
-            (apply #'mh-region-to-msg-list (mh-thread-find-children))))))
+        (t (let ((region (mh-thread-find-children)))
+             (mh-iterate-on-messages-in-region () (car region) (cadr region)
+               (mh-delete-a-msg nil))
+             (mh-next-msg)))))
 
-;; This doesn't handle mh-default-folder-for-message-function. We should
-;; refactor that code so that we don't copy it.
 ;;;###mh-autoload
 (defun mh-thread-refile (folder)
   "Mark current message and all its children for refiling to FOLDER."
-  (interactive (list
-                (intern (mh-prompt-for-folder
-                         "Destination"
-                         (cond ((eq 'refile (car mh-last-destination-folder))
-                                (symbol-name (cdr mh-last-destination-folder)))
-                               (t ""))
-                         t))))
+  (interactive (list (intern (mh-prompt-for-refile-folder))))
   (cond ((not (memq 'unthread mh-view-ops))
          (error "Folder isn't threaded"))
         ((eobp)
          (error "No message at point"))
-        (t (mh-refile-msg
-            (apply #'mh-region-to-msg-list (mh-thread-find-children))
-            folder))))
+        (t (let ((region (mh-thread-find-children)))
+             (mh-iterate-on-messages-in-region () (car region) (cadr region)
+               (mh-refile-a-msg nil folder))
+             (mh-next-msg)))))
 
 (provide 'mh-seq)
 
index e57660d051aead5b9b1e217d48be3c58cb6e5d72..ca60b2f78401bc2b6f92afafc6bd7895c97a2286 100644 (file)
@@ -31,7 +31,7 @@
 
 ;;; Change Log:
 
-;; $Id: mh-speed.el,v 1.2 2003/01/08 23:21:16 wohler Exp $
+;; $Id: mh-speed.el,v 1.37 2003/01/31 03:18:18 satyaki Exp $
 
 ;;; Code:
 
@@ -44,7 +44,6 @@
 (defvar mh-speed-refresh-flag nil)
 (defvar mh-speed-last-selected-folder nil)
 (defvar mh-speed-folder-map (make-hash-table :test #'equal))
-(defvar mh-speed-folders-cache (make-hash-table :test #'equal))
 (defvar mh-speed-flists-cache (make-hash-table :test #'equal))
 (defvar mh-speed-flists-process nil)
 (defvar mh-speed-flists-timer nil)
@@ -256,7 +255,7 @@ Do the right thing for the different kinds of buffers that MH-E uses."
 
 (defun mh-speed-add-buttons (folder level)
   "Add speedbar button for FOLDER which is at indented by LEVEL amount."
-  (let ((folder-list (mh-speed-folders folder)))
+  (let ((folder-list (mh-sub-folders folder)))
     (mapc
      (lambda (f)
        (let* ((folder-name (format "%s%s%s" (or folder "+")
@@ -344,58 +343,7 @@ Optional ARGS are ignored."
        (mh-visit-folder folder range)
        (delete-other-windows)))))
 
-(defun mh-speed-folders (folder)
-  "Find the subfolders of FOLDER.
-The function avoids running folders unnecessarily by caching the results of
-the actual folders call."
-  (let ((match (gethash folder mh-speed-folders-cache 'no-result)))
-    (cond ((eq match 'no-result)
-           (setf (gethash folder mh-speed-folders-cache)
-                 (mh-speed-folders-actual folder)))
-          (t match))))
-
-(defun mh-speed-folders-actual (folder)
-  "Execute the command folders to return the sub-folders of FOLDER.
-Filters out the folder names that start with \".\" so that directories that
-aren't usually mail folders are hidden."
-  (let* ((folder (cond ((and (stringp folder)
-                             (equal (substring folder 0 1) "+"))
-                        folder)
-                       (t nil)))
-         (arg-list `(,(expand-file-name "folders" mh-progs)
-                     nil (t nil) nil "-noheader" "-norecurse"
-                     ,@(if (stringp folder) (list folder) ())))
-         (results ()))
-    (with-temp-buffer
-      (apply #'call-process arg-list)
-      (goto-char (point-min))
-      (while (not (and (eolp) (bolp)))
-        (goto-char (line-end-position))
-        (let ((has-pos (search-backward " has " (line-beginning-position) t)))
-          (when (integerp has-pos)
-            (while (or (equal (char-after has-pos) ? )
-                       (equal (char-after has-pos) ?+))
-              (decf has-pos))
-            (incf has-pos)
-            (let ((name (buffer-substring (line-beginning-position) has-pos)))
-              (let ((first-char (substring name 0 1)))
-                (unless (or (string-equal first-char ".")
-                            (string-equal first-char "#")
-                            (string-equal first-char ","))
-                  (push
-                   (cons name
-                         (search-forward "(others)" (line-end-position) t))
-                   results)))))
-          (forward-line 1))))
-    (setq results (nreverse results))
-    (when (stringp folder)
-      (setq results (cdr results))
-      (let ((folder-name-len (length (format "%s/" (substring folder 1)))))
-        (setq results (mapcar (lambda (f)
-                                (cons (substring (car f) folder-name-len)
-                                      (cdr f)))
-                              results))))
-    results))
+(defvar mh-speed-current-folder nil)
 
 ;;;###mh-autoload
 (defun mh-speed-flists (force)
@@ -418,9 +366,17 @@ If FORCE is non-nil the timer is reset."
              (unless (and (processp mh-speed-flists-process)
                           (not (eq (process-status mh-speed-flists-process)
                                    'exit)))
+               (setq mh-speed-current-folder
+                     (concat
+                      (with-temp-buffer
+                        (call-process (expand-file-name "folder" mh-progs)
+                                      nil '(t nil) nil "-fast")
+                        (buffer-substring (point-min) (1- (point-max))))
+                      "+"))
                (setq mh-speed-flists-process
-                     (start-process (expand-file-name "flists" mh-progs) nil
-                                    "flists" "-recurse"
+                     (start-process "*flists*" nil
+                                    (expand-file-name "flists" mh-progs)
+                                    "-recurse"
                                     "-sequence" (symbol-name mh-unseen-seq)))
                (set-process-filter mh-speed-flists-process
                                    'mh-speed-parse-flists-output)))))))
@@ -440,7 +396,7 @@ next."
                              (substring output position line-end))
                 mh-speed-partial-line "")
           (multiple-value-setq (folder unseen total)
-            (mh-parse-flist-output-line line))
+            (mh-parse-flist-output-line line mh-speed-current-folder))
           (when (and folder unseen total)
             (setf (gethash folder mh-speed-flists-cache) (cons unseen total))
             (save-excursion
@@ -489,10 +445,8 @@ next."
            (parent (if last-slash (substring folder 0 last-slash) nil))
            (parent-position (gethash parent mh-speed-folder-map))
            (parent-change nil))
-      (remhash parent mh-speed-folders-cache)
-      (remhash folder mh-speed-folders-cache)
       (when parent-position
-        (let ((parent-kids (mh-speed-folders parent)))
+        (let ((parent-kids (mh-sub-folders parent)))
           (cond ((null parent-kids)
                  (setq parent-change ?+))
                 ((and (null (cdr parent-kids))
@@ -517,7 +471,7 @@ next."
           (setq mh-speed-last-selected-folder nil)
           (setq mh-speed-refresh-flag t)))
       (when (equal folder "")
-        (clrhash mh-speed-folders-cache)))))
+        (clrhash mh-sub-folders-cache)))))
 
 ;;;###mh-autoload
 (defun mh-speed-add-folder (folder)
@@ -545,7 +499,6 @@ The function invalidates the latest ancestor that is present."
          `(mh-children-p t)))
       (when (get-text-property (line-beginning-position) 'mh-expanded)
         (mh-speed-toggle))
-      (remhash ancestor mh-speed-folders-cache)
       (setq mh-speed-refresh-flag t))))
 
 ;; Make it slightly more general to allow for [ ] buttons to be changed to
index d4057d92ece45dff587b487c8271334acfd90735..34332dc202a146053d824f9c748ff22640172bb5 100644 (file)
@@ -30,7 +30,7 @@
 
 ;;; Change Log:
 
-;; $Id: mh-utils.el,v 1.34 2003/01/08 23:21:16 wohler Exp $
+;; $Id: mh-utils.el,v 1.214 2003/01/27 04:42:23 wohler Exp $
 
 ;;; Code:
 
@@ -121,7 +121,7 @@ variable `transient-mark-mode' is active."
   "Regexp to find the number of a message in a scan line.
 The message's number must be surrounded with \\( \\)")
 
-(defvar mh-scan-msg-overflow-regexp "^\\?[0-9]"
+(defvar mh-scan-msg-overflow-regexp "^[?0-9][0-9]"
   "Regexp to find a scan line in which the message number overflowed.
 The message's number is left truncated in this case.")
 
@@ -149,7 +149,7 @@ default, or nil to calculate the default the usual way.
 NOTE: This variable is not an ordinary hook;
 It may not be a list of functions.")
 
-(defvar mh-show-buffer-mode-line-buffer-id "{show-%s} %d"
+(defvar mh-show-buffer-mode-line-buffer-id "    {show-%s} %d"
   "Format string to produce `mode-line-buffer-identification' for show buffers.
 First argument is folder name.  Second is message number.")
 
@@ -464,11 +464,6 @@ message about the fontification operation."
 
 ;;; Internal bookkeeping variables:
 
-;; The value of `mh-folder-list-change-hook' is called whenever
-;; mh-folder-list variable is set.
-;; List of folder names for completion.
-(defvar mh-folder-list nil)
-
 ;; Cached value of the `Path:' component in the user's MH profile.
 ;; User's mail folder directory.
 (defvar mh-user-path nil)
@@ -492,14 +487,20 @@ message about the fontification operation."
 ;; Name of the Inbox folder.
 (defvar mh-inbox nil)
 
-;; Name of MH-E scratch buffer.
-(defconst mh-temp-buffer " *mh-temp*")
-
-;; Name of the MH-E folder list buffer.
-(defconst mh-temp-folders-buffer "*Folders*")
-
-;; Name of the MH-E sequences list buffer.
-(defconst mh-temp-sequences-buffer "*Sequences*")
+;; The names of ephemeral buffers have a " *mh-" prefix (so that they are
+;; hidden and can be programmatically removed in mh-quit), and the variable
+;; names have the form mh-temp-.*-buffer.
+(defconst mh-temp-buffer " *mh-temp*")  ;scratch
+
+;; The names of MH-E buffers that are not ephemeral and can be used by the
+;; user (and deleted by the user when no longer needed) have a "*MH-E " prefix
+;; (so they can be programmatically removed in mh-quit), and the variable
+;; names have the form mh-.*-buffer.
+(defconst mh-folders-buffer "*MH-E Folders*") ;folder list
+(defconst mh-info-buffer "*MH-E Info*") ;version information buffer
+(defconst mh-log-buffer "*MH-E Log*") ;output of MH commands and so on
+(defconst mh-recipients-buffer "*MH-E Recipients*") ;killed when draft sent
+(defconst mh-sequences-buffer "*MH-E Sequences*") ;sequences list
 
 ;; Window configuration before MH-E command.
 (defvar mh-previous-window-config nil)
@@ -530,6 +531,19 @@ message about the fontification operation."
 (defvar mh-show-folder-buffer nil
   "Keeps track of folder whose message is being displayed.")
 
+(defvar mh-logo-cache nil)
+
+(defun mh-logo-display ()
+  "Modify mode line to display MH-E logo."
+  (when (fboundp 'find-image)
+    (add-text-properties
+     0 2
+     `(display ,(or mh-logo-cache
+                    (setq mh-logo-cache
+                          (find-image '((:type xpm :ascent center
+                                         :file "mh-logo.xpm"))))))
+     (car mode-line-buffer-identification))))
+
 ;;; This holds a documentation string used by describe-mode.
 (defun mh-showing-mode (&optional arg)
   "Change whether messages should be displayed.
@@ -1133,22 +1147,25 @@ The message is displayed in raw form."
     (delete-other-windows)
     (switch-to-buffer edit-buffer)))
 
-(defun mh-decode-quoted-printable ()
-  "Run mimedecode on current buffer, replacing its contents."
-  (let ((case-fold-search t))
+(defun mh-decode-content-transfer-encoded-message ()
+  "Run mimencode on message body, if needed."
+  (let ((case-fold-search t)
+        (header-end (mail-header-end)))
     (goto-char (point-min))
-    (when (and (re-search-forward
-                "^content-transfer-encoding:[ \t]*quoted-printable"
-                (if mh-decode-mime-flag (mail-header-end) nil) t)
-               (search-forward "\n\n" nil t))
-      (message "Converting quoted-printable characters...")
-      (let ((modified (buffer-modified-p))
-            (command "mimedecode"))
-        (shell-command-on-region (point-min) (point-max) command t t)
-        (if (fboundp 'deactivate-mark)
-            (deactivate-mark))
-        (set-buffer-modified-p modified))
-      (message "Converting quoted-printable characters... done."))))
+    (when (re-search-forward "^content-transfer-encoding: " header-end t)
+      (let ((enc (buffer-substring-no-properties (point) (line-end-position)))
+            cmdline)
+        (setq cmdline
+              (cond ((string-match "base64" enc) (list "-u" "-b" "-p"))
+                    ((string-match "quoted-printable" enc) (list "-u" "-q"))
+                    (t nil)))
+        (when cmdline
+          (beginning-of-line)
+          (insert "Removed-")
+          (setq header-end (mail-header-end))
+          (goto-char (1+ header-end))
+          (apply #'call-process-region (1+ header-end) (point-max) "mimencode"
+                 t t nil cmdline))))))
 
 (defun mh-show-unquote-From ()
   "Decode >From at beginning of lines for `mh-show-mode'."
@@ -1208,9 +1225,9 @@ Sets the current buffer to the show buffer."
                                          (if (stringp formfile)
                                              (list "-form" formfile))
                                          msg-filename)
-               (insert-file-contents msg-filename))
-             (if mh-decode-quoted-printable-flag
-                 (mh-decode-quoted-printable))
+               (insert-file-contents-literally msg-filename))
+             (if mh-decode-content-transfer-encoded-message-flag
+                 (mh-decode-content-transfer-encoded-message))
              ;; Cleanup old mime handles
              (mh-mime-cleanup)
              ;; Use mm to display buffer
@@ -1248,6 +1265,7 @@ Sets the current buffer to the show buffer."
              (setq mode-line-buffer-identification
                    (list (format mh-show-buffer-mode-line-buffer-id
                                  folder-name msg-num)))
+             (mh-logo-display)
              (set-buffer folder)
              (setq mh-showing-with-headers nil))))))
 
@@ -1407,12 +1425,7 @@ arguments, after these variable have been set."
       (setq mh-previous-seq (mh-get-profile-field "Previous-Sequence:"))
       (if mh-previous-seq
           (setq mh-previous-seq (intern mh-previous-seq)))
-      (run-hooks 'mh-find-path-hook)))
-  (and mh-auto-folder-collect-flag
-       (let ((mh-no-install t))         ;only get folders if MH installed
-         (condition-case err
-             (mh-make-folder-list-background)
-           (file-error)))))             ;so don't complain if not installed
+      (run-hooks 'mh-find-path-hook))))
 
 (defun mh-file-command-p (file)
   "Return t if file FILE is the name of a executable regular file."
@@ -1537,11 +1550,14 @@ The message number width portion of the format is discovered using
                                (match-beginning 1) (match-end 1))))))
     width))
 
-(defun mh-add-msgs-to-seq (msgs seq &optional internal-flag)
+(defun mh-add-msgs-to-seq (msgs seq &optional internal-flag dont-annotate-flag)
   "Add MSGS to SEQ.
 Remove duplicates and keep sequence sorted. If optional INTERNAL-FLAG is
 non-nil, do not mark the message in the scan listing or inform MH of the
-addition."
+addition.
+
+If DONT-ANNOTATE-FLAG is non-nil then the annotations in the folder buffer are
+not updated."
   (let ((entry (mh-find-seq seq)))
     (if (and msgs (atom msgs)) (setq msgs (list msgs)))
     (if (null entry)
@@ -1552,7 +1568,8 @@ addition."
                               (append msgs (mh-seq-msgs entry))))))
     (cond ((not internal-flag)
            (mh-add-to-sequence seq msgs)
-           (mh-notate-seq seq mh-note-seq (1+ mh-cmd-note))))))
+           (unless dont-annotate-flag
+             (mh-notate-seq seq mh-note-seq (1+ mh-cmd-note)))))))
 
 (defun mh-canonicalize-sequence (msgs)
   "Sort MSGS in decreasing order and remove duplicates."
@@ -1564,19 +1581,193 @@ addition."
         (setq head (cdr head))))
     sorted-msgs))
 
+(defvar mh-sub-folders-cache (make-hash-table :test #'equal))
+
+(defun mh-normalize-folder-name (folder &optional empty-string-okay
+                                        dont-remove-trailing-slash)
+  "Normalizes FOLDER name.
+Makes sure that two '/' characters never occur next to each other. Also all
+occurrences of \"..\" and \".\" are suitably processed. So \"+inbox/../news\"
+will be normalized to \"+news\".
+
+If optional argument EMPTY-STRING-OKAY is nil then a '+' is added at the
+front if FOLDER lacks one. If non-nil and FOLDER is the empty string then
+nothing is added.
+
+If optional argument DONT-REMOVE-TRAILING-SLASH is non-nil then a trailing '/'
+if present is retained (if present), otherwise it is removed."
+  (when (stringp folder)
+    ;; Replace two or more consecutive '/' characters with a single '/'
+    (while (string-match "//" folder)
+      (setq folder (replace-match "/" nil t folder)))
+    (let* ((length (length folder))
+           (trailing-slash-present (and (> length 0)
+                                        (equal (aref folder (1- length)) ?/))))
+      (let ((components (split-string folder "/"))
+            (result ()))
+        ;; Remove .. and . from the pathname.
+        (dolist (component components)
+          (cond ((and (equal component "..") result)
+                 (pop result))
+                ((equal component ".."))
+                ((equal component "."))
+                (t (push component result))))
+        (setq folder "")
+        (dolist (component result)
+          (setq folder (concat component "/" folder)))
+        ;; Remove trailing '/' if needed.
+        (unless (and trailing-slash-present dont-remove-trailing-slash)
+          (when (not (equal folder ""))
+            (setq folder (substring folder 0 (1- (length folder))))))))
+    (cond ((and empty-string-okay (equal folder "")))
+          ((equal folder "") (setq folder "+"))
+          ((not (equal (aref folder 0) ?+)) (setq folder (concat "+" folder)))))
+  folder)
+
+(defun mh-sub-folders (folder &optional add-trailing-slash-flag)
+  "Find the subfolders of FOLDER.
+The function avoids running folders unnecessarily by caching the results of
+the actual folders call.
+
+If optional argument ADD-TRAILING-SLASH-FLAG is non-nil then a slash is added
+to each of the sub-folder names that may have nested folders within them."
+  (let* ((folder (mh-normalize-folder-name folder))
+         (match (gethash folder mh-sub-folders-cache 'no-result))
+         (sub-folders (cond ((eq match 'no-result)
+                             (setf (gethash folder mh-sub-folders-cache)
+                                   (mh-sub-folders-actual folder)))
+                            (t match))))
+    (if add-trailing-slash-flag
+        (mapcar #'(lambda (x)
+                    (if (cdr x) (cons (concat (car x) "/") (cdr x)) x))
+                sub-folders)
+      sub-folders)))
+
+(defun mh-sub-folders-actual (folder)
+  "Execute the command folders to return the sub-folders of FOLDER.
+Filters out the folder names that start with \".\" so that directories that
+aren't usually mail folders are hidden."
+  (let ((arg-list `(,(expand-file-name "folders" mh-progs)
+                    nil (t nil) nil "-noheader" "-norecurse" "-nototal"
+                    ,@(if (stringp folder) (list folder) ())))
+        (results ())
+        (current-folder (concat
+                         (with-temp-buffer
+                           (call-process (expand-file-name "folder" mh-progs)
+                                         nil '(t nil) nil "-fast")
+                           (buffer-substring (point-min) (1- (point-max))))
+                         "+")))
+    (with-temp-buffer
+      (apply #'call-process arg-list)
+      (goto-char (point-min))
+      (while (not (and (eolp) (bolp)))
+        (goto-char (line-end-position))
+        (let ((has-pos (search-backward " has " (line-beginning-position) t)))
+          (when (integerp has-pos)
+            (while (equal (char-after has-pos) ? )
+              (decf has-pos))
+            (incf has-pos)
+            (let* ((name (buffer-substring (line-beginning-position) has-pos))
+                   (first-char (aref name 0))
+                   (last-char (aref name (1- (length name)))))
+              (unless (member first-char '(?. ?# ?,))
+                (when (and (equal last-char ?+) (equal name current-folder))
+                  (setq name (substring name 0 (1- (length name)))))
+                (push
+                 (cons name
+                       (search-forward "(others)" (line-end-position) t))
+                 results))))
+          (forward-line 1))))
+    (setq results (nreverse results))
+    (when (stringp folder)
+      (setq results (cdr results))
+      (let ((folder-name-len (length (format "%s/" (substring folder 1)))))
+        (setq results (mapcar (lambda (f)
+                                (cons (substring (car f) folder-name-len)
+                                      (cdr f)))
+                              results))))
+    results))
+
+(defun mh-remove-from-sub-folders-cache (folder)
+  "Remove FOLDER and its parent from `mh-sub-folders-cache'.
+FOLDER should be unconditionally removed from the cache. Also the last ancestor
+of FOLDER present in the cache must be removed as well.
+
+To see why this is needed assume we have a folder +foo which has a single
+sub-folder qux. Now we create the folder +foo/bar/baz. Here we will need to
+invalidate the cached sub-folders of +foo, otherwise completion on +foo won't
+tell us about the option +foo/bar!"
+  (remhash folder mh-sub-folders-cache)
+  (block ancestor-found
+    (let ((parent folder)
+          (one-ancestor-found nil)
+          last-slash)
+      (while (setq last-slash (mh-search-from-end ?/ parent))
+        (setq parent (substring parent 0 last-slash))
+        (unless (eq (gethash parent  mh-sub-folders-cache 'none) 'none)
+          (remhash parent mh-sub-folders-cache)
+          (if one-ancestor-found
+              (return-from ancestor-found)
+            (setq one-ancestor-found t))))
+      (remhash nil mh-sub-folders-cache))))
+
 (defvar mh-folder-hist nil)
 (defvar mh-speed-folder-map)
+(defvar mh-folder-completion-map (copy-keymap minibuffer-local-completion-map))
+(define-key mh-folder-completion-map " " 'minibuffer-complete)
+
+(defun mh-folder-completion-function (name predicate flag)
+  "Programmable completion for folder names.
+NAME is the partial folder name that has been input. PREDICATE if non-nil is a
+function that is used to filter the possible choices and FLAG determines
+whether the completion is over."
+  (let* ((orig-name name)
+         (name (mh-normalize-folder-name name nil t))
+         (last-slash (mh-search-from-end ?/ name))
+         (last-complete (if last-slash (substring name 0 last-slash) nil))
+         (remainder (cond (last-complete (substring name (1+ last-slash)))
+                          ((and (> (length name) 0) (equal (aref name 0) ?+))
+                           (substring name 1))
+                          (t ""))))
+    (cond ((eq flag nil)
+           (let ((try-res (try-completion
+                           name
+                           (mapcar (lambda (x)
+                                     (cons (if (not last-complete)
+                                               (concat "+" (car x))
+                                             (concat last-complete "/" (car x)))
+                                           (cdr x)))
+                                   (mh-sub-folders last-complete t))
+                           predicate)))
+             (cond ((eq try-res nil) nil)
+                   ((and (eq try-res t) (equal name orig-name)) t)
+                   ((eq try-res t) name)
+                   (t try-res))))
+          ((eq flag t)
+           (all-completions
+            remainder (mh-sub-folders last-complete t) predicate))
+          ((eq flag 'lambda)
+           (file-exists-p
+            (concat mh-user-path
+                    (substring (mh-normalize-folder-name name) 1)))))))
+
+(defun mh-folder-completing-read (prompt default)
+  "Read folder name with PROMPT and default result DEFAULT."
+  (mh-normalize-folder-name
+   (let ((minibuffer-local-completion-map mh-folder-completion-map))
+     (completing-read prompt 'mh-folder-completion-function nil nil nil
+                      'mh-folder-hist default))
+   t))
 
 (defun mh-prompt-for-folder (prompt default can-create
-                                    &optional default-string)
+                             &optional default-string allow-root-folder-flag)
   "Prompt for a folder name with PROMPT.
 Returns the folder's name as a string. DEFAULT is used if the folder exists
 and the user types return. If the CAN-CREATE flag is t, then a folder is
 created if it doesn't already exist. If optional argument DEFAULT-STRING is
-non-nil, use it in the prompt instead of DEFAULT.
-The value of `mh-folder-list-change-hook' is a list of functions to be called,
-with no arguments, whenever the cached folder list `mh-folder-list' is
-changed."
+non-nil, use it in the prompt instead of DEFAULT. If ALLOW-ROOT-FOLDER-FLAG is
+non-nil then the function will accept the folder +, which means all folders
+when used in searching."
   (if (null default)
       (setq default ""))
   (let* ((default-string (cond (default-string (format " [%s]? "
@@ -1585,13 +1776,11 @@ changed."
                                (t (format " [%s]? " default))))
          (prompt (format "%s folder%s" prompt default-string))
          read-name folder-name)
-    (if (null mh-folder-list)
-        (mh-set-folder-list))
-    (while (and (setq read-name (completing-read prompt mh-folder-list nil nil
-                                                 "+" 'mh-folder-hist))
+    (while (and (setq read-name (mh-folder-completing-read prompt default))
                 (equal read-name "")
                 (equal default "")))
-    (cond ((or (equal read-name "") (equal read-name "+"))
+    (cond ((or (equal read-name "")
+               (and (equal read-name "+") (not allow-root-folder-flag)))
            (setq read-name default))
           ((not (mh-folder-name-p read-name))
            (setq read-name (format "+%s" read-name))))
@@ -1609,101 +1798,17 @@ changed."
                            folder-name)))
              (message "Creating %s" folder-name)
              (mh-exec-cmd-error nil "folder" folder-name)
+             (mh-remove-from-sub-folders-cache folder-name)
              (when (boundp 'mh-speed-folder-map)
                (mh-speed-add-folder folder-name))
-             (message "Creating %s...done" folder-name)
-             (setq mh-folder-list (cons (list read-name) mh-folder-list))
-             (run-hooks 'mh-folder-list-change-hook))
+             (message "Creating %s...done" folder-name))
             (new-file-flag
              (error "Folder %s is not created" folder-name))
             ((not (file-directory-p (mh-expand-file-name folder-name)))
              (error "\"%s\" is not a directory"
-                    (mh-expand-file-name folder-name)))
-            ((and (null (assoc read-name mh-folder-list))
-                  (null (assoc (concat read-name "/") mh-folder-list)))
-             (setq mh-folder-list (cons (list read-name) mh-folder-list))
-             (run-hooks 'mh-folder-list-change-hook))))
+                    (mh-expand-file-name folder-name)))))
     folder-name))
 
-(defvar mh-make-folder-list-process nil) ;The background process collecting
-                                         ;the folder list.
-
-(defvar mh-folder-list-temp nil)        ;mh-folder-list as it is being built.
-
-(defvar mh-folder-list-partial-line "") ;Start of last incomplete line from
-                                        ;folder process.
-
-(defun mh-set-folder-list ()
-  "Set `mh-folder-list' correctly.
-A useful function for the command line or for when you need to
-sync by hand.  Format is in a form suitable for completing read.
-The value of `mh-folder-list-change-hook' is a list of functions to be called,
-with no arguments, once the list of folders has been created."
-  (message "Collecting folder names...")
-  (if (not mh-make-folder-list-process)
-      (mh-make-folder-list-background))
-  (while (eq (process-status mh-make-folder-list-process) 'run)
-    (accept-process-output mh-make-folder-list-process))
-  (setq mh-folder-list mh-folder-list-temp)
-  (run-hooks 'mh-folder-list-change-hook)
-  (setq mh-folder-list-temp nil)
-  (delete-process mh-make-folder-list-process)
-  (setq mh-make-folder-list-process nil)
-  (message "Collecting folder names...done"))
-
-(defun mh-make-folder-list-background ()
-  "Start a background process to compute a list of the user's folders.
-Call `mh-set-folder-list' to wait for the result."
-  (cond
-   ((not mh-make-folder-list-process)
-    (unless mh-inbox
-      (mh-find-path))
-    (let ((process-connection-type nil))
-      (setq mh-make-folder-list-process
-            (start-process "folders" nil (expand-file-name "folders" mh-progs)
-                           "-fast"
-                           (if mh-recursive-folders-flag
-                               "-recurse"
-                             "-norecurse")))
-      (set-process-filter mh-make-folder-list-process
-                          'mh-make-folder-list-filter)
-      (process-kill-without-query mh-make-folder-list-process)))))
-
-(defun mh-make-folder-list-filter (process output)
-  "Given the PROCESS \"folders -fast\", parse OUTPUT.
-See also `set-process-filter'."
-  (let ((position 0)
-        line-end
-        new-folder
-        (prevailing-match-data (match-data)))
-    (unwind-protect
-        ;; make sure got complete line
-        (while (setq line-end (string-match "\n" output position))
-          (setq new-folder (format "+%s%s"
-                                   mh-folder-list-partial-line
-                                   (substring output position line-end)))
-          (setq mh-folder-list-partial-line "")
-          ;; is new folder a subfolder of previous?
-          (if (and mh-folder-list-temp
-                   (string-match
-                    (regexp-quote
-                     (concat (car (car mh-folder-list-temp)) "/"))
-                    new-folder))
-              ;; append slash to parent folder for better completion
-              ;; (undone by mh-prompt-for-folder)
-              (setq mh-folder-list-temp
-                    (cons
-                     (list new-folder)
-                     (cons
-                      (list (concat (car (car mh-folder-list-temp)) "/"))
-                      (cdr mh-folder-list-temp))))
-            (setq mh-folder-list-temp
-                  (cons (list new-folder)
-                        mh-folder-list-temp)))
-          (setq position (1+ line-end)))
-      (set-match-data prevailing-match-data))
-    (setq mh-folder-list-partial-line (substring output position))))
-
 ;;; Issue commands to MH.
 
 (defun mh-exec-cmd (command &rest args)
@@ -1712,14 +1817,14 @@ The side effects are what is desired.
 Any output is assumed to be an error and is shown to the user.
 The output is not read or parsed by MH-E."
   (save-excursion
-    (set-buffer (get-buffer-create mh-temp-buffer))
+    (set-buffer (get-buffer-create mh-log-buffer))
     (erase-buffer)
     (apply 'call-process
            (expand-file-name command mh-progs) nil t nil
            (mh-list-to-string args))
     (if (> (buffer-size) 0)
         (save-window-excursion
-          (switch-to-buffer-other-window mh-temp-buffer)
+          (switch-to-buffer-other-window mh-log-buffer)
           (sit-for 5)))))
 
 (defun mh-exec-cmd-error (env command &rest args)
@@ -1743,24 +1848,30 @@ Signals an error if process does not complete successfully."
                     (mh-list-to-string args)))))
       (mh-handle-process-error command status))))
 
-(defun mh-exec-cmd-daemon (command &rest args)
-  "Execute MH command COMMAND with ARGS in the background.
-Any output from command is displayed in an asynchronous pop-up window."
+(defun mh-exec-cmd-daemon (command filter &rest args)
+  "Execute MH command COMMAND in the background.
+
+If FILTER is non-nil then it is used to process the output otherwise the
+default filter `mh-process-daemon' is used. See `set-process-filter' for more
+details of FILTER.
+
+ARGS are passed to COMMAND as command line arguments."
   (save-excursion
-    (set-buffer (get-buffer-create mh-temp-buffer))
+    (set-buffer (get-buffer-create mh-log-buffer))
     (erase-buffer))
   (let* ((process-connection-type nil)
          (process (apply 'start-process
                          command nil
                          (expand-file-name command mh-progs)
                          (mh-list-to-string args))))
-    (set-process-filter process 'mh-process-daemon)))
+    (set-process-filter process (or filter 'mh-process-daemon))))
 
 (defun mh-process-daemon (process output)
-  "PROCESS daemon that puts OUTPUT into a temporary buffer."
-  (set-buffer (get-buffer-create mh-temp-buffer))
+  "PROCESS daemon that puts OUTPUT into a temporary buffer.
+Any output from the process is displayed in an asynchronous pop-up window."
+  (set-buffer (get-buffer-create mh-log-buffer))
   (insert-before-markers output)
-  (display-buffer mh-temp-buffer))
+  (display-buffer mh-log-buffer))
 
 (defun mh-exec-cmd-quiet (raise-error command &rest args)
   "Signal RAISE-ERROR if COMMAND with ARGS fails.
index d544115e9a2be5d6acea557fbb64416fadb82fce..692d792a1bceef2fc837ad7ee33e8b3c25dee3c8 100644 (file)
@@ -28,7 +28,7 @@
 
 ;;; Change Log:
 
-;; $Id: mh-xemacs-compat.el,v 1.3 2003/01/08 23:21:16 wohler Exp $
+;; $Id: mh-xemacs-compat.el,v 1.13 2002/11/30 01:21:42 wohler Exp $
 
 ;;; Code:
 
diff --git a/lisp/toolbar/mh-logo.xpm b/lisp/toolbar/mh-logo.xpm
new file mode 100644 (file)
index 0000000..ce6b97c
--- /dev/null
@@ -0,0 +1,22 @@
+/* XPM */
+static char *mh-e[] = {
+/* width height num_colors chars_per_pixel */
+"    18    13        2            1",
+/* colors */
+"# c #666699",
+". c None s None",
+/* pixels */
+"........##........",
+".......####.......",
+"......######......",
+"......######......",
+"....#########.....",
+"..##############..",
+".##...######....#.",
+"##...#.#.####...#.",
+"....#..#.##.#...#.",
+"...#..##.#.#.#....",
+"...#..#..#..#.#...",
+"...#..#.##..#.##..",
+"...#..#.#..#....#."
+};