-;;; wl-mime.el -- SEMI implementations of MIME processing on Wanderlust.
+;;; wl-mime.el --- SEMI implementations of MIME processing on Wanderlust.
;; Copyright (C) 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
;;
;;; Commentary:
-;;
+;;
;;; Code:
-;;
+;;
(require 'mime-view)
(require 'mime-edit)
(let* (recipients-message
(config-exec-flag wl-draft-config-exec-flag)
(mime-display-header-hook 'wl-highlight-headers)
+ (mime-header-encode-method-alist
+ (append
+ '((wl-draft-eword-encode-address-list
+ . (To Cc Bcc Resent-To Resent-Cc Bcc Resent-Bcc)))
+ mime-header-encode-method-alist))
mime-view-ignored-field-list ; all header.
(mime-edit-translate-buffer-hook
(append
(let ((wl-draft-config-exec-flag config-exec-flag))
(run-hooks 'wl-draft-send-hook)
(setq recipients-message
- (concat "Recipients: "
- (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)))
- ", ")))))))
+ (condition-case err
+ (concat "Recipients: "
+ (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)))
+ ", "))
+ (error
+ (kill-buffer (current-buffer))
+ (signal (car err) (cdr err)))))))))
mime-edit-translate-buffer-hook)))
(mime-edit-preview-message)
(let ((buffer-read-only nil))
(defun wl-message-request-partial (folder number)
(elmo-set-work-buf
(elmo-message-fetch (wl-folder-get-elmo-folder folder)
- number
+ number
(elmo-make-fetch-strategy 'entire)
nil
(current-buffer)
'unread)
(mime-parse-buffer nil)))
-(defalias 'wl-message-read 'mime-preview-scroll-up-entity)
-(defalias 'wl-message-next-content 'mime-preview-move-to-next)
-(defalias 'wl-message-prev-content 'mime-preview-move-to-previous)
-(defalias 'wl-message-play-content 'mime-preview-play-current-entity)
-(defalias 'wl-message-extract-content 'mime-preview-extract-current-entity)
-(defalias 'wl-message-quit 'mime-preview-quit)
+(defalias 'wl-message-read 'mime-preview-scroll-up-entity)
+(defalias 'wl-message-next-content 'mime-preview-move-to-next)
+(defalias 'wl-message-prev-content 'mime-preview-move-to-previous)
+(defalias 'wl-message-play-content 'mime-preview-play-current-entity)
+(defalias 'wl-message-extract-content 'mime-preview-extract-current-entity)
+(defalias 'wl-message-quit 'mime-preview-quit)
(defalias 'wl-message-button-dispatcher-internal
'mime-button-dispatcher)
;;; Summary
-(defun wl-summary-burst-subr (children target number)
+(defun wl-summary-burst-subr (message-entity target number)
;; returns new number.
- (let (content-type message-entity granch)
- (while children
- (setq content-type (mime-entity-content-type (car children)))
- (if (eq (cdr (assq 'type content-type)) 'multipart)
- (setq number (wl-summary-burst-subr
- (mime-entity-children (car children))
- target
- number))
- (when (and (eq (cdr (assq 'type content-type)) 'message)
- (eq (cdr (assq 'subtype content-type)) 'rfc822))
- (message (format "Bursting...%s" (setq number (+ 1 number))))
- (setq message-entity
- (car (mime-entity-children (car children))))
- (with-temp-buffer
- (insert (mime-entity-body (car children)))
- (elmo-folder-append-buffer
- target
- (mime-entity-fetch-field message-entity
- "Message-ID")))))
- (setq children (cdr children)))
+ (let (content-type entity)
+ (setq content-type (mime-entity-content-type message-entity))
+ (cond ((eq (cdr (assq 'type content-type)) 'multipart)
+ (dolist (entity (mime-entity-children message-entity))
+ (setq number (wl-summary-burst-subr
+ entity
+ target
+ number))))
+ ((and (eq (cdr (assq 'type content-type)) 'message)
+ (eq (cdr (assq 'subtype content-type)) 'rfc822))
+ (message "Bursting...%s" (setq number (+ 1 number)))
+ (setq entity
+ (car (mime-entity-children message-entity)))
+ (with-temp-buffer
+ (insert (mime-entity-body message-entity))
+ (elmo-folder-append-buffer
+ target
+ (mime-entity-fetch-field entity "Message-ID")))))
number))
(defun wl-summary-burst ()
(wl-summary-set-message-buffer-or-redisplay)
(with-current-buffer view-buf
(setq message-entity (get-text-property (point-min) 'mime-view-entity)))
- (with-current-buffer raw-buf
- (setq children (mime-entity-children message-entity)))
- (when children
+ (when message-entity
(message "Bursting...")
- (wl-summary-burst-subr children target 0)
+ (with-current-buffer raw-buf
+ (wl-summary-burst-subr message-entity target 0))
(message "Bursting...done"))
(if (elmo-folder-plugged-p target)
(elmo-folder-check target)))
(wl-summary-sync-update)))
;; internal variable.
-(defvar wl-mime-save-dir nil "Last saved directory.")
+(defvar wl-mime-save-directory nil "Last saved directory.")
;;; Yet another save method.
(defun wl-mime-save-content (entity situation)
(let ((filename (read-file-name "Save to file: "
(expand-file-name
(or (mime-entity-safe-filename entity)
".")
- (or wl-mime-save-dir
- wl-tmp-dir)))))
+ (or wl-mime-save-directory
+ wl-temporary-file-directory)))))
(while (file-directory-p filename)
(setq filename (read-file-name "Please set filename (not directory): "
filename)))
(if (file-exists-p filename)
(or (yes-or-no-p (format "File %s exists. Save anyway? " filename))
- (error "Not saved")))
- (setq wl-mime-save-dir (file-name-directory filename))
+ (message "Not saved")))
+ (setq wl-mime-save-directory (file-name-directory filename))
(mime-write-entity-content entity filename)))
;;; Yet another combine method.
(setq overviews (cdr overviews)))
(message "Not all partials found.")))))
+(defun wl-mime-display-text/plain (entity situation)
+ (let ((beg (point)))
+ (mime-display-text/plain entity situation)
+ (wl-highlight-message beg (point-max) t t)))
+
+(defun wl-mime-display-header (entity situation)
+ (let ((elmo-message-ignored-field-list
+ (if wl-message-buffer-all-header-flag
+ nil
+ wl-message-ignored-field-list))
+ (elmo-message-visible-field-list wl-message-visible-field-list)
+ (elmo-message-sorted-field-list wl-message-sort-field-list))
+ (elmo-mime-insert-header entity situation)
+ (wl-highlight-headers)))
+
;;; Setup methods.
(defun wl-mime-setup ()
(set-alist 'mime-preview-quitting-method-alist
(add-hook 'wl-message-exit-hook 'wl-message-delete-mime-out-buf)
(ctree-set-calist-strictly
+ 'mime-preview-condition
+ '((type . text) (subtype . plain)
+ (body . visible)
+ (body-presentation-method . wl-mime-display-text/plain)
+ (major-mode . wl-original-message-mode)))
+
+ (ctree-set-calist-strictly
'mime-acting-condition
'((type . message) (subtype . partial)
(method . wl-mime-combine-message/partial-pieces)
(request-partial-message-method . wl-message-request-partial)
(major-mode . wl-original-message-mode)))
+
(ctree-set-calist-strictly
'mime-acting-condition
'((mode . "extract")
mime-view-visible-field-list))
(set-alist 'mime-header-presentation-method-alist
'wl-original-message-mode
- (function elmo-mime-insert-header))
+ 'wl-mime-display-header)
;; To avoid overriding wl-draft-mode-map.
(when (boundp 'mime-setup-signature-key-alist)
(unless (assq 'wl-draft-mode mime-setup-signature-key-alist)
(setq mime-setup-signature-key-alist
(cons '(wl-draft-mode . "\C-c\C-w")
- mime-setup-signature-key-alist))))
- (add-hook 'elmo-message-text-content-inserted-hook 'wl-highlight-body-all)
- (add-hook 'elmo-message-header-inserted-hook 'wl-highlight-headers))
+ mime-setup-signature-key-alist)))))
(require 'product)
(product-provide (provide 'wl-mime) (require 'wl-version))