;;; emh.el --- MIME extender for mh-e
-;; Copyright (C) 1995,1996,1997 Free Software Foundation, Inc.
+;; Copyright (C) 1995,1996,1997,1998,2000 Free Software Foundation, Inc.
-;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;; Author: MORIOKA Tomohiko <tomo@m17n.org>
;; OKABE Yasuo <okabe@kudpc.kyoto-u.ac.jp>
-;; Maintainer: MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;; Maintainer: MORIOKA Tomohiko <tomo@m17n.org>
;; Created: 1993/11/21
;; Renamed: 1993/11/27 from mh-e-mime.el
;; Renamed: 1997/02/21 from tm-mh-e.el
-;; Version: $Revision: 0.10 $
;; Keywords: MH, MIME, multimedia, encoded-word, multilingual, mail
;; This file is part of emh.
;;; Code:
(require 'mh-e)
-(require 'mime-view)
(require 'alist)
+(require 'mime-view)
;;; @ version
;;;
-(defconst emh-RCS-ID
- "$Id: emh.el,v 0.10 1997-03-17 14:30:46 morioka Exp $")
-
-(defconst emh-version (get-version-string emh-RCS-ID))
+(defconst emh-version "1.14.1")
;;; @ variable
;;;
-(defvar emh-automatic-mime-preview t
- "*If non-nil, show MIME processed message.")
-
-(defvar emh-decode-encoded-word t
- "*If non-nil, decode encoded-word when it is not MIME preview mode.")
-
+(defgroup emh nil
+ "MIME Extension for mh-e"
+ :group 'mime
+ :group 'mh)
+
+(defcustom emh-automatic-mime-preview t
+ "*If non-nil, show MIME processed message."
+ :group 'emh
+ :type 'boolean)
+
+(defcustom emh-decode-encoded-word t
+ "*If non-nil, decode encoded-word when it is not MIME preview mode."
+ :group 'emh
+ :type 'boolean)
+
+(defcustom emh-icon-directory (if (fboundp 'locate-data-directory)
+ (locate-data-directory "emh")
+ (let ((icons (expand-file-name
+ "emh/icons/"
+ data-directory)))
+ (if (file-directory-p icons)
+ icons)))
+ "*Directory to load the icon files from, or nil if none."
+ :group 'emh
+ :type '(choice (const :tag "none" nil)
+ string))
;;; @ functions
;;;
+(defsubst emh-raw-buffer (folder-buffer)
+ (concat "article-" (if (bufferp folder-buffer)
+ (buffer-name folder-buffer)
+ folder-buffer)))
+
(defun mh-display-msg (msg-num folder &optional show-buffer mode)
+ "Display message number MSG-NUM of FOLDER.
+This function uses `mime-view-mode' if MODE is not nil. If MODE is
+nil, `emh-automatic-mime-preview' is used as default value."
(or mode
(setq mode emh-automatic-mime-preview)
)
(setq buffer-read-only nil)
(erase-buffer)
(if mode
- (let* ((aname (concat "article-" folder))
- (abuf (get-buffer aname))
- )
+ (let* ((aname (emh-raw-buffer folder))
+ (abuf (get-buffer aname)))
(if abuf
(progn
(set-buffer abuf)
(setq buffer-read-only nil)
- (erase-buffer)
- )
+ (erase-buffer))
(setq abuf (get-buffer-create aname))
(set-buffer abuf)
- )
- (as-binary-input-file
- (insert-file-contents msg-filename)
- ;; (goto-char (point-min))
- (while (re-search-forward "\r$" nil t)
- (replace-match "")
- )
- )
+ (set-buffer-multibyte nil))
+ (8bit-insert-encoded-file msg-filename)
(set-buffer-modified-p nil)
(setq buffer-read-only t)
(setq buffer-file-name msg-filename)
(mh-show-mode)
- (mime-view-mode nil nil nil
- aname (concat "show-" folder))
- (goto-char (point-min))
- )
+ (mime-display-message (mime-open-entity 'buffer aname)
+ (concat "show-" folder))
+ (goto-char (point-min)))
(let ((clean-message-header mh-clean-message-header)
(invisible-headers mh-invisible-headers)
- (visible-headers mh-visible-headers)
- )
+ (visible-headers mh-visible-headers))
;; 1995/9/21
;; modified by ARIURA <ariura@cc.tuat.ac.jp>
;; to support mhl.
(t
(mh-start-of-uncleaned-message)))
(if emh-decode-encoded-word
- (eword-decode-header)
- )
+ (mime-decode-header-in-buffer))
(set-buffer-modified-p nil)
(setq buffer-read-only t)
(setq buffer-file-name msg-filename)
(if (null arg)
(not emh-automatic-mime-preview)
arg))
- (save-excursion
- (set-buffer mh-show-buffer)
- (if (null emh-automatic-mime-preview)
- (if (and mime::preview/article-buffer
- (get-buffer mime::preview/article-buffer))
- (kill-buffer mime::preview/article-buffer)
- )))
+ (let ((raw-buffer (emh-raw-buffer (current-buffer))))
+ (if (get-buffer raw-buffer)
+ (kill-buffer raw-buffer)
+ ))
(mh-invalidate-show-buffer)
(mh-show (mh-get-msg-num t))
)
(defun emh-header-display ()
(interactive)
(mh-invalidate-show-buffer)
- (let ((mime-view-ignored-field-regexp "^:$")
+ (let (mime-view-ignored-field-list
+ mime-view-visible-field-list
emh-decode-encoded-word)
(mh-header-display)
))
;;; @ for mime-view
;;;
-(fset 'emh-text-decode-buffer
- (symbol-function 'mime-text-decode-buffer))
-
-(set-alist 'mime-text-decoder-alist
- 'mh-show-mode
- (function emh-text-decode-buffer))
-
-(defvar emh-content-header-filter-hook
- (if window-system
- '(emh-highlight-header)
- )
+(defvar emh-display-header-hook (if window-system '(emh-highlight-header))
"Hook for header filtering.")
(autoload 'emh-highlight-header "emh-face")
-(defun emh-content-header-filter ()
- "Header filter for mime-view.
-It is registered to variable `mime-view-content-header-filter-alist'."
- (goto-char (point-min))
- (mime-view-cut-header)
- (emh-text-decode-buffer default-mime-charset)
- (eword-decode-header)
- (run-hooks 'emh-content-header-filter-hook)
+(defun emh-header-presentation-method (entity situation)
+ (mime-insert-header entity
+ mime-view-ignored-field-list
+ mime-view-visible-field-list)
+ (run-hooks 'emh-display-header-hook)
)
-(set-alist 'mime-view-content-header-filter-alist
- 'mh-show-mode
- (function emh-content-header-filter))
+(set-alist 'mime-header-presentation-method-alist
+ 'mh-show-mode #'emh-header-presentation-method)
+
(defun emh-quitting-method ()
- (let ((win (get-buffer-window
- mime/output-buffer-name))
- (buf (current-buffer))
- )
- (if win
- (delete-window win)
- )
+ (let ((buf (current-buffer)))
+ (mime-maybe-hide-echo-buffer)
(pop-to-buffer
(let ((name (buffer-name buf)))
(substring name 5)
(mh-show (mh-get-msg-num t))
))
-(set-alist 'mime-view-quitting-method-alist
- 'mh-show-mode
- (function emh-quitting-method))
-(set-alist 'mime-view-show-summary-method
- 'mh-show-mode
- (function emh-quitting-method))
+(set-alist 'mime-preview-quitting-method-alist
+ 'mh-show-mode #'emh-quitting-method)
+
(defun emh-following-method (buf)
(save-excursion
(goto-char last)
)))
-(set-alist 'mime-view-following-method-alist
- 'mh-show-mode
- (function emh-following-method))
+(set-alist 'mime-preview-following-method-alist
+ 'mh-show-mode #'emh-following-method)
;;; @@ for mime-partial
;;;
-(call-after-loaded
- 'mime-partial
- (function
- (lambda ()
- (set-atype 'mime/content-decoding-condition
- '((type . "message/partial")
- (method . mime-article/grab-message/partials)
- (major-mode . mh-show-mode)
- (summary-buffer-exp
- . (and (or (string-match "^article-\\(.+\\)$" article-buffer)
- (string-match "^show-\\(.+\\)$" article-buffer))
- (substring article-buffer
- (match-beginning 1) (match-end 1))
- ))
- ))
- (set-alist 'mime-partial/preview-article-method-alist
- 'mh-show-mode
- (function
- (lambda ()
- (let ((emh-automatic-mime-preview t))
- (emh-show)
- ))))
- )))
+(defun emh-request-partial-message ()
+ (let ((msg-filename (mh-msg-filename (mh-get-msg-num t)))
+ (show-buffer mh-show-buffer)
+ (coding-system-for-read 'raw-text))
+ (set-buffer (get-buffer-create " *Partial Article*"))
+ (erase-buffer)
+ (setq mime-preview-buffer show-buffer)
+ (insert-file-contents msg-filename)
+ (mime-parse-buffer)
+ ))
+
+(defun emh-get-folder-buffer ()
+ (let ((buffer-name (buffer-name (current-buffer))))
+ (and (or (string-match "^article-\\(.+\\)$" buffer-name)
+ (string-match "^show-\\(.+\\)$" buffer-name))
+ (substring buffer-name
+ (match-beginning 1) (match-end 1))
+ )))
+
+(autoload 'mime-combine-message/partial-pieces-automatically
+ "mime-partial"
+ "Internal method to combine message/partial messages automatically.")
+
+(mime-add-condition
+ 'action
+ '((type . message)(subtype . partial)
+ (major-mode . mh-show-mode)
+ (method . mime-combine-message/partial-pieces-automatically)
+ (summary-buffer-exp . (emh-get-folder-buffer))
+ (request-partial-message-method . emh-request-partial-message)
+ ))
;;; @ set up
(if buf
(let ((the-buf (current-buffer)))
(switch-to-buffer buf)
- (if (and mime::article/preview-buffer
- (setq buf (get-buffer mime::article/preview-buffer))
+ (if (and mime-preview-buffer
+ (setq buf (get-buffer mime-preview-buffer))
)
(progn
(switch-to-buffer the-buf)
))))
(add-hook 'mh-before-quit-hook (function emh-summary-before-quit))
-
-
-;;; @@ for emh-comp.el
-;;;
-
-(autoload 'emh-edit-again "emh-comp"
- "Clean-up a draft or a message previously sent and make it resendable." t)
-(autoload 'emh-extract-rejected-mail "emh-comp"
- "Extract a letter returned by the mail system and make it re-editable." t)
-(autoload 'emh-forward "emh-comp"
- "Forward a message or message sequence by MIME style." t)
-
-(call-after-loaded
- 'mime-setup
- (function
- (lambda ()
- (substitute-key-definition
- 'mh-edit-again 'emh-edit-again mh-folder-mode-map)
- (substitute-key-definition
- 'mh-extract-rejected-mail 'emh-extract-rejected-mail
- mh-folder-mode-map)
- (substitute-key-definition
- 'mh-forward 'emh-forward mh-folder-mode-map)
-
- (call-after-loaded
- 'mh-comp
- (function
- (lambda ()
- (require 'emh-comp)
- ))
- 'mh-letter-mode-hook)
- )))
;;; @ for BBDB
;;;
-(call-after-loaded
- 'bbdb
- (function
- (lambda ()
- (require 'mime-bbdb)
- )))
+(eval-after-load "bbdb" '(require 'mime-bbdb))
+
+;;; @ Toolbar
+(if (and (not (featurep 'xemacs))
+ (boundp 'emacs-major-version)
+ (>= emacs-major-version 21))
+ (require 'emh-e21))
;;; @ end
;;;