+(defun wl-draft-preview-attributes-list ()
+ (if (listp (car wl-draft-preview-attributes-list))
+ (elmo-uniq-list
+ (append (and (wl-message-mail-p)
+ (cdr (assq 'mail wl-draft-preview-attributes-list)))
+ (and (wl-message-news-p)
+ (cdr (assq 'news wl-draft-preview-attributes-list)))))
+ wl-draft-preview-attributes-list))
+
+(defun wl-draft-show-attributes-buffer (attribute-values)
+ (let* ((cur-win (selected-window))
+ (size (min
+ (- (window-height cur-win)
+ window-min-height 1)
+ (- (window-height cur-win)
+ (max
+ window-min-height
+ (1+ wl-draft-preview-attributes-buffer-lines))))))
+ (split-window cur-win (if (> size 0) size window-min-height))
+ (select-window (next-window))
+ (let ((pop-up-windows nil))
+ (switch-to-buffer (get-buffer-create
+ wl-draft-preview-attributes-buffer-name)))
+ (with-current-buffer
+ (get-buffer wl-draft-preview-attributes-buffer-name)
+ (setq buffer-read-only t)
+ (let (buffer-read-only)
+ (erase-buffer)
+ (dolist (pair attribute-values)
+ (insert (capitalize (symbol-name (car pair))) ": "
+ (format "%s" (or (cdr pair) ""))
+ "\n"))
+ (goto-char (point-min))
+ (wl-highlight-headers)))
+ (select-window cur-win)))
+
+(defun wl-draft-hide-attributes-buffer ()
+ (let (window buffer)
+ (when (setq window (get-buffer-window
+ wl-draft-preview-attributes-buffer-name))
+ (select-window window)
+ (delete-window))
+ (when (setq buffer (get-buffer wl-draft-preview-attributes-buffer-name))
+ (kill-buffer buffer))))
+
+(defun wl-draft-attribute-recipients ()
+ (concat (mapconcat
+ 'identity
+ (wl-draft-deduce-address-list
+ (current-buffer)
+ (point-min)
+ (save-excursion
+ (goto-char (point-min))
+ (re-search-forward
+ (concat
+ "^"
+ (regexp-quote mail-header-separator)
+ "$")
+ nil t)
+ (point)))
+ ", ")))
+
+(defun wl-draft-attribute-envelope-from ()
+ (or wl-envelope-from
+ (wl-address-header-extract-address wl-from)))
+
+(defun wl-draft-attribute-smtp-posting-server ()
+ (or wl-smtp-posting-server
+ (progn (require 'smtp) smtp-server)
+ "localhost"))
+
+(defun wl-draft-attribute-smtp-posting-port ()
+ (or wl-smtp-posting-port
+ (progn (require 'smtp) smtp-service)))
+
+(defun wl-draft-attribute-newsgroups ()
+ (std11-field-body "Newsgroups"))
+
+(defun wl-draft-nntp-attribute (attribute &optional alternatives)
+ (let ((config (cdr (elmo-string-matched-assoc
+ (std11-field-body "newsgroups")
+ wl-nntp-posting-config-alist)))
+ entry)
+ (when (stringp config)
+ (setq config (list (cons 'server config))))
+ (if (setq entry (assq attribute config))
+ ;; maybe nil
+ (cdr entry)
+ (let (value)
+ (while alternatives
+ (if (setq value (symbol-value (car alternatives)))
+ (setq alternatives nil)
+ (setq alternatives (cdr alternatives))))
+ value))))
+
+(defun wl-draft-attribute-nntp-posting-server ()
+ (wl-draft-nntp-attribute
+ 'server
+ '(wl-nntp-posting-server elmo-nntp-default-server)))
+
+(defun wl-draft-attribute-nntp-posting-port ()
+ (wl-draft-nntp-attribute
+ 'point
+ '(wl-nntp-posting-port elmo-nntp-default-port)))
+
+(defun wl-draft-attribute-value (attr)
+ (let ((name (symbol-name attr))
+ fsymbol symbol)
+ (cond ((and (setq fsymbol (intern-soft
+ (format "wl-draft-attribute-%s" name)))
+ (fboundp fsymbol))
+ (funcall fsymbol))
+ ((and (setq symbol (intern-soft (format "wl-%s" name)))
+ (boundp symbol))
+ (symbol-value symbol))
+ ((boundp attr)
+ (symbol-value attr)))))
+
+(defun wl-mime-quit-preview ()
+ "Quitting method for mime-view."
+ (let* ((temp (and (boundp 'mime-edit-temp-message-buffer) ;; for SEMI <= 1.14.6
+ mime-edit-temp-message-buffer))
+ (window (selected-window))
+ buf)
+ (mime-preview-kill-buffer)
+ (set-buffer temp)
+ (setq buf mime-edit-buffer)
+ (kill-buffer temp)
+ (select-window window)
+ (switch-to-buffer buf)))
+