;;; gnus-art-mime.el --- MIME extension for article mode of Gnus ;; Copyright (C) 1995,1996,1997 Free Software Foundation, Inc. ;; Author: MORIOKA Tomohiko ;; Created: 1996/8/6 ;; Version: ;; $Id: gnus-art-mime.el,v 1.1.1.1 1998-01-14 06:27:57 steve Exp $ ;; Keywords: news, MIME, multimedia, multilingual, encoded-word ;; This file is not part of GNU Emacs yet. ;; This program is free software; you can redistribute it and/or ;; modify it under the terms of the GNU General Public License as ;; published by the Free Software Foundation; either version 2, or (at ;; your option) any later version. ;; This program is distributed in the hope that it will be useful, but ;; WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;; General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Code: (require 'emu) (require 'gnus-mime) (require 'gnus-art) (require 'tm-view) (autoload 'mime-eword/decode-region "tm-ew-d" "Decode MIME encoded-words in region." t) (autoload 'mime/decode-message-header "tm-ew-d" "Decode MIME encoded-words in message header." t) ;;; @ encoded-word ;;; ;;; `gnus-decode-rfc1522' of Gnus works only Q-encoded iso-8859-1 ;;; encoded-words. In addition, it does not apply decoding rule of ;;; RFC 1522 and it does not do unfolding. So gnus-mime defines own ;;; function using tm-ew-d. (defun gnus-decode-encoded-word () (goto-char (point-min)) (if (re-search-forward "^[0-9]+\t" nil t) (progn (goto-char (point-min)) ;; for XOVER (while (re-search-forward "^[0-9]+\t\\([^\t]+\\)\t" nil t) (mime-eword/decode-region (match-beginning 1) (match-end 1) 'unfolding 'must-unfold) (if (re-search-forward "[^\t]+" nil t) (mime-eword/decode-region (match-beginning 0)(match-end 0) 'unfolding 'must-unfold) ) )) (mime-eword/decode-region (point-min)(point-max) t) )) (defalias 'gnus-decode-rfc1522 'gnus-decode-encoded-word) ;; In addition, latest RFC about encoded-word is RFC 2047. (^_^; ;;; @ article filter ;;; (defun gnus-article-preview-mime-message () (make-local-variable 'tm:mother-button-dispatcher) (setq tm:mother-button-dispatcher (function gnus-article-push-button)) (let ((mime-viewer/ignored-field-regexp "^:$") (default-mime-charset (save-excursion (set-buffer gnus-summary-buffer) default-mime-charset)) ) (save-window-excursion (mime/viewer-mode nil nil nil gnus-original-article-buffer gnus-article-buffer gnus-article-mode-map) )) (run-hooks 'tm-gnus/article-prepare-hook) ) (defun gnus-article-decode-encoded-word () (decode-mime-charset-region (point-min)(point-max) (save-excursion (set-buffer gnus-summary-buffer) default-mime-charset)) (mime/decode-message-header) (run-hooks 'tm-gnus/article-prepare-hook) ) ;;; @ for tm-view ;;; (defun gnus-content-header-filter () (goto-char (point-min)) (mime-preview/cut-header) (decode-mime-charset-region (point-min)(point-max) default-mime-charset) (mime/decode-message-header) ) (defun mime-viewer/quitting-method-for-gnus () (if (not gnus-show-mime) (mime-viewer/kill-buffer)) (delete-other-windows) (gnus-article-show-summary) (if (or (not gnus-show-mime) (null gnus-have-all-headers)) (gnus-summary-select-article nil t) )) (call-after-loaded 'tm-view (lambda () (set-alist 'mime-viewer/content-header-filter-alist 'gnus-original-article-mode (function gnus-content-header-filter)) (set-alist 'mime-viewer/code-converter-alist 'gnus-original-article-mode (function mime-charset/decode-buffer)) (set-alist 'mime-viewer/quitting-method-alist 'gnus-original-article-mode (function mime-viewer/quitting-method-for-gnus)) (set-alist 'mime-viewer/show-summary-method 'gnus-original-article-mode (function mime-viewer/quitting-method-for-gnus)) )) ;;; @ for BBDB ;;; (call-after-loaded 'bbdb (function (lambda () (require 'tm-bbdb) ))) (autoload 'tm-bbdb/update-record "tm-bbdb") (defun tm-gnus/bbdb-setup () (if (and (boundp 'gnus-article-prepare-hook) (memq 'bbdb/gnus-update-record gnus-article-prepare-hook) ) (progn (remove-hook 'gnus-article-prepare-hook 'bbdb/gnus-update-record) (add-hook 'gnus-article-display-hook 'tm-bbdb/update-record) ))) (add-hook 'gnus-startup-hook 'tm-gnus/bbdb-setup t) (tm-gnus/bbdb-setup) ;;; @ end ;;; (provide 'gnus-art-mime) ;;; gnus-art-mime.el ends here