# HG changeset patch # User Bill Wohler # Date 1130102777 0 # Node ID cf99ce27df545e620498e74f55c919cb9fbf0e5b # Parent e81cb0b6850a20c9586a640a3eac50a4269101ea * mh-comp.el (mh-letter-menu): Rename mh-mhn-compose-external-compressed-tar to mh-mh-compose-external-compressed-tar. Rename mh-mhn-compose-anon-ftp to mh-mh-compose-anon-ftp. Rename mh-edit-mhn to mh-mh-to-mime. Rename mh-mhn-directive-present-p to mh-mh-directive-present-p. Rename mh-revert-mhn-edit to mh-mh-to-mime-undo. Rename mh-gnus-pgp-support-flag to mh-pgp-support-flag. Rename mh-compose-insertion value from 'mhn to 'mh. (mh-insert-signature): Rename mh-mhn-directive-present-p to mh-mh-directive-present-p. (mh-send-letter): Rename mh-mhn-directive-present-p to mh-mh-directive-present-p. Rename mh-edit-mhn to mh-mh-to-mime. (mh-letter-mode-map): Rename mh-edit-mhn to mh-mh-to-mime. Rename mh-mhn-compose-anon-ftp to mh-mh-compose-anon-ftp. Rename mh-mhn-compose-external-compressed-tar to mh-mh-compose-external-compressed-tar. Rename mh-revert-mhn-edit to mh-mh-to-mime-undo. Rename mh-mhn-compose-external-type to mh-mh-compose-external-type. Rename mh-mhn-compose-anon-ftp to mh-mh-compose-anon-ftp. Rename mh-mhn-compose-external-compressed-tar to mh-mh-compose-external-compressed-tar. Rename mh-revert-mhn-edit to mh-mh-to-mime-undo. Rename mh-mhn-compose-external-type to mh-mh-compose-external-type. (mh-send-letter, mh-letter-mode-map): Rename mh-edit-mhn to mh-mh-to-mime, mh-revert-mhn-edit to mh-mh-to-mime-undo. (mh-reply, mh-yank-cur-msg, mh-insert-prefix-string): Rename mh-yank-from-start-of-msg to mh-yank-behavior. (mh-letter-mode, mh-to-field, mh-to-fcc, mh-insert-signature) (mh-check-whom, mh-insert-auto-fields, mh-send-letter) (mh-insert-letter, mh-yank-cur-msg, mh-insert-prefix-string) (mh-fully-kill-draft, mh-open-line, mh-letter-complete) (mh-letter-complete-or-space, mh-letter-confirm-address) (mh-letter-next-header-field-or-indent) (mh-letter-previous-header-field) (mh-letter-toggle-header-field-display): Sync docstrings with manual. * mh-customize.el (mh-edit-mhn-hook): Rename to mh-mh-to-mime-hook. (mh-yank-from-start-of-msg): Rename to mh-yank-behavior. (mh-compose-insertion): Rename values from 'gnus and 'mhn to 'mh and user-visible values from mhn and Gnus to MH and MML. (mh-before-send-letter-hook): Added 'ispell-message option. (mh-mml-method-default): Rename mh-gnus-pgp-support-flag to mh-pgp-support-flag. (mh-compose-insertion, mh-compose-space-does-completion-flag) (mh-delete-yanked-msg-window-flag) (mh-extract-from-attribution-verb, mh-ins-buf-prefix) (mh-letter-complete-function, mh-letter-fill-column) (mh-mml-method-default, mh-signature-file-name) (mh-signature-separator-flag, mh-x-face-file) (mh-yank-behavior, mail-citation-hook) (mh-before-send-letter-hook, mh-mh-to-mime-hook): Sync docstrings with manual. * mh-gnus.el (mml-minibuffer-read-disposition): New function provided for Emacs 21 environments that lack it. * mh-mime.el (mh-mml-query-cryptographic-method): Use default prompt convention. (mh-compose-forward): mh-mh-forward-message requires string arg. (mh-minibuffer-read-type): New function. (mh-mhn-args): Rename to mh-mh-to-mime-args. (mh-mhn-compose-insertion): Rename to mh-mh-attach-file. (mh-mhn-compose-forw): Rename to mh-mh-forward-message. (mh-mhn-compose-type): Rename to mh-mh-compose-type. (mh-mhn-compose-anon-ftp): Rename to mh-mh-compose-anon-ftp. Rename mh-mhn-compose-external-type to mh-mh-compose-external-type. (mh-mhn-compose-external-compressed-tar): Rename to mh-mh-compose-external-compressed-tar. Rename mh-mhn-compose-external-type to mh-mh-compose-external-type. (mh-mhn-compose-external-type): Rename to mh-mh-compose-external-type. (mh-edit-mhn): Rename to mh-mh-to-mime. Rename mh-mhn-args to mh-mh-to-mime-args. Rename mh-edit-mhn-hook to mh-mh-to-mime-hook. Use correct program in message. (mh-mhn-directive-present-p): Rename to mh-mh-directive-present-p. (mh-mml-directive-present-p): Rename to mh-mml-tag-present-p. (mh-compose-forward, mh-mh-attach-file) (mh-mh-compose-anon-ftp, mh-mh-compose-external-compressed-tar) (mh-mh-compose-external-type, mh-mh-forward-message) (mh-mml-attach-file): Use mml-minibuffer-read-description, mh-minibuffer-read-type. (mh-mime-content-types): Moved comment about only being used in Emacs 20 to docstring. (mh-mh-compose-external-type): Rename extra-param argument to parameters. (mh-mml-to-mime, mh-secure-message) (mh-mml-unsecure-message, mh-mime-display-part) (mh-mime-display-single): Rename mh-gnus-pgp-support-flag to mh-pgp-support-flag. (mh-compose-insertion): Rename mh-mhn-compose-insertion to mh-mh-attach-file. (mh-compose-forward): Rename mh-mhn-compose-forw to mh-mh-forward-message. (mh-mhn-compose-insertion): Rename mh-mhn-compose-type to mh-mh-compose-type. (mh-compose-insertion, mh-compose-forward, mh-mh-to-mime-args) (mh-mh-attach-file, mh-mh-compose-type) (mh-mh-compose-anon-ftp, mh-mh-compose-external-compressed-tar) (mh-mh-compose-external-compressed-tar) (mh-mh-compose-external-type, mh-mh-forward-message) (mh-mh-to-mime, mh-mh-quote-unescaped-sharp, (mh-mh-to-mime-undo, mh-mh-directive-present-p, mh-mml-to-mime) (mh-mml-attach-file, mh-secure-message, mh-mml-unsecure-message) (mh-mml-secure-message-sign, mh-mml-secure-message-encrypt) (mh-mml-directive-present-p, mh-destroy-postponed-handles) (mh-display-smileys, mh-display-emphasis, mh-mime-save-parts): Sync docstrings with manual. * mh-utils.el (mh-gnus-pgp-support-flag): Rename to mh-pgp-support-flag. diff -r e81cb0b6850a -r cf99ce27df54 lisp/mh-e/ChangeLog --- a/lisp/mh-e/ChangeLog Sun Oct 23 21:12:46 2005 +0000 +++ b/lisp/mh-e/ChangeLog Sun Oct 23 21:26:17 2005 +0000 @@ -1,3 +1,120 @@ +2005-10-23 Bill Wohler + + * mh-comp.el (mh-letter-menu): Rename + mh-mhn-compose-external-compressed-tar to + mh-mh-compose-external-compressed-tar. Rename + mh-mhn-compose-anon-ftp to mh-mh-compose-anon-ftp. Rename + mh-edit-mhn to mh-mh-to-mime. Rename mh-mhn-directive-present-p to + mh-mh-directive-present-p. Rename mh-revert-mhn-edit to + mh-mh-to-mime-undo. Rename mh-gnus-pgp-support-flag to + mh-pgp-support-flag. Rename mh-compose-insertion value from 'mhn + to 'mh. + (mh-insert-signature): Rename mh-mhn-directive-present-p to + mh-mh-directive-present-p. + (mh-send-letter): Rename mh-mhn-directive-present-p to + mh-mh-directive-present-p. Rename mh-edit-mhn to mh-mh-to-mime. + (mh-letter-mode-map): Rename mh-edit-mhn to mh-mh-to-mime. Rename + mh-mhn-compose-anon-ftp to mh-mh-compose-anon-ftp. Rename + mh-mhn-compose-external-compressed-tar to + mh-mh-compose-external-compressed-tar. Rename mh-revert-mhn-edit + to mh-mh-to-mime-undo. Rename mh-mhn-compose-external-type to + mh-mh-compose-external-type. Rename mh-mhn-compose-anon-ftp to + mh-mh-compose-anon-ftp. Rename + mh-mhn-compose-external-compressed-tar to + mh-mh-compose-external-compressed-tar. Rename mh-revert-mhn-edit + to mh-mh-to-mime-undo. Rename mh-mhn-compose-external-type to + mh-mh-compose-external-type. + (mh-send-letter, mh-letter-mode-map): Rename mh-edit-mhn to + mh-mh-to-mime, mh-revert-mhn-edit to mh-mh-to-mime-undo. + (mh-reply, mh-yank-cur-msg, mh-insert-prefix-string): Rename + mh-yank-from-start-of-msg to mh-yank-behavior. + (mh-letter-mode, mh-to-field, mh-to-fcc, mh-insert-signature) + (mh-check-whom, mh-insert-auto-fields, mh-send-letter) + (mh-insert-letter, mh-yank-cur-msg, mh-insert-prefix-string) + (mh-fully-kill-draft, mh-open-line, mh-letter-complete) + (mh-letter-complete-or-space, mh-letter-confirm-address) + (mh-letter-next-header-field-or-indent) + (mh-letter-previous-header-field) + (mh-letter-toggle-header-field-display): Sync docstrings with + manual. + + * mh-customize.el (mh-edit-mhn-hook): Rename to + mh-mh-to-mime-hook. + (mh-yank-from-start-of-msg): Rename to mh-yank-behavior. + (mh-compose-insertion): Rename values from 'gnus and 'mhn to 'mh + and user-visible values from mhn and Gnus to MH and MML. + (mh-before-send-letter-hook): Added 'ispell-message option. + (mh-mml-method-default): Rename mh-gnus-pgp-support-flag to + mh-pgp-support-flag. + (mh-compose-insertion, mh-compose-space-does-completion-flag) + (mh-delete-yanked-msg-window-flag) + (mh-extract-from-attribution-verb, mh-ins-buf-prefix) + (mh-letter-complete-function, mh-letter-fill-column) + (mh-mml-method-default, mh-signature-file-name) + (mh-signature-separator-flag, mh-x-face-file) + (mh-yank-behavior, mail-citation-hook) + (mh-before-send-letter-hook, mh-mh-to-mime-hook): Sync docstrings + with manual. + + * mh-gnus.el (mml-minibuffer-read-disposition): New function + provided for Emacs 21 environments that lack it. + + * mh-mime.el (mh-mml-query-cryptographic-method): Use default + prompt convention. + (mh-compose-forward): mh-mh-forward-message requires string arg. + (mh-minibuffer-read-type): New function. + (mh-mhn-args): Rename to mh-mh-to-mime-args. + (mh-mhn-compose-insertion): Rename to mh-mh-attach-file. + (mh-mhn-compose-forw): Rename to mh-mh-forward-message. + (mh-mhn-compose-type): Rename to mh-mh-compose-type. + (mh-mhn-compose-anon-ftp): Rename to mh-mh-compose-anon-ftp. + Rename mh-mhn-compose-external-type to + mh-mh-compose-external-type. + (mh-mhn-compose-external-compressed-tar): Rename to + mh-mh-compose-external-compressed-tar. Rename + mh-mhn-compose-external-type to mh-mh-compose-external-type. + (mh-mhn-compose-external-type): Rename to + mh-mh-compose-external-type. + (mh-edit-mhn): Rename to mh-mh-to-mime. Rename mh-mhn-args to + mh-mh-to-mime-args. Rename mh-edit-mhn-hook to mh-mh-to-mime-hook. + Use correct program in message. + (mh-mhn-directive-present-p): Rename to mh-mh-directive-present-p. + (mh-mml-directive-present-p): Rename to mh-mml-tag-present-p. + (mh-compose-forward, mh-mh-attach-file) + (mh-mh-compose-anon-ftp, mh-mh-compose-external-compressed-tar) + (mh-mh-compose-external-type, mh-mh-forward-message) + (mh-mml-attach-file): Use mml-minibuffer-read-description, + mh-minibuffer-read-type. + (mh-mime-content-types): Moved comment about only being used in + Emacs 20 to docstring. + (mh-mh-compose-external-type): Rename extra-param argument to + parameters. + (mh-mml-to-mime, mh-secure-message) + (mh-mml-unsecure-message, mh-mime-display-part) + (mh-mime-display-single): Rename mh-gnus-pgp-support-flag to + mh-pgp-support-flag. + (mh-compose-insertion): Rename mh-mhn-compose-insertion to + mh-mh-attach-file. + (mh-compose-forward): Rename mh-mhn-compose-forw to + mh-mh-forward-message. + (mh-mhn-compose-insertion): Rename mh-mhn-compose-type to + mh-mh-compose-type. + (mh-compose-insertion, mh-compose-forward, mh-mh-to-mime-args) + (mh-mh-attach-file, mh-mh-compose-type) + (mh-mh-compose-anon-ftp, mh-mh-compose-external-compressed-tar) + (mh-mh-compose-external-compressed-tar) + (mh-mh-compose-external-type, mh-mh-forward-message) + (mh-mh-to-mime, mh-mh-quote-unescaped-sharp, + (mh-mh-to-mime-undo, mh-mh-directive-present-p, mh-mml-to-mime) + (mh-mml-attach-file, mh-secure-message, mh-mml-unsecure-message) + (mh-mml-secure-message-sign, mh-mml-secure-message-encrypt) + (mh-mml-directive-present-p, mh-destroy-postponed-handles) + (mh-display-smileys, mh-display-emphasis, mh-mime-save-parts): + Sync docstrings with manual. + + * mh-utils.el (mh-gnus-pgp-support-flag): Rename to + mh-pgp-support-flag. + 2005-10-17 Peter S Galbraith * mh-identity.el (mh-identity-field-handler): Use diff -r e81cb0b6850a -r cf99ce27df54 lisp/mh-e/mh-comp.el --- a/lisp/mh-e/mh-comp.el Sun Oct 23 21:12:46 2005 +0000 +++ b/lisp/mh-e/mh-comp.el Sun Oct 23 21:26:17 2005 +0000 @@ -350,8 +350,8 @@ (mh-forwarded-letter-subject orig-from orig-subject))) (mh-insert-fields "Subject:" forw-subject) (goto-char (point-min)) - ;; If using MML, translate mhn - (if (equal mh-compose-insertion 'gnus) + ;; If using MML, translate MH-style directive + (if (equal mh-compose-insertion 'mml) (save-excursion (goto-char (mh-mail-header-end)) (while @@ -527,8 +527,8 @@ (group-reply (if (mh-variant-p 'nmh 'mu-mh) '("-group" "-nocc" "me") '("-cc" "all" "-nocc" "me")))) - (cond ((or (eq mh-yank-from-start-of-msg 'autosupercite) - (eq mh-yank-from-start-of-msg 'autoattrib)) + (cond ((or (eq mh-yank-behavior 'autosupercite) + (eq mh-yank-behavior 'autoattrib)) '("-noformat")) (includep '("-filter" "mhl.reply")) (t '()))) @@ -551,8 +551,8 @@ (message "Composing a reply...done") (mh-compose-and-send-mail draft "" folder message to subject cc mh-note-repl "Replied:" config)) - (when (and (or (eq 'autosupercite mh-yank-from-start-of-msg) - (eq 'autoattrib mh-yank-from-start-of-msg)) + (when (and (or (eq 'autosupercite mh-yank-behavior) + (eq 'autoattrib mh-yank-behavior)) (eq (mh-show-buffer-message-number) mh-sent-from-msg)) (undo-boundary) (mh-yank-cur-msg)) @@ -788,13 +788,13 @@ ["Insert Signature" mh-insert-signature t] ("Encrypt/Sign Message" ["Sign Message" - mh-mml-secure-message-sign mh-gnus-pgp-support-flag] + mh-mml-secure-message-sign mh-pgp-support-flag] ["Encrypt Message" - mh-mml-secure-message-encrypt mh-gnus-pgp-support-flag] + mh-mml-secure-message-encrypt mh-pgp-support-flag] ["Sign+Encrypt Message" - mh-mml-secure-message-signencrypt mh-gnus-pgp-support-flag] + mh-mml-secure-message-signencrypt mh-pgp-support-flag] ["Disable Security" - mh-mml-unsecure-message mh-gnus-pgp-support-flag] + mh-mml-unsecure-message mh-pgp-support-flag] "--" "Security Method" ["PGP (MIME)" (setq mh-mml-method-default "pgpmime") @@ -810,19 +810,19 @@ ["Save Method as Default" (customize-save-variable 'mh-mml-method-default mh-mml-method-default) t] ) - ["Compose Insertion (MIME)..." mh-compose-insertion t] - ["Compose Compressed tar (MIME)..." - mh-mhn-compose-external-compressed-tar t] - ["Compose Get File (MIME)..." mh-mhn-compose-anon-ftp t] - ["Compose Forward (MIME)..." mh-compose-forward t] + ["Compose Insertion..." mh-compose-insertion t] + ["Compose Compressed tar (MH)..." + mh-mh-compose-external-compressed-tar t] + ["Compose Get File (MH)..." mh-mh-compose-anon-ftp t] + ["Compose Forward..." mh-compose-forward t] ;; The next two will have to be merged. But I also need to make sure the - ;; user can't mix directives of both types. - ["Pull in All Compositions (mhn)" - mh-edit-mhn (mh-mhn-directive-present-p)] - ["Pull in All Compositions (gnus)" - mh-mml-to-mime (mh-mml-directive-present-p)] - ["Revert to Non-MIME Edit (mhn)" - mh-revert-mhn-edit (equal mh-compose-insertion 'mhn)] + ;; user can't mix tags of both types. + ["Pull in All Compositions (MH)" + mh-mh-to-mime (mh-mh-directive-present-p)] + ["Pull in All Compositions (MML)" + mh-mml-to-mime (mh-mml-tag-present-p)] + ["Revert to Non-MIME Edit (MH)" + mh-mh-to-mime-undo (equal mh-compose-insertion 'mh)] ["Kill This Draft" mh-fully-kill-draft t])) ;;; Help Messages @@ -878,16 +878,13 @@ When you have finished composing, type \\[mh-send-letter] to send the message using the MH mail handling system. -There are two types of MIME directives used by MH-E: Gnus and MH. The option -`mh-compose-insertion' controls what type of directives are inserted by MH-E -commands. These directives can be converted to MIME body parts by running -\\[mh-edit-mhn] for mhn directives or \\[mh-mml-to-mime] for Gnus directives. -This step is mandatory if these directives are added manually. If the -directives are inserted with MH-E commands such as \\[mh-compose-insertion], -the directives are expanded automatically when the letter is sent. +There are two types of tags used by MH-E when composing MIME messages: MML and +MH. The option `mh-compose-insertion' controls what type of tags are inserted +by MH-E commands. These tags can be converted to MIME body parts by running +\\[mh-mh-to-mime] for MH-style directives or \\[mh-mml-to-mime] for MML tags. -Options that control this mode can be changed with -\\[customize-group]; specify the \"mh-compose\" group. +Options that control this mode can be changed with \\[customize-group]; +specify the \"mh-compose\" group. When a message is composed, the hooks `text-mode-hook' and `mh-letter-mode-hook' are run. @@ -1016,7 +1013,7 @@ ;;;###mh-autoload (defun mh-to-field () - "Move point to the end of a specified header field. + "Move to specified header field. The field is indicated by the previous keystroke (the last keystroke of the command) according to the list in the variable `mh-to-field-choices'. Create the field if it does not exist. Set the mark to point before moving." @@ -1047,8 +1044,9 @@ ;;;###mh-autoload (defun mh-to-fcc (&optional folder) - "Insert an Fcc: FOLDER field in the current message. -Prompt for the field name with a completion list of the current folders." + "Move to \"Fcc:\" header field. +This command will prompt you for the FOLDER name in which to file a copy of +the draft." (interactive) (or folder (setq folder (mh-prompt-for-folder @@ -1080,23 +1078,33 @@ ;;;###mh-autoload (defun mh-insert-signature (&optional file) - "Insert the signature specified by `mh-signature-file-name' or FILE at point. -A signature separator (`-- ') will be added if the signature block does not + "Insert signature in message. +This command inserts your signature at the current cursor location. + +By default, the text of your signature is taken from the file +\"~/.signature\". You can read from other sources by changing the option +`mh-signature-file-name'. + +A signature separator (\"-- \") will be added if the signature block does not contain one and `mh-signature-separator-flag' is on. + The value of `mh-letter-insert-signature-hook' is a list of functions to be -called, with no arguments, after the signature is inserted. -The signature can also be inserted with `mh-identity-list'." -(interactive) +called, with no arguments, after the signature is inserted. These functions +may access the actual name of the file or the function used to insert the +signature with `mh-signature-file-name'. + +The signature can also be inserted using Identities (see `mh-identity-list')" + (interactive) (save-excursion (insert "\n") (let ((mh-signature-file-name (or file mh-signature-file-name)) - (mh-mhn-p (mh-mhn-directive-present-p)) - (mh-mml-p (mh-mml-directive-present-p))) + (mh-mh-p (mh-mh-directive-present-p)) + (mh-mml-p (mh-mml-tag-present-p))) (save-restriction (narrow-to-region (point) (point)) (cond ((mh-file-is-vcard-p mh-signature-file-name) - (if (equal mh-compose-insertion 'gnus) + (if (equal mh-compose-insertion 'mml) (insert "<#part type=\"text/x-vcard\" filename=\"" mh-signature-file-name "\" disposition=inline description=VCard>\n<#/part>") @@ -1105,7 +1113,7 @@ "\" [VCard] " (expand-file-name mh-signature-file-name)))) (t (cond - (mh-mhn-p + (mh-mh-p (insert "#\n" "Content-Description: Signature\n")) (mh-mml-p (mml-insert-tag 'part 'type "text/plain" 'disposition "inline" @@ -1124,7 +1132,7 @@ mh-signature-separator-flag (> (point-max) (point-min)) (not (mh-signature-separator-p))) - (cond (mh-mhn-p + (cond (mh-mh-p (forward-line 2)) (mh-mml-p (forward-line 1))) @@ -1135,7 +1143,10 @@ ;;;###mh-autoload (defun mh-check-whom () - "Verify recipients of the current letter, showing expansion of any aliases." + "Verify recipients, showing expansion of any aliases. +This command expands aliases so you can check the actual address(es) in the +alias. A new buffer named \"*MH-E Recipients*\" is created with the output of +\"whom\"." (interactive) (let ((file-name buffer-file-name)) (save-buffer) @@ -1215,7 +1226,7 @@ ;;;###mh-autoload (defun mh-insert-auto-fields (&optional non-interactive) - "Insert custom fields if To or Cc match `mh-auto-fields-list'. + "Insert custom fields if recipient matches `mh-auto-fields-list'. Sets buffer-local `mh-insert-auto-fields-done-local' when done and inserted something. If NON-INTERACTIVE is non-nil, do not be verbose and only attempt matches if `mh-insert-auto-fields-done-local' is nil. @@ -1348,12 +1359,17 @@ ;;;###mh-autoload (defun mh-send-letter (&optional arg) - "Send the draft letter in the current buffer. -If optional prefix argument ARG is provided, monitor delivery. -The value of `mh-before-send-letter-hook' is a list of functions to be called, -with no arguments, before doing anything. -Run `\\[mh-edit-mhn]' if mhn directives are present; otherwise -run `\\[mh-mml-to-mime]' if mml directives are present." + "Save draft and send message. +When you are all through editing a message, you send it with this command. You +can give an argument ARG to monitor the first stage of the delivery\; this +output can be found in a buffer called \"*MH-E Mail Delivery*\". + +The value of `mh-before-send-letter-hook' is a list of functions to be called +at the beginning of this command. For example, if you want to check your +spelling in your message before sending, add the `ispell-message' function. + +In case the MH \"send\" program is installed under a different name, use +`mh-send-prog' to tell MH-E the name." (interactive "P") (run-hooks 'mh-before-send-letter-hook) (if (and (mh-insert-auto-fields t) @@ -1361,9 +1377,9 @@ (goto-char (point-min))) (if (not (y-or-n-p "Auto fields inserted, send? ")) (error "Send aborted"))) - (cond ((mh-mhn-directive-present-p) - (mh-edit-mhn)) - ((or (mh-mml-directive-present-p) (not (mh-ascii-buffer-p))) + (cond ((mh-mh-directive-present-p) + (mh-mh-to-mime)) + ((or (mh-mml-tag-present-p) (not (mh-ascii-buffer-p))) (mh-mml-to-mime))) (save-buffer) (message "Sending...") @@ -1419,15 +1435,16 @@ ;;;###mh-autoload (defun mh-insert-letter (folder message verbatim) - "Insert a message into the current letter. -Removes the header fields according to the variable -`mh-invisible-header-fields-compiled'. -Prefixes each non-blank line with `mh-ins-buf-prefix', unless -`mh-yank-from-start-of-msg' is set for supercite in which case supercite is -used to format the message. -Prompts for FOLDER and MESSAGE. If prefix argument VERBATIM provided, do -not indent and do not delete headers. Leaves the mark before the letter -and point after it." + "Insert a message. +This command prompts you for the FOLDER and MESSAGE number and inserts the +message, indented by `mh-ins-buf-prefix' (\"> \") unless `mh-yank-behavior' is +set to one of the supercite flavors in which case supercite is used to format +the message. Certain undesirable header fields (see +`mh-invisible-header-fields-compiled') are removed before insertion. + +If given a prefix argument VERBATIM, the header is left intact, the message is +not indented, and \"> \" is not inserted before each line. This command leaves +the mark before the letter and point after it." (interactive (list (mh-prompt-for-folder "Message from" mh-sent-from-folder nil) (read-string (concat "Message number" @@ -1468,13 +1485,25 @@ ;;;###mh-autoload (defun mh-yank-cur-msg () "Insert the current message into the draft buffer. -Prefix each non-blank line in the message with the string in -`mh-ins-buf-prefix'. If a region is set in the message's buffer, then -only the region will be inserted. Otherwise, the entire message will -be inserted if `mh-yank-from-start-of-msg' is non-nil. If this variable -is nil, the portion of the message following the point will be yanked. -If `mh-delete-yanked-msg-window-flag' is non-nil, any window displaying the -yanked message will be deleted." + +It is often useful to insert a snippet of text from a letter that someone +mailed to provide some context for your reply. This command does this by +adding an attribution, yanking a portion of text from the message to which +you're replying, and inserting `mh-ins-buf-prefix' (`> ') before each line. + +The attribution consists of the sender's name and email address +followed by the content of the `mh-extract-from-attribution-verb' +option. + +You can also turn on the `mh-delete-yanked-msg-window-flag' option to delete +the window containing the original message after yanking it to make more room +on your screen for your reply. + +You can control how the message to which you are replying is yanked +into your reply using `mh-yank-behavior'. + +If this isn't enough, you can gain full control over the appearance of the +included text by setting `mail-citation-hook' to a function that modifies it." (interactive) (if (and mh-sent-from-folder (save-excursion (set-buffer mh-sent-from-folder) mh-show-buffer) @@ -1491,9 +1520,9 @@ (yank-region (mh-mark-active-p nil)) (mh-ins-str (cond ((and yank-region - (or (eq 'supercite mh-yank-from-start-of-msg) - (eq 'autosupercite mh-yank-from-start-of-msg) - (eq t mh-yank-from-start-of-msg))) + (or (eq 'supercite mh-yank-behavior) + (eq 'autosupercite mh-yank-behavior) + (eq t mh-yank-behavior))) ;; supercite needs the full header (concat (buffer-substring (point-min) (mh-mail-header-end)) @@ -1501,20 +1530,18 @@ (buffer-substring (region-beginning) (region-end)))) (yank-region (buffer-substring (region-beginning) (region-end))) - ((or (eq 'body mh-yank-from-start-of-msg) - (eq 'attribution - mh-yank-from-start-of-msg) - (eq 'autoattrib - mh-yank-from-start-of-msg)) + ((or (eq 'body mh-yank-behavior) + (eq 'attribution mh-yank-behavior) + (eq 'autoattrib mh-yank-behavior)) (buffer-substring (save-excursion (goto-char (point-min)) (mh-goto-header-end 1) (point)) (point-max))) - ((or (eq 'supercite mh-yank-from-start-of-msg) - (eq 'autosupercite mh-yank-from-start-of-msg) - (eq t mh-yank-from-start-of-msg)) + ((or (eq 'supercite mh-yank-behavior) + (eq 'autosupercite mh-yank-behavior) + (eq t mh-yank-behavior)) (buffer-substring (point-min) (point-max))) (t (buffer-substring (point) (point-max)))))) @@ -1526,8 +1553,8 @@ (push-mark) ;Needed for sc-cite-original (goto-char (point-min)) ;Needed for sc-cite-original (mh-insert-prefix-string mh-ins-buf-prefix) - (when (or (eq 'attribution mh-yank-from-start-of-msg) - (eq 'autoattrib mh-yank-from-start-of-msg)) + (when (or (eq 'attribution mh-yank-behavior) + (eq 'autoattrib mh-yank-behavior)) (insert from-attr) (mh-identity-insert-attribution-verb nil) (insert "\n\n")) @@ -1569,12 +1596,12 @@ (defun mh-insert-prefix-string (mh-ins-string) "Insert prefix string before each line in buffer. -The inserted letter is cited using `sc-cite-original' if -`mh-yank-from-start-of-msg' is one of 'supercite or 'autosupercite. Otherwise, -simply insert MH-INS-STRING before each line." +The inserted letter is cited using `sc-cite-original' if `mh-yank-behavior' is +one of 'supercite or 'autosupercite. Otherwise, simply insert MH-INS-STRING +before each line." (goto-char (point-min)) - (cond ((or (eq mh-yank-from-start-of-msg 'supercite) - (eq mh-yank-from-start-of-msg 'autosupercite)) + (cond ((or (eq mh-yank-behavior 'supercite) + (eq mh-yank-behavior 'autosupercite)) (sc-cite-original)) (mail-citation-hook (run-hooks 'mail-citation-hook)) @@ -1589,8 +1616,10 @@ ;;;###mh-autoload (defun mh-fully-kill-draft () - "Kill the draft message file and the draft message buffer. -Use \\[kill-buffer] if you don't want to delete the draft message file." + "Quit editing and delete draft message. +If for some reason you are not happy with the draft, you can use the this +command to kill the draft buffer and delete the draft message. Use the +\\[kill-buffer] command if you don't want to delete the draft message." (interactive) (if (y-or-n-p "Kill draft message? ") (let ((config mh-previous-window-config)) @@ -1618,8 +1647,10 @@ ;;;###mh-autoload (defun mh-open-line () "Insert a newline and leave point after it. -In addition, insert newline and quoting characters before text after point. -This is useful in breaking up paragraphs in replies." +This command is similar to the \\[open-line] command in that it inserts a +newline after point. It differs in that it also inserts the right number of +quoting characters and spaces so that the next line begins in the same column +as it was. This is useful when breaking up paragraphs in replies." (interactive) (let ((column (current-column)) (prefix (mh-current-fill-prefix))) @@ -1707,10 +1738,12 @@ (defun mh-letter-complete (arg) "Perform completion on header field or word preceding point. -If the field contains addresses (for example, `To:' or `Cc:') or folders (for -example, `Fcc:') then this function will provide alias completion. Elsewhere, -this function runs `mh-letter-complete-function' instead and passes the prefix -ARG, if present." +If the field contains addresses (for example, \"To:\" or \"Cc:\") or folders +\(for example, \"Fcc:\") then this command will provide alias completion. In +the body of the message, this command runs `mh-letter-complete-function' +instead, which is set to \"'ispell-complete-word\" by default. This command +takes a prefix argument ARG that is passed to the +`mh-letter-complete-function'." (interactive "P") (let ((func nil)) (cond ((not (mh-in-header-p)) @@ -1722,11 +1755,8 @@ (defun mh-letter-complete-or-space (arg) "Perform completion or insert space. -If `mh-compose-space-does-completion-flag' is nil (the default) a space is -inserted. - -Otherwise, if point is in the message header and the preceding character is -not whitespace then do completion. Otherwise insert a space character. +Turn on the `mh-compose-space-does-completion-flag' option to use this command +to perform completion in the header. Otherwise, a space is inserted. ARG is the number of spaces inserted." (interactive "p") @@ -1744,7 +1774,10 @@ (t (self-insert-command arg))))) (defun mh-letter-confirm-address () - "Flash alias expansion if `mh-alias-flash-on-comma' is non-nil." + "Flash alias expansion. +Addresses are separated by a comma\; and when you press the comma, this +command flashes the alias expansion in the minibuffer if +`mh-alias-flash-on-comma' is turned on." (interactive) (cond ((not (mh-in-header-p)) (self-insert-command 1)) ((eq (cdr (assoc (mh-letter-header-field-at-point) @@ -1768,8 +1801,12 @@ ;;;###mh-autoload (defun mh-letter-next-header-field-or-indent (arg) "Move to next field or indent depending on point. -In the message header, go to the next field. Elsewhere call -`indent-relative' as usual with optional prefix ARG." +Within the header of the message, this command moves between fields, but skips +those fields listed in `mh-compose-skipped-header-fields'. After the last +field, this command then moves point to the message body before cycling back +to the first field. If point is already past the first line of the message +body, then this command indents by calling `indent-relative' with the given +prefix argument ARG." (interactive "P") (let ((header-end (save-excursion (goto-char (mh-mail-header-end)) @@ -1801,7 +1838,10 @@ ;;;###mh-autoload (defun mh-letter-previous-header-field () "Cycle to the previous header field. -If we are at the first header field go to the start of the message body." +This command moves backwards between the fields and cycles to the body of the +message after the first field. Unlike the +\\[mh-letter-next-header-field-or-indent] command, it will always take point +to the last field from anywhere in the body." (interactive) (let ((header-end (mh-mail-header-end))) (if (>= (point) header-end) @@ -1851,11 +1891,11 @@ (defun mh-letter-toggle-header-field-display (arg) "Toggle display of header field at point. -If the header is long or spread over multiple lines then hiding it will show -the first few characters and replace the rest with an ellipsis. -If ARG is negative then header is hidden, if positive it is displayed. If ARG -is the symbol `long' then keep at most the first 4 lines." +Use this command to display ellipsed header fields. This command is a toggle +so entering it again will hide the field. This command takes a prefix argument +ARG: if negative then the field is hidden, if positive then the field is +displayed." (interactive (list nil)) (when (and (mh-in-header-p) (progn @@ -1881,6 +1921,8 @@ (remove-text-properties begin end '(invisible nil)) (search-forward ":" (line-end-position) t) (mh-letter-skip-leading-whitespace-in-header-field)) + ;; XXX Redesign to make usable by user. Perhaps use a positive + ;; numeric prefix to make that many lines visible. ((eq arg 'long) (end-of-line 4) (mh-letter-truncate-header-field end) @@ -1939,7 +1981,7 @@ "\C-c\C-^" mh-insert-signature ;if no C-s "\C-c\C-c" mh-send-letter "\C-c\C-d" mh-insert-identity - "\C-c\C-e" mh-edit-mhn + "\C-c\C-e" mh-mh-to-mime "\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 @@ -1957,26 +1999,26 @@ "\C-c\C-i" mh-insert-letter "\C-c\C-m\C-e" mh-mml-secure-message-encrypt "\C-c\C-m\C-f" mh-compose-forward - "\C-c\C-m\C-g" mh-mhn-compose-anon-ftp + "\C-c\C-m\C-g" mh-mh-compose-anon-ftp "\C-c\C-m\C-i" mh-compose-insertion "\C-c\C-m\C-m" mh-mml-to-mime "\C-c\C-m\C-n" mh-mml-unsecure-message "\C-c\C-m\C-s" mh-mml-secure-message-sign - "\C-c\C-m\C-t" mh-mhn-compose-external-compressed-tar - "\C-c\C-m\C-u" mh-revert-mhn-edit - "\C-c\C-m\C-x" mh-mhn-compose-external-type + "\C-c\C-m\C-t" mh-mh-compose-external-compressed-tar + "\C-c\C-m\C-u" mh-mh-to-mime-undo + "\C-c\C-m\C-x" mh-mh-compose-external-type "\C-c\C-mee" mh-mml-secure-message-encrypt "\C-c\C-mes" mh-mml-secure-message-signencrypt "\C-c\C-mf" mh-compose-forward - "\C-c\C-mg" mh-mhn-compose-anon-ftp + "\C-c\C-mg" mh-mh-compose-anon-ftp "\C-c\C-mi" mh-compose-insertion "\C-c\C-mm" mh-mml-to-mime "\C-c\C-mn" mh-mml-unsecure-message "\C-c\C-mse" mh-mml-secure-message-signencrypt "\C-c\C-mss" mh-mml-secure-message-sign - "\C-c\C-mt" mh-mhn-compose-external-compressed-tar - "\C-c\C-mu" mh-revert-mhn-edit - "\C-c\C-mx" mh-mhn-compose-external-type + "\C-c\C-mt" mh-mh-compose-external-compressed-tar + "\C-c\C-mu" mh-mh-to-mime-undo + "\C-c\C-mx" mh-mh-compose-external-type "\C-c\C-o" mh-open-line "\C-c\C-q" mh-fully-kill-draft "\C-c\C-s" mh-insert-signature diff -r e81cb0b6850a -r cf99ce27df54 lisp/mh-e/mh-customize.el --- a/lisp/mh-e/mh-customize.el Sun Oct 23 21:12:46 2005 +0000 +++ b/lisp/mh-e/mh-customize.el Sun Oct 23 21:26:17 2005 +0000 @@ -762,13 +762,15 @@ ;;; Editing a Draft (:group 'mh-letter) -(defcustom mh-compose-insertion (if (locate-library "mml") 'gnus 'mhn) - "Type of MIME message directives in messages. - -By default, this option is set to `Gnus' if it is supported. This option can -also be set manually to `mhn' if mhn directives are preferred." - :type '(choice (const :tag "Gnus" gnus) - (const :tag "mhn" mhn)) +(defcustom mh-compose-insertion (if (locate-library "mml") 'mml 'mh) + "Type of tags used when composing MIME messages. In addition to MH-style +directives, MH-E also supports MML (MIME Meta Language) tags. (see Info node +`(emacs-mime)Composing'). This option can be used to choose between them. By +default, this option is set to \"MML\" if it is supported since it provides a +lot more functionality. This option can also be set to \"MH\" if MH-style +directives are preferred." + :type '(choice (const :tag "MML" mml) + (const :tag "MH" mh)) :group 'mh-letter) (defcustom mh-compose-skipped-header-fields @@ -779,20 +781,24 @@ :group 'mh-letter) (defcustom mh-compose-space-does-completion-flag nil - "*Non-nil means that does completion in message header." + "*On means \\\\[mh-letter-complete-or-space] does completion in message header." :type 'boolean :group 'mh-letter) (defcustom mh-delete-yanked-msg-window-flag nil - "*Non-nil means delete any window displaying the message. -If this option is on, yanking the current message into a draft letter with -\\\\[mh-yank-cur-msg] deletes any windows displaying the -message." + "*On means delete any window displaying the message. +This deletes the window containing the original message after yanking it with +\\\\[mh-yank-cur-msg] to make more room on your screen for +your reply." :type 'boolean :group 'mh-letter) (defcustom mh-extract-from-attribution-verb "wrote:" - "*Verb to use for attribution when a message is yanked by \\\\[mh-yank-cur-msg]." + "*Verb to use for attribution when a message is yanked by \\\\[mh-yank-cur-msg]. +The attribution consists of the sender's name and email address followed by +the content of this option. This option can be set to \"wrote:\", \"a +écrit:\", and \"schrieb:\". You can also use the \"Custom String\" menu item +to enter your own verb." :type '(choice (const "wrote:") (const "a écrit:") (const "schrieb:") @@ -800,28 +806,41 @@ :group 'mh-letter) (defcustom mh-ins-buf-prefix "> " - "*String to put before each non-blank line of a yanked or inserted message. -Used when the message is inserted into an outgoing letter -by \\\\[mh-insert-letter] or \\[mh-yank-cur-msg]." + "*String to put before each line of a yanked or inserted message. +The prefix \"> \" is the default setting of this option. I suggest that you +not modify this option since it is used by many mailers and news readers: +messages are far easier to read if several included messages have all been +indented by the same string." :type 'string :group 'mh-letter) (defcustom mh-letter-complete-function 'ispell-complete-word "*Function to call when completing outside of address or folder fields. -By default, this is set to `ispell-complete-word'." +In the body of the message, \\\\[mh-letter-complete] runs +this function, which is set to \"ispell-complete-word\" by default." :type '(choice function (const nil)) :group 'mh-letter) (defcustom mh-letter-fill-column 72 - "*Fill column to use in `mh-letter-mode'. -This is usually less than in other text modes because email messages get -quoted by some prefix (sometimes many times) when they are replied to, -and it's best to avoid quoted lines that span more than 80 columns." + "*Fill column to use in MH Letter mode. +By default, this option is 72 to allow others to quote your message without +line wrapping." :type 'integer :group 'mh-letter) -(defcustom mh-mml-method-default (if mh-gnus-pgp-support-flag "pgpmime" "none") - "Default method to use in security directives." +(defcustom mh-mml-method-default (if mh-pgp-support-flag "pgpmime" "none") + "Default method to use in security tags. +This option is used to select between a variety of mail security mechanisms. +The default is \"PGP (MIME)\" if it is supported\; otherwise, the default is +\"None\". Other mechanisms include vanilla \"PGP\" and \"S/MIME\". + +The `pgg' customization group may have some settings which may interest you +\(see Info node `(pgg)'). + +In particular, I set the option `pgg-encrypt-for-me' to t so that all messages +I encrypt are encrypted with my public key as well. If you keep a copy of all +of your outgoing mail with a \"Fcc:\" header field, this setting is vital so +that you can read the mail you write!" :type '(choice (const :tag "PGP (MIME)" "pgpmime") (const :tag "PGP" "pgp") (const :tag "S/MIME" "smime") @@ -831,13 +850,13 @@ (defcustom mh-signature-file-name "~/.signature" "*Source of user's signature. -By default, the text of your signature is taken from the file `~/.signature'. +By default, the text of your signature is taken from the file \"~/.signature\". You can read from other files by changing this option. This file may contain a vCard in which case an attachment is added with the vCard. This option may also be a symbol, in which case that function is called. You may not want a signature separator to be added for you; instead you may want -to insert one yourself. Variables that you may find useful to do this include +to insert one yourself. Options that you may find useful to do this include `mh-signature-separator' (when inserting a signature separator) and `mh-signature-separator-regexp' (for finding said separator). The function `mh-signature-separator-p', which reports t if the buffer contains a @@ -850,7 +869,7 @@ :group 'mh-letter) (defcustom mh-signature-separator-flag t - "*Non-nil means a signature separator should be inserted. + "*On means a signature separator should be inserted. It is not recommended that you change this option since various mail user agents, including MH-E, use the separator to present the signature differently, and to suppress the signature when replying or yanking a letter @@ -861,21 +880,21 @@ (defcustom mh-x-face-file "~/.face" "*File containing face header field to insert in outgoing mail. -If the file starts with either of the strings `X-Face:', `Face:' or -`X-Image-URL:' then the contents are added to the message header verbatim. -Otherwise it is assumed that the file contains the value of the `X-Face:' +If the file starts with either of the strings \"X-Face:\", \"Face:\" or +\"X-Image-URL:\" then the contents are added to the message header verbatim. +Otherwise it is assumed that the file contains the value of the \"X-Face:\" header field. -The `X-Face:' header field, which is a low-resolution, black and white image, -can be generated using the `compface' command, which can be obtained from -ftp://ftp.cs.indiana.edu/pub/faces/compface/compface.tar.Z. The \"Online -X-Face Convertor\" at http://www.dairiki.org/xface/ is a useful resource for -quick conversion of images into `X-Face:' header fields. +The \"X-Face:\" header field, which is a low-resolution, black and white +image, can be generated using the \"compface\" +(ftp://ftp.cs.indiana.edu/pub/faces/compface/compface.tar.Z) command. The +\"Online X-Face Converter\" (http://www.dairiki.org/xface/) is a useful +resource for quick conversion of images into \"X-Face:\" header fields. -Use the `make-face' script (http://quimby.gnus.org/circus/face/make-face) to -convert a JPEG image to the higher resolution, color, `Face:' header field. +Use the \"make-face\" (http://quimby.gnus.org/circus/face/make-face) script to +convert a JPEG image to the higher resolution, color, \"Face:\" header field. -The URL of any image can be used for the `X-Image-URL:' field and no +The URL of any image can be used for the \"X-Image-URL:\" field and no processing of the image is required. To prevent the setting of any of these header fields, either set @@ -884,39 +903,34 @@ :type 'file :group 'mh-letter) -(defcustom mh-yank-from-start-of-msg 'attribution +(defcustom mh-yank-behavior 'attribution "*Controls which part of a message is yanked by \\\\[mh-yank-cur-msg]. -If t, include the entire message, with full headers. This is historically -here for use with supercite, but is now deprecated in favor of the setting -`supercite' below. - -If the symbol `body', then yank the message minus the header. -If the symbol `supercite', include the entire message, with full headers. -This also causes the invocation of `sc-cite-original' without the setting -of `mail-citation-hook', now deprecated practice. +To include the entire message, including the entire header, use \"Body and +Header\". Use \"Body\" to yank just the body without the header. To yank only +the portion of the message following the point, set this option to \"Below +Point\". -If the symbol `autosupercite', do as for `supercite' automatically when -show buffer matches the message being replied-to. When this option is used, -the -noformat switch is passed to the repl program to override a -filter or --format switch. +Choose \"Invoke supercite\" to pass the entire message and header through +supercite. -If the symbol `attribution', then yank the message minus the header and add -a simple attribution line at the top. +If the \"Body With Attribution\" setting is used, then the message minus the +header is yanked and a simple attribution line is added at the top using the +value of the `mh-extract-from-attribution-verb' option. This is the default. -If the symbol `autoattrib', do as for `attribution' automatically when show -buffer matches the message being replied-to. You can make sure this is -always the case by setting `mh-reply-show-message-flag' to t (which is the -default) and optionally `mh-delete-yanked-msg-window-flag' to t as well such -that the show window is never displayed. When the `autoattrib' option is -used, the -noformat switch is passed to the repl program to override a --filter or -format switch. +If the \"Invoke supercite\" or \"Body With Attribution\" settings are used, +the \"-noformat\" argument is passed to the \"repl\" program to override a +\"-filter\" or \"-format\" argument. These settings also have +\"Automatically\" variants that perform the action automatically when you +reply so that you don't need to use \\[mh-yank-cur-msg] at all. Note that this +automatic action is only performed if the show buffer matches the message +being replied to. People who use the automatic variants tend to turn on the +`mh-delete-yanked-msg-window-flag' option as well so that the show window is +never displayed. -If nil, yank only the portion of the message following the point. - -If the show buffer has a region, this variable is ignored unless its value is -one of `attribution' or `autoattrib' in which case the attribution is added -to the yanked region." +If the show buffer has a region, the `mh-yank-behavior' option is ignored +unless its value is one of Attribution variants in which case the attribution +is added to the yanked region." :type '(choice (const :tag "Body and Header" t) (const :tag "Body" body) (const :tag "Below Point" nil) @@ -1983,26 +1997,17 @@ (defcustom mail-citation-hook nil "*Hook for modifying a citation just inserted in the mail buffer. -Each hook function can find the citation between point and mark. -And each hook function should leave point and mark around the citation -text as modified. - -If this hook is entirely empty (nil), the text of the message is inserted -with `mh-ins-buf-prefix' prefixed to each line. - -See also the variable `mh-yank-from-start-of-msg', which controls how -much of the message passed to the hook. +You can gain full control over the appearance of the included text by setting +this hook to a function that modifies it. This hook is ignored if the option +`mh-yank-behavior' is set to one of the supercite flavors. Otherwise, this +option controls how much of the message is passed to the hook. The function +can find the citation between point and mark and it should leave point and +mark around the modified citation text for the next hook function. The +standard prefix `mh-ins-buf-prefix' is not added if this hook is set. -This hook was historically provided to set up supercite. You may now leave -this nil and set up supercite by setting the variable -`mh-yank-from-start-of-msg' to 'supercite or, for more automatic insertion, -to 'autosupercite. - -The hook 'trivial-cite is NOT part of Emacs. It is provided from tc.el, -available here: - http://shasta.cs.uiuc.edu/~lrclause/tc.html -If you use it, customize `mh-yank-from-start-of-msg' to - \"Entire message with headers\"." +For example, if you use the hook function trivial-cite +\(http://shasta.cs.uiuc.edu/~lrclause/tc.html) (which is NOT part of Emacs), +set `mh-yank-behavior' to \"Body and Header\"." :type 'hook :options '(trivial-cite) :group 'mh-hooks @@ -2022,8 +2027,11 @@ :group 'mh-show) (defcustom mh-before-send-letter-hook nil - "Invoked at the beginning of the \\\\[mh-send-letter] command." + "Invoked at the beginning of the \\\\[mh-send-letter] command. +For example, if you want to check your spelling in your message before +sending, add the `ispell-message' function." :type 'hook + :options '(ispell-message) :group 'mh-hooks :group 'mh-letter) @@ -2033,8 +2041,8 @@ :group 'mh-hooks :group 'mh-show) -(defcustom mh-edit-mhn-hook nil - "Invoked on the formatted letter by \\\\[mh-edit-mhn]." +(defcustom mh-mh-to-mime-hook nil + "Invoked on the formatted letter by \\\\[mh-mh-to-mime]." :type 'hook :group 'mh-hooks :group 'mh-letter) diff -r e81cb0b6850a -r cf99ce27df54 lisp/mh-e/mh-gnus.el --- a/lisp/mh-e/mh-gnus.el Sun Oct 23 21:12:46 2005 +0000 +++ b/lisp/mh-e/mh-gnus.el Sun Oct 23 21:26:17 2005 +0000 @@ -56,26 +56,26 @@ `(defmacro ,function ,arg-list ,@body)))) (put 'mh-defmacro-compat 'lisp-indent-function 'defun) -;; Copy of original function from gnus-util.el +;; Copy of original function from gnus-util.el. (mh-defun-compat gnus-local-map-property (map) "Return a list suitable for a text property list specifying keymap MAP." (cond (mh-xemacs-flag (list 'keymap map)) ((>= emacs-major-version 21) (list 'keymap map)) (t (list 'local-map map)))) -;; Copy of original function from mm-decode.el +;; Copy of original function from mm-decode.el. (mh-defun-compat mm-merge-handles (handles1 handles2) (append (if (listp (car handles1)) handles1 (list handles1)) (if (listp (car handles2)) handles2 (list handles2)))) -;; Copy of function from mm-decode.el +;; Copy of function from mm-decode.el. (mh-defun-compat mm-set-handle-multipart-parameter (handle parameter value) ;; HANDLE could be a CTL. (if handle (put-text-property 0 (length (car handle)) parameter value (car handle)))) -;; Copy of function from mm-view.el +;; Copy of function from mm-view.el. (mh-defun-compat mm-inline-text-vcard (handle) (let (buffer-read-only) (mm-insert-inline @@ -89,15 +89,15 @@ 'vcard-standard-filter)))))))) ;; Function from mm-decode.el used in PGP messages. Just define it with older -;; gnus to avoid compiler warning. +;; Gnus to avoid compiler warning. (mh-defun-compat mm-possibly-verify-or-decrypt (parts ctl) nil) -;; Copy of original macro is in mm-decode.el +;; Copy of original macro is in mm-decode.el. (mh-defmacro-compat mm-handle-multipart-ctl-parameter (handle parameter) `(get-text-property 0 ,parameter (car ,handle))) -;; Copy of original function in mm-decode.el +;; Copy of original function in mm-decode.el. (mh-defun-compat mm-readable-p (handle) "Say whether the content of HANDLE is readable." (and (< (with-current-buffer (mm-handle-buffer handle) @@ -107,7 +107,7 @@ (and (eq (mm-body-7-or-8) '7bit) (not (mm-long-lines-p 76)))))) -;; Copy of original function in mm-bodies.el +;; Copy of original function in mm-bodies.el. (mh-defun-compat mm-long-lines-p (length) "Say whether any of the lines in the buffer is longer than LENGTH." (save-excursion @@ -126,10 +126,25 @@ nil) (mh-defun-compat mm-destroy-parts (list) - "Older emacs don't have this function." + "Older versions of Emacs don't have this function." nil) -;;; This is mm-save-part from gnus 5.10 since that function in emacs21.2 is +;; Copy of original function in mml.el. +(mh-defun-compat mml-minibuffer-read-disposition (type &optional default) + (unless default (setq default + (if (and (string-match "\\`text/" type) + (not (string-match "\\`text/rtf\\'" type))) + "inline" + "attachment"))) + (let ((disposition (completing-read + (format "Disposition (default %s): " default) + '(("attachment") ("inline") ("")) + nil t nil nil default))) + (if (not (equal disposition "")) + disposition + default))) + +;;; This is mm-save-part from Gnus 5.10 since that function in emacs21.2 is ;;; buggy (the args to read-file-name are incorrect). When all supported ;;; versions of Emacs come with at least Gnus 5.10, we can delete this ;;; function and rename calls to mh-mm-save-part to mm-save-part. @@ -152,7 +167,7 @@ (mm-save-part-to-file handle file)))) (defun mh-mm-text-html-renderer () - "Find the renderer gnus is using to display text/html MIME parts." + "Find the renderer Gnus is using to display text/html MIME parts." (or (and (boundp 'mm-inline-text-html-renderer) mm-inline-text-html-renderer) (and (boundp 'mm-text-html-renderer) mm-text-html-renderer))) diff -r e81cb0b6850a -r cf99ce27df54 lisp/mh-e/mh-mime.el --- a/lisp/mh-e/mh-mime.el Sun Oct 23 21:12:46 2005 +0000 +++ b/lisp/mh-e/mh-mime.el Sun Oct 23 21:26:17 2005 +0000 @@ -28,8 +28,9 @@ ;;; Commentary: ;; Internal support for MH-E package. -;; Support for generating an mhn composition file. -;; MIME is supported only by MH 6.8 or later. +;; Support for generating MH-style directives for mhn or mhbuild as well as +;; MML (MIME Meta Language) tags. MH-style directives are supported by MH 6.8 +;; or later. ;;; Change Log: @@ -41,45 +42,46 @@ (require 'gnus-util) (require 'mh-gnus) +(autoload 'article-emphasize "gnus-art") (autoload 'gnus-article-goto-header "gnus-art") -(autoload 'article-emphasize "gnus-art") +(autoload 'gnus-eval-format "gnus-spec") (autoload 'gnus-get-buffer-create "gnus") -(autoload 'gnus-eval-format "gnus-spec") -(autoload 'widget-convert-button "wid-edit") (autoload 'message-options-set-recipient "message") +(autoload 'mml-attach-file "mml") +(autoload 'mml-insert-empty-tag "mml") +(autoload 'mml-minibuffer-read-description "mml") +(autoload 'mml-minibuffer-read-disposition "mml") +(autoload 'mml-minibuffer-read-file "mml") +(autoload 'mml-to-mime "mml") (autoload 'mml-unsecure-message "mml-sec") -(autoload 'mml-minibuffer-read-file "mml") -(autoload 'mml-minibuffer-read-description "mml") -(autoload 'mml-insert-empty-tag "mml") -(autoload 'mml-to-mime "mml") -(autoload 'mml-attach-file "mml") (autoload 'rfc2047-decode-region "rfc2047") +(autoload 'widget-convert-button "wid-edit") ;;;###mh-autoload (defun mh-compose-insertion (&optional inline) - "Add a directive to insert a MIME part from a file, using mhn or gnus. -If the variable `mh-compose-insertion' is set to 'mhn, then that will be used. -If it is set to 'gnus, then that will be used instead. + "Add tag to include a file such as an image or sound. +You are prompted for the filename containing the object, the media type if it +cannot be determined automatically, and a content description. If you're using +MH-style directives, you will also be prompted for additional attributes. + +The option `mh-compose-insertion' controls what type of tags are inserted. Optional argument INLINE means make it an inline attachment." (interactive "P") - (if (equal mh-compose-insertion 'gnus) + (if (equal mh-compose-insertion 'mml) (if inline (mh-mml-attach-file "inline") (mh-mml-attach-file)) - (call-interactively 'mh-mhn-compose-insertion))) + (call-interactively 'mh-mh-attach-file))) ;;;###mh-autoload (defun mh-compose-forward (&optional description folder messages) - "Add a MIME directive to forward a message, using mhn or gnus. -If the variable `mh-compose-insertion' is set to 'mhn, then that will be used. -If it is set to 'gnus, then that will be used instead. -Optional argument DESCRIPTION is a description of the attachment. -Optional argument FOLDER is the folder from which the forwarded message should -come. -Optional argument MESSAGES is the range of messages to forward. -If any of the optional arguments are absent, they are prompted for." + "Add tag to forward a message. +You are prompted for a content DESCRIPTION, the name of the FOLDER in which +the messages to forward are located, and the MESSAGES' numbers. + +The option `mh-compose-insertion' controls what type of tags are inserted." (interactive (let* - ((description (read-string "Forw Content-description: ")) + ((description (mml-minibuffer-read-description)) (folder (mh-prompt-for-folder "Message from" mh-sent-from-folder nil)) (messages (let ((default-message @@ -105,24 +107,24 @@ (if (null range) (error "No messages in specified range")) (dolist (message range) - (if (equal mh-compose-insertion 'gnus) + (if (equal mh-compose-insertion 'mml) (mh-mml-forward-message description folder (format "%s" message)) - (mh-mhn-compose-forw description folder message))))) + (mh-mh-forward-message description folder (format "%s" message)))))) ;; To do: ;; paragraph code should not fill # lines if MIME enabled. -;; implement mh-auto-edit-mhn (if non-nil, \\[mh-send-letter] -;; invokes mh-edit-mhn automatically before sending.) -;; actually, instead of mh-auto-edit-mhn, +;; implement mh-auto-mh-to-mime (if non-nil, \\[mh-send-letter] +;; invokes mh-mh-to-mime automatically before sending.) +;; actually, instead of mh-auto-mh-to-mime, ;; should read automhnproc from profile ;; MIME option to mh-forward ;; command to move to content-description insertion point -(defvar mh-mhn-args nil - "Extra arguments to have \\[mh-edit-mhn] pass to the \"mhn\" command. -The arguments are passed to mhn if \\[mh-edit-mhn] is given a -prefix argument. Normally default arguments to mhn are specified in the -MH profile.") +(defvar mh-mh-to-mime-args nil + "Extra arguments for \\[mh-mh-to-mime] to pass to the \"mhbuild\" command. +The arguments are passed to \"mhbuild\" if \\[mh-mh-to-mime] is given a prefix +argument. Normally default arguments to \"mhbuild\" are specified in the MH +profile.") (defvar mh-media-type-regexp (concat (regexp-opt '("text" "image" "audio" "video" "application" @@ -196,7 +198,6 @@ (mh-file-mime-type-substitute (match-string 0) filename))) (kill-buffer tmp-buffer))))))) -;;; This is needed for Emacs20 which doesn't have mailcap-mime-types. (defvar mh-mime-content-types '(("application/mac-binhex40") ("application/msword") ("application/octet-stream") ("application/pdf") ("application/pgp-keys") @@ -218,8 +219,34 @@ ("text/richtext") ("text/x-vcard") ("text/xml") ("video/mpeg") ("video/quicktime")) - "Valid MIME content types. -See documentation for \\[mh-edit-mhn].") + "Valid MIME content types for Emacs 20. +Obsolete; use `mailcap-mime-types'. + +See also \\[mh-mh-to-mime].") + +;;; Delete mh-minibuffer-read-type and mh-mime-content-types and use +;;; mml-minibuffer-read-type when Emacs20 is no longer supported unless we +;;; think (mh-file-mime-type) is better than (mm-default-file-encoding). + +(defun mh-minibuffer-read-type (filename &optional default) + "Return the content type associated with the given FILENAME. +If the \"file\" command exists and recognizes the given file, then its value +is returned\; otherwise, the user is prompted for a type (see +`mailcap-mime-types' and for Emacs 20, `mh-mime-content-types'). +Optional argument DEFAULT is returned if a type isn't entered." + (mailcap-parse-mimetypes) + (let* ((default (or default + (mm-default-file-encoding filename) + "application/octet-stream")) + (type (or (mh-file-mime-type filename) + (completing-read + (format "Content type (default %s): " default) + (if (fboundp 'mailcap-mime-types) + (mapcar 'list (mailcap-mime-types)) + mh-mime-content-types))))) + (if (not (equal type "")) + type + default))) ;; RFC 2045 - Multipurpose Internet Mail Extensions (MIME) Part One: ;; Format of Internet Message Bodies. @@ -248,35 +275,27 @@ "Valid MIME access-type values.") ;;;###mh-autoload -(defun mh-mhn-compose-insertion (filename type description attributes) - "Add a directive to insert a MIME message part from a file. -This is the typical way to insert non-text parts in a message. +(defun mh-mh-attach-file (filename type description attributes) + "Add a tag to insert a MIME message part from a file. +You are prompted for the FILENAME containing the object, the media TYPE if it +cannot be determined automatically, and a content DESCRIPTION. In addition, +you are also prompted for additional ATTRIBUTES. -Arguments are FILENAME, which tells where to find the file, TYPE, the MIME -content type, DESCRIPTION, a line of text for the Content-Description field. -ATTRIBUTES is a comma separated list of name=value pairs that is appended to -the Content-Type field of the attachment. - -See also \\[mh-edit-mhn]." - (interactive (let ((filename (read-file-name "Insert contents of: "))) +See also \\[mh-mh-to-mime]." + (interactive (let ((filename (mml-minibuffer-read-file "Attach file: "))) (list filename - (or (mh-file-mime-type filename) - (completing-read "Content-Type: " - (if (fboundp 'mailcap-mime-types) - (mapcar 'list (mailcap-mime-types)) - mh-mime-content-types))) - (read-string "Content-Description: ") - (read-string "Content-Attributes: " + (mh-minibuffer-read-type filename) + (mml-minibuffer-read-description) + (read-string "Attributes: " (concat "name=\"" (file-name-nondirectory filename) "\""))))) - (mh-mhn-compose-type filename type description attributes )) + (mh-mh-compose-type filename type description attributes)) -(defun mh-mhn-compose-type (filename type +(defun mh-mh-compose-type (filename type &optional description attributes comment) - "Insert a mhn directive to insert a file. - + "Insert an MH-style directive to insert a file. The file specified by FILENAME is encoded as TYPE. An optional DESCRIPTION is used as the Content-Description field, optional set of ATTRIBUTES and an optional COMMENT can also be included." @@ -292,75 +311,62 @@ (insert "] " (expand-file-name filename)) (insert "\n")) +;;;###mh-autoload +(defun mh-mh-compose-anon-ftp (host filename type description) + "Add tag to include anonymous ftp reference to a file. +You can even have your message initiate an \"ftp\" transfer when the +recipient reads the message. You are prompted for the remote +HOST and FILENAME, the media TYPE, and the content DESCRIPTION. + +See also \\[mh-mh-to-mime]." + (interactive (list + (read-string "Remote host: ") + (read-string "Remote filename: ") + (mh-minibuffer-read-type "DUMMY-FILENAME") + (mml-minibuffer-read-description))) + (mh-mh-compose-external-type "anon-ftp" host filename + type description)) ;;;###mh-autoload -(defun mh-mhn-compose-anon-ftp (host filename type description) - "Add a directive for a MIME anonymous ftp external body part. -This directive tells MH to include a reference to a message/external-body part -retrievable by anonymous FTP. +(defun mh-mh-compose-external-compressed-tar (host filename description) + "Add tag to include anonymous ftp reference to a compressed tar file. +In addition to retrieving the file via anonymous \"ftp\" as per the +\\[mh-mh-compose-anon-ftp] command, the file will also be uncompressed and +untarred. You are prompted for the remote HOST and FILENAME and the content +DESCRIPTION. -Arguments are HOST and FILENAME, which tell where to find the file, TYPE, the -MIME content type, and DESCRIPTION, a line of text for the Content-description -header. - -See also \\[mh-edit-mhn]." +See also \\[mh-mh-to-mime]." (interactive (list (read-string "Remote host: ") (read-string "Remote filename: ") - (completing-read "External Content-Type: " - (if (fboundp 'mailcap-mime-types) - (mapcar 'list (mailcap-mime-types)) - mh-mime-content-types)) - (read-string "External Content-Description: "))) - (mh-mhn-compose-external-type "anon-ftp" host filename - type description)) + (mml-minibuffer-read-description))) + (mh-mh-compose-external-type "anon-ftp" host filename + "application/octet-stream" + description + "type=tar; conversions=x-compress" + "mode=image")) ;;;###mh-autoload -(defun mh-mhn-compose-external-compressed-tar (host filename description) - "Add a directive to include a MIME reference to a compressed tar file. -The file should be available via anonymous ftp. This directive tells MH to -include a reference to a message/external-body part. +(defun mh-mh-compose-external-type (access-type host filename type + &optional description + attributes parameters + comment) + "Add tag to refer to a remote file. +This command is a general utility for referencing external files. In fact, all +of the other commands that insert directives to access external files call +this command. You are prompted for the ACCESS-TYPE, remote HOST and FILENAME, +and content TYPE. If you provide a prefix argument, you are also prompted for +a content DESCRIPTION, ATTRIBUTES, PARAMETERS, and a COMMENT. -Arguments are HOST and FILENAME, which tell where to find the file, and -DESCRIPTION, a line of text for the Content-description header. - -See also \\[mh-edit-mhn]." +See also \\[mh-mh-to-mime]." (interactive (list + (completing-read "Access type: " mh-access-types) (read-string "Remote host: ") (read-string "Remote filename: ") - (read-string "Tar file Content-description: "))) - (mh-mhn-compose-external-type "anon-ftp" host filename - "application/octet-stream" - description - "type=tar; conversions=x-compress" - "mode=image")) - -;;;###mh-autoload -(defun mh-mhn-compose-external-type (access-type host filename type - &optional description - attributes extra-params - comment) - "Add a directive to include a MIME reference to a remote file. -The file should be available via anonymous ftp. This directive tells MH to -include a reference to a message/external-body part. - -Arguments are ACCESS-TYPE, HOST and FILENAME, which tell where to find the -file and TYPE which is the MIME Content-Type. Optional arguments include -DESCRIPTION, a line of text for the Content-description header, ATTRIBUTES, -EXTRA-PARAMS, and COMMENT. - -See also \\[mh-edit-mhn]." - (interactive (list - (completing-read "Access Type: " mh-access-types) - (read-string "Remote host: ") - (read-string "Remote url-path: ") - (completing-read "Content-Type: " - (if (fboundp 'mailcap-mime-types) - (mapcar 'list (mailcap-mime-types)) - mh-mime-content-types)) - (if current-prefix-arg (read-string "Content-description: ")) + (mh-minibuffer-read-type "DUMMY-FILENAME") + (if current-prefix-arg (mml-minibuffer-read-description)) (if current-prefix-arg (read-string "Attributes: ")) - (if current-prefix-arg (read-string "Extra Parameters: ")) + (if current-prefix-arg (read-string "Parameters: ")) (if current-prefix-arg (read-string "Comment: ")))) (beginning-of-line) (insert "#@" type) @@ -378,25 +384,24 @@ (let ((directory (file-name-directory filename))) (and directory (insert "; directory=\"" directory "\""))) - (and extra-params - (insert "; " extra-params)) + (and parameters + (insert "; " parameters)) (insert "\n")) ;;;###mh-autoload -(defun mh-mhn-compose-forw (&optional description folder messages) - "Add a forw directive to this message, to forward a message with MIME. -This directive tells MH to include the named messages in this one. +(defun mh-mh-forward-message (&optional description folder messages) + "Add tag to forward a message. +You are prompted for a content DESCRIPTION, the name of the FOLDER in which +the messages to forward are located, and the MESSAGES' numbers. -Arguments are DESCRIPTION, a line of text for the Content-description header, -and FOLDER and MESSAGES, which name the message(s) to be forwarded. - -See also \\[mh-edit-mhn]." +See also \\[mh-mh-to-mime]." (interactive (list - (read-string "Forw Content-description: ") + (mml-minibuffer-read-description) (mh-prompt-for-folder "Message from" mh-sent-from-folder nil) (read-string (concat "Messages" (if (numberp mh-sent-from-msg) - (format " (default %d): " mh-sent-from-msg) + (format " (default %d): " + mh-sent-from-msg) ": "))))) (beginning-of-line) (insert "#forw [") @@ -417,62 +422,59 @@ (insert "\n")) ;;;###mh-autoload -(defun mh-edit-mhn (&optional extra-args) - "Format the current draft for MIME, expanding any mhn directives. - -Process the current draft with the mhn program, which, using directives -already inserted in the draft, fills in all the MIME components and header -fields. - -This step is performed automatically when sending the message, but this -function may be called manually before sending the draft as well. - -The `\\[mh-revert-mhn-edit]' command undoes this command. The arguments in the -list `mh-mhn-args' are passed to mhn if this function is passed an optional -prefix argument EXTRA-ARGS. +(defun mh-mh-to-mime (&optional extra-args) + "Compose MIME message from MH-style directives. +Typically, you send a message with attachments just like any other message. +However, you may take a sneak preview of the MIME encoding if you wish by +running this command. -For assistance with creating mhn directives to insert various types of -components in a message, see \\[mh-mhn-compose-insertion] (generic insertion -from a file), \\[mh-mhn-compose-anon-ftp] (external reference to file via -anonymous ftp), \\[mh-mhn-compose-external-compressed-tar] \ \(reference to -compressed tar file via anonymous ftp), and \\[mh-mhn-compose-forw] (forward -message). +If you wish to pass additional arguments to \"mhbuild\" (\"mhn\") to affect +how it builds your message, use the `mh-mh-to-mime-args' option. For example, +you can build a consistency check into the message by setting +`mh-mh-to-mime-args' to \"-check\". The recipient of your message can then run +\"mhbuild -check\" on the message--\"mhbuild\" (\"mhn\") will complain if the +message has been corrupted on the way. This command only consults this option +when given a prefix argument. -The value of `mh-edit-mhn-hook' is a list of functions to be called, with no -arguments, after performing the conversion. +The value of `mh-mh-to-mime-hook' is a list of functions to be called after +the message has been formatted. -The mhn program is part of MH version 6.8 or later." +The effects of this command can be undone by running \\[mh-mh-to-mime-undo]." (interactive "*P") - (mh-mhn-quote-unescaped-sharp) + (mh-mh-quote-unescaped-sharp) (save-buffer) - (message "mhn editing...") + (message "Running %s..." (if (mh-variant-p 'nmh) "mhbuild" "mhn")) (cond ((mh-variant-p 'nmh) (mh-exec-cmd-error nil - "mhbuild" (if extra-args mh-mhn-args) buffer-file-name)) + "mhbuild" + (if extra-args mh-mh-to-mime-args) + buffer-file-name)) (t (mh-exec-cmd-error (format "mhdraft=%s" buffer-file-name) - "mhn" (if extra-args mh-mhn-args) buffer-file-name))) + "mhn" + (if extra-args mh-mh-to-mime-args) + buffer-file-name))) (revert-buffer t t) - (message "mhn editing...done") - (run-hooks 'mh-edit-mhn-hook)) + (message "Running %s...done" (if (mh-variant-p 'nmh) "mhbuild" "mhn")) + (run-hooks 'mh-mh-to-mime-hook)) -(defun mh-mhn-quote-unescaped-sharp () - "Quote `#' characters that haven't been quoted for `mhbuild'. +(defun mh-mh-quote-unescaped-sharp () + "Quote `#' characters that haven't been quoted for \"mhbuild\". If the `#' character is present in the first column, but it isn't part of a -MHN directive then `mhbuild' gives an error. This function will quote all such -characters." +MH-style directive then \"mhbuild\" gives an error. This function will quote +all such characters." (save-excursion (goto-char (point-min)) (while (re-search-forward "^#" nil t) (beginning-of-line) - (unless (mh-mhn-directive-present-p (point) (line-end-position)) + (unless (mh-mh-directive-present-p (point) (line-end-position)) (insert "#")) (goto-char (line-end-position))))) ;;;###mh-autoload -(defun mh-revert-mhn-edit (noconfirm) - "Undo the effect of \\[mh-edit-mhn] by reverting to the backup file. +(defun mh-mh-to-mime-undo (noconfirm) + "Undo effects of \\[mh-mh-to-mime]. Optional non-nil argument NOCONFIRM means don't ask for confirmation." (interactive "*P") (if (null buffer-file-name) @@ -499,25 +501,25 @@ (after-find-file nil))) ;;;###mh-autoload -(defun mh-mhn-directive-present-p (&optional begin end) - "Check if the text between BEGIN and END might be a MHN directive. +(defun mh-mh-directive-present-p (&optional begin end) + "Check if the text between BEGIN and END might be a MH-style directive. The optional argument BEGIN defaults to the beginning of the buffer, while END defaults to the the end of the buffer." (unless begin (setq begin (point-min))) (unless end (setq end (point-max))) (save-excursion - (block 'search-for-mhn-directive + (block 'search-for-mh-directive (goto-char begin) (while (re-search-forward "^#" end t) (let ((s (buffer-substring-no-properties (point) (line-end-position)))) (cond ((equal s "")) ((string-match "^forw[ \t\n]+" s) - (return-from 'search-for-mhn-directive t)) + (return-from 'search-for-mh-directive t)) (t (let ((first-token (car (split-string s "[ \t;@]")))) (when (and first-token (string-match mh-media-type-regexp first-token)) - (return-from 'search-for-mhn-directive t))))))) + (return-from 'search-for-mh-directive t))))))) nil))) @@ -526,12 +528,15 @@ ;;;###mh-autoload (defun mh-mml-to-mime () - "Compose MIME message from mml directives. -This step is performed automatically when sending the message, but this -function may be called manually before sending the draft as well." + "Compose MIME message from MML tags. +Typically, you send a message with attachments just like any other message. +However, you may take a sneak preview of the MIME encoding if you wish by +running this command. + +This action can be undone by running \\[undo]." (interactive) (require 'message) - (when mh-gnus-pgp-support-flag ;; This is only needed for PGP + (when mh-pgp-support-flag ;; This is only needed for PGP (message-options-set-recipient)) (let ((saved-text (buffer-string)) (buffer (current-buffer)) @@ -573,53 +578,45 @@ (if current-prefix-arg (let ((def (or (car mh-mml-cryptographic-method-history) mh-mml-method-default))) - (completing-read (format "Method: [%s] " def) + (completing-read (format "Method (default %s): " def) '(("pgp") ("pgpmime") ("smime")) nil t nil 'mh-mml-cryptographic-method-history def)) mh-mml-method-default)) ;;;###mh-autoload (defun mh-mml-attach-file (&optional disposition) - "Attach a file to the outgoing MIME message. -The file is not inserted or encoded until you send the message with -`\\[mh-send-letter]'. -Message disposition is \"inline\" or \"attachment\" and is prompted for if -DISPOSITION is nil. + "Add a tag to insert a MIME message part from a file. +You are prompted for the filename containing the object, the media type if it +cannot be determined automatically, a content description and the disposition +of the attachment. -This is basically `mml-attach-file' from gnus, modified such that a prefix +This is basically `mml-attach-file' from Gnus, modified such that a prefix argument yields an `inline' disposition and Content-Type is determined automatically." (let* ((file (mml-minibuffer-read-file "Attach file: ")) - (type (or (mh-file-mime-type file) - (completing-read "Content-Type: " - (if (fboundp 'mailcap-mime-types) - (mapcar 'list (mailcap-mime-types)) - mh-mime-content-types)))) + (type (mh-minibuffer-read-type file)) (description (mml-minibuffer-read-description)) (dispos (or disposition - (completing-read "Disposition: [attachment] " - '(("attachment")("inline")) - nil t nil nil - "attachment")))) + (mml-minibuffer-read-disposition type)))) (mml-insert-empty-tag 'part 'type type 'filename file 'disposition dispos 'description description))) (defvar mh-identity-pgg-default-user-id) (defun mh-secure-message (method mode &optional identity) - "Add directive to Encrypt/Sign an entire message. + "Add tag to encrypt or sign message. METHOD should be one of: \"pgpmime\", \"pgp\", \"smime\". MODE should be one of: \"sign\", \"encrypt\", \"signencrypt\", \"none\". IDENTITY is optionally the default-user-id to use." - (if (not mh-gnus-pgp-support-flag) - (error "Sorry. Your version of gnus does not support PGP/GPG") + (if (not mh-pgp-support-flag) + (error "Your version of Gnus does not support PGP/GPG") ;; Check the arguments (let ((valid-methods (list "pgpmime" "pgp" "smime")) (valid-modes (list "sign" "encrypt" "signencrypt" "none"))) (if (not (member method valid-methods)) - (error "Sorry. METHOD \"%s\" is invalid" method)) + (error "Method \"%s\" is invalid" method)) (if (not (member mode valid-modes)) - (error "Sorry. MODE \"%s\" is invalid" mode)) + (error "Mode \"%s\" is invalid" mode)) (mml-unsecure-message) (if (not (string= mode "none")) (save-excursion @@ -632,34 +629,46 @@ ;;;###mh-autoload (defun mh-mml-unsecure-message (&optional ignore) - "Remove any secure message directives. -The IGNORE argument is not used." + "Remove any secure message tags. +The argument IGNORE is not used." (interactive "P") - (if (not mh-gnus-pgp-support-flag) - (error "Sorry. Your version of gnus does not support PGP/GPG") + (if (not mh-pgp-support-flag) + (error "Your version of Gnus does not support PGP/GPG") (mml-unsecure-message))) ;;;###mh-autoload (defun mh-mml-secure-message-sign (method) - "Add security directive to sign the entire message using METHOD." + "Add tag to sign the message. +A proper multipart message is created for you when you send the message. Use +the \\[mh-mml-unsecure-message] command to remove this tag. Use a prefix +argument METHOD to be prompted for one of the possible security methods +(see `mh-mml-method-default')." (interactive (list (mh-mml-query-cryptographic-method))) (mh-secure-message method "sign" mh-identity-pgg-default-user-id)) ;;;###mh-autoload (defun mh-mml-secure-message-encrypt (method) - "Add security directive to encrypt the entire message using METHOD." + "Add tag to encrypt the message. +A proper multipart message is created for you when you send the message. Use +the \\[mh-mml-unsecure-message] command to remove this tag. Use a prefix +argument METHOD to be prompted for one of the possible security methods +(see `mh-mml-method-default')." (interactive (list (mh-mml-query-cryptographic-method))) (mh-secure-message method "encrypt" mh-identity-pgg-default-user-id)) ;;;###mh-autoload (defun mh-mml-secure-message-signencrypt (method) - "Add security directive to encrypt and sign the entire message using METHOD." + "Add tag to encrypt and sign the message. +A proper multipart message is created for you when you send the message. Use +the \\[mh-mml-unsecure-message] command to remove this tag. Use a prefix +argument METHOD to be prompted for one of the possible security methods +(see `mh-mml-method-default')." (interactive (list (mh-mml-query-cryptographic-method))) (mh-secure-message method "signencrypt" mh-identity-pgg-default-user-id)) ;;;###mh-autoload -(defun mh-mml-directive-present-p () - "Check if the current buffer has text which may be an MML directive." +(defun mh-mml-tag-present-p () + "Check if the current buffer has text which may be a MML tag." (save-excursion (goto-char (point-min)) (re-search-forward @@ -682,7 +691,7 @@ ;;;###mh-autoload (defun mh-destroy-postponed-handles () - "Free MIME data for externally displayed mime parts." + "Free MIME data for externally displayed MIME parts." (let ((mime-data (mh-buffer-data))) (when mime-data (mm-destroy-parts (mh-mime-handles mime-data))) @@ -736,13 +745,13 @@ ;;;###mh-autoload (defun mh-display-smileys () - "Function to display smileys." + "Display smileys." (when (and mh-graphical-smileys-flag (mh-small-show-buffer-p)) (mh-funcall-if-exists smiley-region (point-min) (point-max)))) ;;;###mh-autoload (defun mh-display-emphasis () - "Function to display graphical emphasis." + "Display graphical emphasis." (when (and mh-graphical-emphasis-flag (mh-small-show-buffer-p)) (flet ((article-goto-body ())) ; shadow this function to do nothing (save-excursion @@ -799,8 +808,7 @@ "Store the MIME parts of the current message. If ARG, prompt for directory, else use that specified by the variable `mh-mime-save-parts-default-directory'. These directories may be superseded by -mh_profile directives, since this function calls on mhstore or mhn to do the -actual storing." +MH profile components, since this function calls on mhstore to do the work." (interactive "P") (let ((msg (if (eq major-mode 'mh-show-mode) (mh-show-buffer-message-number) @@ -940,7 +948,7 @@ (mh-mime-display-single handle)) ((equal (car handle) "multipart/alternative") (mh-mime-display-alternative (cdr handle))) - ((and mh-gnus-pgp-support-flag + ((and mh-pgp-support-flag (or (equal (car handle) "multipart/signed") (equal (car handle) "multipart/encrypted"))) (mh-mime-display-security handle)) @@ -1047,7 +1055,7 @@ (mm-inlined-p handle))))))) (save-restriction (narrow-to-region (point) (if (eobp) (point) (1+ (point)))) - (cond ((and mh-gnus-pgp-support-flag + (cond ((and mh-pgp-support-flag (equal type "application/pgp-signature")) nil) ; skip signatures as they are already handled... ((not displayp) diff -r e81cb0b6850a -r cf99ce27df54 lisp/mh-e/mh-utils.el --- a/lisp/mh-e/mh-utils.el Sun Oct 23 21:12:46 2005 +0000 +++ b/lisp/mh-e/mh-utils.el Sun Oct 23 21:26:17 2005 +0000 @@ -175,8 +175,8 @@ (defvar mh-globals-hash (make-hash-table) "Keeps track of MIME data on a per buffer basis.") -(defvar mh-gnus-pgp-support-flag (not (not (locate-library "mml2015"))) - "Non-nil means installed Gnus has PGP support.") +(defvar mh-pgp-support-flag (not (not (locate-library "mml2015"))) + "Non-nil means PGP support is available.") (defvar mh-mm-inline-media-tests `(("image/jpeg" @@ -410,10 +410,10 @@ (defun mh-show-font-lock-fontify-region (beg end loudly) "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. The region between BEG and END is -given over to be fontified and LOUDLY controls if a user sees a -message about the fontification operation." +Used when `mh-highlight-citation-p' is set to \"'gnus\", leaving the body to +be dealt with by gnus highlighting. The region between BEG and END is given +over to be fontified and LOUDLY controls if a user sees a message about the +fontification operation." (let ((header-end (mh-mail-header-end))) (cond ((and (< beg header-end)(< end header-end)) @@ -432,7 +432,7 @@ (require 'gnus-cite)))) (defun mh-gnus-article-highlight-citation () - "Highlight cited text in current buffer using gnus." + "Highlight cited text in current buffer using Gnus." (interactive) ;; Requiring gnus-cite should have been sufficient. However for Emacs21.1, ;; recursive-load-depth-limit is only 10, so an error occurs. Also it may be