+2002-03-04 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * smime.el (smime-make-temp-file): Don't quote
+ `temporary-file-directory'.
+
+2002-03-04 Simon Josefsson <jas@extundo.com>
+
+ * smime.el (smime-sign-region): Rename argument keyfiles to
+ keyfile. You only sign something with one key.
+ (smime-sign-buffer): Better completing-read prompt.
+ (smime-decrypt-buffer): Ditto.
+
+ * smime.el (smime-make-temp-file): Make it work under XEmacs.
+
+ * mm-view.el (mm-view-pkcs7-decrypt): Better prompt for
+ completing-read.
+ (mm-view-pkcs7-decrypt): CRLF->LF.
+
+2002-03-04 Paul Jarc <prj@po.cwru.edu>
+
+ * message.el (message-hierarchical-addresses): New variable.
+ (message-get-reply-headers): Use it.
+ From Ted Zlatanov <teodor.zlatanov@divine.com>
+
2002-03-03 ShengHuo ZHU <zsh@cs.rochester.edu>
* message.el (message-mode): If buffer-file-name, don't set auto
:type '(choice (const :tag "Always use primary" nil)
regexp))
+(defcustom message-hierarchical-addresses nil
+ "A list of hierarchical mail address definitions.
+
+Inside each entry, the first address is the \"top\" address, and
+subsequent addresses are subaddresses; this is used to indicate that
+mail sent to the first address will automatically be delivered to the
+subaddresses. So if the first address appears in the recipient list
+for a message, the subaddresses will be removed (if present) before
+the mail is sent. All addresses in this structure should be
+downcased."
+ :group 'message-headers
+ :type '(repeat (repeat string)))
+
(defcustom message-mail-user-agent nil
"Like `mail-user-agent'.
Except if it is nil, use Gnus native MUA; if it is t, use
(let ((s recipients))
(while s
(setq recipients (delq (assoc (car (pop s)) s) recipients))))
+
+ ;; Remove hierarchical lists that are contained within each other,
+ ;; if message-hierarchical-addresses is defined.
+ (when message-hierarchical-addresses
+ (let ((plain-addrs (mapcar 'car recipients))
+ subaddrs recip)
+ (while plain-addrs
+ (setq subaddrs (assoc (car plain-addrs)
+ message-hierarchical-addresses)
+ plain-addrs (cdr plain-addrs))
+ (when subaddrs
+ (setq subaddrs (cdr subaddrs))
+ (while subaddrs
+ (setq recip (assoc (car subaddrs) recipients)
+ subaddrs (cdr subaddrs))
+ (if recip
+ (setq recipients (delq recip recipients))))))))
+
;; Build the header alist. Allow the user to be asked whether
;; or not to reply to all recipients in a wide reply.
(setq follow-to (list (cons 'To (cdr (pop recipients)))))
(if (= (length smime-keys) 1)
(cadar smime-keys)
(smime-get-key-by-email
- (completing-read "Decrypt this part with which key? "
- smime-keys nil nil
- (and (listp (car-safe smime-keys))
- (caar smime-keys)))))))
+ (completing-read
+ (concat "Decipher using which key? "
+ (if smime-keys (concat "(default " (caar smime-keys) ") ")
+ ""))
+ smime-keys nil nil nil nil (car-safe (car-safe smime-keys))))))
+ (goto-char (point-min))
+ (while (search-forward "\r\n" nil t)
+ (replace-match "\n"))
+ (goto-char (point-min)))
(provide 'mm-view)
(lambda (prefix &optional dir-flag) ;; Simple implementation
(expand-file-name
(make-temp-name prefix)
- temporary-file-directory)))))
+ (if (fboundp 'temp-directory)
+ (temp-directory)
+ temporary-file-directory))))))
;; Password dialog function
;; Sign+encrypt region
-(defun smime-sign-region (b e keyfiles)
- "Sign region with certified key in KEYFILES.
+(defun smime-sign-region (b e keyfile)
+ "Sign region with certified key in KEYFILE.
If signing fails, the buffer is not modified. Region is assumed to
-have proper MIME tags. KEYFILES is expected to contain a PEM encoded
-private key and certificate as its car, and a list of additional certificates
-to include in its caar."
+have proper MIME tags. KEYFILE is expected to contain a PEM encoded
+private key and certificate as its car, and a list of additional
+certificates to include in its caar. If no additional certificates is
+included, KEYFILE may be the file containing the PEM encoded private
+key and certificate itself."
(smime-new-details-buffer)
- (let ((keyfile (car keyfiles))
- (certfiles (and (cdr keyfiles) (cadr keyfiles)))
+ (let ((keyfile (or (car-safe keyfile) keyfile))
+ (certfiles (and (cdr-safe keyfile) (cadr keyfile)))
(buffer (generate-new-buffer (generate-new-buffer-name " *smime*")))
(passphrase (smime-ask-passphrase))
(tmpfile (smime-make-temp-file "smime")))
(smime-sign-region
(point-min) (point-max)
(if keyfile
- (list keyfile (smime-get-certfiles keyfile smime-keys))
+ keyfile
(smime-get-key-by-email
- (completing-read "Sign using which signature? " smime-keys nil nil
- (and (listp (car-safe smime-keys))
- (cdr smime-keys))))))))
+ (completing-read
+ (concat "Sign using which signature? "
+ (if smime-keys (concat "(default " (caar smime-keys) ") ")
+ ""))
+ smime-keys nil nil nil nil (car-safe (car-safe smime-keys))))))))
(defun smime-encrypt-buffer (&optional certfiles buffer)
"S/MIME encrypt BUFFER for recipients specified in CERTFILES.
(expand-file-name
(or keyfile
(smime-get-key-by-email
- (completing-read "Decrypt with which key? " smime-keys nil nil
- (and (listp (car-safe smime-keys))
- (caar smime-keys)))))))))
+ (completing-read
+ (concat "Decipher using which key? "
+ (if smime-keys (concat "(default " (caar smime-keys) ") ")
+ ""))
+ smime-keys nil nil nil nil (car-safe (car-safe smime-keys)))))))))
;; Various operations