summaryrefslogtreecommitdiff
path: root/lisp/mh-e
diff options
context:
space:
mode:
authorBill Wohler <wohler@newt.com>2003-02-03 20:55:30 +0000
committerBill Wohler <wohler@newt.com>2003-02-03 20:55:30 +0000
commitc04186f854feeb91c6dc4501816ff049111fb363 (patch)
tree6b257b0856ccb379350a11484811560a5cfd4cfe /lisp/mh-e
parent772890e5a7e6f45e40ea3f144220a19c4bb1deab (diff)
downloademacs-c04186f854feeb91c6dc4501816ff049111fb363.tar.gz
Upgraded to MH-E version 7.2.
See etc/MH-E-NEWS and lisp/mh-e/ChangeLog for details.
Diffstat (limited to 'lisp/mh-e')
-rw-r--r--lisp/mh-e/ChangeLog6019
-rw-r--r--lisp/mh-e/mh-alias.el14
-rw-r--r--lisp/mh-e/mh-comp.el55
-rw-r--r--lisp/mh-e/mh-customize.el149
-rw-r--r--lisp/mh-e/mh-e.el254
-rw-r--r--lisp/mh-e/mh-funcs.el73
-rw-r--r--lisp/mh-e/mh-identity.el2
-rw-r--r--lisp/mh-e/mh-index.el397
-rw-r--r--lisp/mh-e/mh-loaddefs.el112
-rw-r--r--lisp/mh-e/mh-mime.el18
-rw-r--r--lisp/mh-e/mh-pick.el218
-rw-r--r--lisp/mh-e/mh-seq.el271
-rw-r--r--lisp/mh-e/mh-speed.el79
-rw-r--r--lisp/mh-e/mh-utils.el411
-rw-r--r--lisp/mh-e/mh-xemacs-compat.el2
15 files changed, 7427 insertions, 647 deletions
diff --git a/lisp/mh-e/ChangeLog b/lisp/mh-e/ChangeLog
new file mode 100644
index 00000000000..6e937b7f51f
--- /dev/null
+++ b/lisp/mh-e/ChangeLog
@@ -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.
diff --git a/lisp/mh-e/mh-alias.el b/lisp/mh-e/mh-alias.el
index b9f144fae02..0e45edf288a 100644
--- a/lisp/mh-e/mh-alias.el
+++ b/lisp/mh-e/mh-alias.el
@@ -91,6 +91,10 @@
;; `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)
diff --git a/lisp/mh-e/mh-comp.el b/lisp/mh-e/mh-comp.el
index 36c314e6588..20e7ecf4ee9 100644
--- a/lisp/mh-e/mh-comp.el
+++ b/lisp/mh-e/mh-comp.el
@@ -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))))
+
;;; 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
diff --git a/lisp/mh-e/mh-customize.el b/lisp/mh-e/mh-customize.el
index ccda1a8b192..9bc67afcfa3 100644
--- a/lisp/mh-e/mh-customize.el
+++ b/lisp/mh-e/mh-customize.el
@@ -55,15 +55,21 @@
;;; 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)
+
+
;;; 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)
+
+
;;; 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)
+
+
;;; 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)
+
+
;;; 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)
+
+
;;; 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)
+
+
;;; 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)
+
+
;;; 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)
+
+
;;; 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)
+
+
;;; 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)
+
+
;;; 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
diff --git a/lisp/mh-e/mh-e.el b/lisp/mh-e/mh-e.el
index 8b8d2e11531..c51d6aa4b8e 100644
--- a/lisp/mh-e/mh-e.el
+++ b/lisp/mh-e/mh-e.el
@@ -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:
@@ -102,7 +102,7 @@
(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)))
@@ -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."
diff --git a/lisp/mh-e/mh-funcs.el b/lisp/mh-e/mh-funcs.el
index f2ffeede002..1707793e114 100644
--- a/lisp/mh-e/mh-funcs.el
+++ b/lisp/mh-e/mh-funcs.el
@@ -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)
diff --git a/lisp/mh-e/mh-identity.el b/lisp/mh-e/mh-identity.el
index 494136801ae..1347225a2ed 100644
--- a/lisp/mh-e/mh-identity.el
+++ b/lisp/mh-e/mh-identity.el
@@ -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:
diff --git a/lisp/mh-e/mh-index.el b/lisp/mh-e/mh-index.el
index 105c3a7113d..2a6cceb1389 100644
--- a/lisp/mh-e/mh-index.el
+++ b/lisp/mh-e/mh-index.el
@@ -40,13 +40,14 @@
;;; 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")
@@ -56,15 +57,22 @@
;; 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))
@@ -385,6 +425,123 @@ This has the effect of renaming already present X-MHE-Checksum headers."
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.
The function is only applicable to folders displaying index search results.
@@ -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
+;; 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)))
+
+
+
;; 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
+;; 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))))
+
+
+
;; 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))))))
+
;; 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)))
diff --git a/lisp/mh-e/mh-loaddefs.el b/lisp/mh-e/mh-loaddefs.el
index 20cfb8571bd..9646df03ad1 100644
--- a/lisp/mh-e/mh-loaddefs.el
+++ b/lisp/mh-e/mh-loaddefs.el
@@ -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:
;;;### (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)
;;;***
;;;### (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)
;;;***
;;;### (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
;;;***
;;;### (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)
;;;***
-;;;### (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)
+
;;;***
;;;### (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)
;;;### (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)
;;;***
;;;### (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)
;;;***
;;;### (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)
diff --git a/lisp/mh-e/mh-mime.el b/lisp/mh-e/mh-mime.el
index 16347b3011a..a14a548e2c4 100644
--- a/lisp/mh-e/mh-mime.el
+++ b/lisp/mh-e/mh-mime.el
@@ -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)
diff --git a/lisp/mh-e/mh-pick.el b/lisp/mh-e/mh-pick.el
index 373004fa342..3367392343b 100644
--- a/lisp/mh-e/mh-pick.el
+++ b/lisp/mh-e/mh-pick.el
@@ -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:
@@ -44,28 +44,34 @@
"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)))
+
+
+
+;; 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)))
@@ -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
diff --git a/lisp/mh-e/mh-seq.el b/lisp/mh-e/mh-seq.el
index d3859821ae1..f00afa84f86 100644
--- a/lisp/mh-e/mh-seq.el
+++ b/lisp/mh-e/mh-seq.el
@@ -48,26 +48,27 @@
;; -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:
@@ -100,15 +101,15 @@
;;; 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))))))
@@ -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)
@@ -449,18 +480,32 @@ 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))
@@ -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)
diff --git a/lisp/mh-e/mh-speed.el b/lisp/mh-e/mh-speed.el
index e57660d051a..ca60b2f7840 100644
--- a/lisp/mh-e/mh-speed.el
+++ b/lisp/mh-e/mh-speed.el
@@ -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
diff --git a/lisp/mh-e/mh-utils.el b/lisp/mh-e/mh-utils.el
index d4057d92ece..34332dc202a 100644
--- a/lisp/mh-e/mh-utils.el
+++ b/lisp/mh-e/mh-utils.el
@@ -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.
diff --git a/lisp/mh-e/mh-xemacs-compat.el b/lisp/mh-e/mh-xemacs-compat.el
index d544115e9a2..692d792a1bc 100644
--- a/lisp/mh-e/mh-xemacs-compat.el
+++ b/lisp/mh-e/mh-xemacs-compat.el
@@ -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: