Newsgroups: fj.editor.emacs,fj.sources
Path: galaxy.trc.rwcp.or.jp!jaist-news!morioka
From: morioka@jaist.ac.jp (=?ISO-2022-JP?B?GyRCPGkyLBsoQiAbJEJDTkknGyhC?= /
 MORIOKA Tomohiko)
Subject: tm-gnus.el ver 1.10
Content-Type: multipart/mixed; boundary="Multipart Mon Mar  7 01:26:37 1994"
Message-ID: <MORIOKA.94Mar7012637@hare.jaist.ac.jp>
Sender: news@jaist.ac.jp (News System Administrator)
Content-Transfer-Encoding: 7bit
Organization: JAIST, Hokuriku / =?ISO-2022-JP?B?GyRCS0xOJkBoQzwySjNYGyhC?=
 =?ISO-2022-JP?B?GyRCNTs9UUJnM1gxIUJnM1gbKEI=?=
Mime-Version: 1.0
Date: Sun, 6 Mar 1994 16:26:37 GMT
Dnas-Posting-Host: hare.hare
Lines: 229
Xref: galaxy.trc.rwcp.or.jp fj.editor.emacs:4513 fj.sources:2927
X-originally-archived-at: http://galaxy.rwcp.or.jp/text/cgi-bin/newsarticle2?ng=fj.editor.emacs&nb=4513&hd=a
X-reformat-date: Mon, 18 Oct 2004 15:18:22 +0900
X-reformat-comment: Tabs were expanded into 4 column tabstops by the Galaxy's archiver. See http://katsu.watanabe.name/ancientfj/galaxy-format.html for more info.

--Multipart Mon Mar  7 01:26:37 1994
Content-Type: text/plain; charset=ISO-2022-JP

  tm-gnus.el, tm-mh-e.el $B$OA4A3(B version up $B$7$F$$$J$$$N$G!":#2s$O(B post
$B$7$J$+$C$?$N$G$9$,!"$*Ld$$9g$o$;$,B?$$$N$G!":F(B post $B$9$k$3$H$K$7$^$9!#(B

--Multipart Mon Mar  7 01:26:37 1994
Content-Type: application/octet-stream; name="tm-gnus.el"; type=emacs-lisp
Content-Transfer-Encoding: 7bit

;;;
;;; $Id: tm-gnus.el,v 1.10 1993/12/03 11:25:51 morioka Exp morioka $
;;;
;;;   A MIME extension for GNUS
;;;
;;; by Morioka Tomohiko, 1993/11/20

(require 'tm-misc)

;;; @ variables
;;; You should use these hooks instead of GNUS hooks.
;;;
(defvar gnus-mime/startup-hook nil)
(defvar gnus-mime/select-group-hook nil)
(defvar gnus-mime/summary-mode-hook nil)
(defvar gnus-mime/article-mode-hook nil)
(defvar gnus-mime/article-prepare-hook nil)

(defvar gnus-mime/message-prepare-hook-name nil)

;;; @ to decode subject in mode-line
;;
;; This function imported from gnus.el.
;;
;; New implementation in gnus 3.14.3
;;
(defun gnus-mime/article-set-mode-line ()
  "Set Article mode line string.
If you don't like it, define your own gnus-article-set-mode-line."
  (let ((maxlen 15);Maximum subject length
(subject
 (if gnus-current-headers
     (mime/decode-string (nntp-header-subject gnus-current-headers))
   "")
 ))
    ;; The value must be a string to escape %-constructs because of subject.
    (setq mode-line-buffer-identification
  (format "GNUS: %s%s %s%s%s"
  gnus-newsgroup-name
  (if gnus-current-article
      (format "/%d" gnus-current-article) "")
  (rightful-boundary-short-string subject
  (min (string-width subject)
       maxlen))
  (if (> (string-width subject) maxlen) "..." "")
  (make-string (max 0 (- 17 (string-width subject))) ? )
  )))
  (set-buffer-modified-p t))

;;; @ MIME full decode message
;;;
(defun gnus-mime/full-decode-message-old (arg)
  "MIME full-decode this article."
  (interactive "P")
  (let ((gnus-Article-prepare-hook 'metamail-buffer))
    ;; The following is a trick
    ;; to force to read the current article again.
    (setq gnus-have-all-headers (not gnus-have-all-headers))
    (gnus-summary-select-article (not gnus-have-all-headers) t)
    ))

(defun gnus-mime/full-decode-message-new (arg)
  "MIME full-decode this article."
  (interactive "P")
  (setq gnus-show-mime t)
  ;; The following is a trick to force to read the current article again.
  (setq gnus-have-all-headers (not gnus-have-all-headers))
  (gnus-summary-select-article (not gnus-have-all-headers) t)
  (setq gnus-show-mime nil))

(defun gnus-mime/decode-subjects-in-summary-buffer ()
  (run-hooks 'gnus-mime/original-select-group-hook)
  (mapcar '(lambda (header)
     (nntp-set-header-subject
      header
      (mime/decode-string (gnus-header-subject header))
      ))
  gnus-newsgroup-headers)
  (run-hooks 'gnus-mime/select-group-hook)
  )

(defun gnus-mime/set-message-prepare-hook ()
  (if mime/header-decoding-mode
      (set gnus-mime/message-prepare-hook-name
   (append-hooks
    (append-hooks gnus-mime/original-article-prepare-hook
  'mime/decode-message-header)
    gnus-mime/article-prepare-hook))
    (set gnus-mime/message-prepare-hook-name
 (append-hooks gnus-mime/original-article-prepare-hook
       gnus-mime/article-prepare-hook))
    ))

;;; @ toggle MIME header decoding mode, decoding or non decoding.
;;;
(defun gnus-mime/toggle-mime-header-decoding-mode (arg)
  "Toggle MIME header processing.
With arg, turn MIME processing on iff arg is positive."
  (interactive "P")
  (setq mime/header-decoding-mode
(if (null arg)
    (not mime/header-decoding-mode)
  arg))
  (gnus-mime/set-message-prepare-hook)
  (setq gnus-have-all-headers (not gnus-have-all-headers))
  (gnus-summary-select-article (not gnus-have-all-headers) t)
  )

(defun gnus-mime/define-key-for-mime (mode-map)
  (define-key mode-map "\et" 'gnus-mime/toggle-mime-header-decoding-mode)
  (define-key mode-map "v" 'gnus-mime/full-decode-message))

(defun gnus-mime/define-select-group-hook (h)
  (set h 'gnus-mime/decode-subjects-in-summary-buffer))

(defun gnus-mime/define-summary-mode-hook (h m)
  (set h
       (append-hooks
(append-hooks gnus-mime/original-summary-mode-hook
      (append '(lambda ())
      (list (list 'gnus-mime/define-key-for-mime m))))
gnus-mime/summary-mode-hook)))

(defun gnus-mime/define-article-mode-hook-old (h)
  (set h
       (append-hooks
(append-hooks gnus-mime/original-article-mode-hook
      '(lambda ()
 (make-local-variable 'minor-mode-alist)
 (mime/add-header-decoding-mode-to-mode-line)))
gnus-mime/article-mode-hook)))

(defun gnus-mime/define-article-mode-hook-new (h)
  (set h
       (append-hooks
(append-hooks gnus-mime/original-article-mode-hook
      'mime/add-header-decoding-mode-to-mode-line)
gnus-mime/article-mode-hook)))

(defun gnus-mime/define ()
  (run-hooks 'gnus-mime/original-startup-hook)
  (if (string-match "^GNUS [0-3]" gnus-version)
      (progn
;; definition for GNUS 3.*

(fset 'gnus-summary-select-article 'gnus-Subject-select-article)
(fset 'gnus-Article-set-mode-line 'gnus-mime/article-set-mode-line)
(setq gnus-mime/message-prepare-hook-name 'gnus-Article-prepare-hook)

(if (not (string-match "^GNUS 3\.14\.4" gnus-version))
    (progn
      (fset 'gnus-mime/full-decode-message
    'gnus-mime/full-decode-message-old)
      (gnus-mime/define-article-mode-hook-old 'gnus-Article-mode-hook)
      )
  (progn
    (fset 'gnus-mime/full-decode-message
  'gnus-mime/full-decode-message-new)
    (gnus-mime/define-article-mode-hook-new 'gnus-Article-mode-hook)
    ))
(gnus-mime/define-select-group-hook 'gnus-Select-group-hook)
(gnus-mime/define-summary-mode-hook 'gnus-Subject-mode-hook
    'gnus-Subject-mode-map)
)
    (progn
      ;; definition for GNUS 4.*
      
      (fset 'gnus-article-set-mode-line 'gnus-mime/article-set-mode-line)
      (fset 'gnus-mime/full-decode-message 'gnus-mime/full-decode-message-new)
      (setq gnus-mime/message-prepare-hook-name 'gnus-article-prepare-hook)
      
      (gnus-mime/define-select-group-hook 'gnus-select-group-hook)
      (gnus-mime/define-summary-mode-hook 'gnus-summary-mode-hook
  'gnus-summary-mode-map)
      (gnus-mime/define-article-mode-hook-new 'gnus-article-mode-hook)
      ))
  (gnus-mime/set-message-prepare-hook)
  (run-hooks 'gnus-mime/startup-hook)
  )

(cond ((boundp 'gnus-startup-hook)
       (defvar gnus-mime/original-startup-hook gnus-startup-hook))
      ((boundp 'gnus-Startup-hook)
       (defvar gnus-mime/original-startup-hook gnus-Startup-hook))
      (t (defvar gnus-mime/original-startup-hook nil)))

(cond ((boundp 'gnus-select-group-hook)
       (defvar gnus-mime/original-select-group-hook gnus-select-group-hook))
      ((boundp 'gnus-Select-group-hook)
       (defvar gnus-mime/original-select-group-hook gnus-Select-group-hook))
      (t (defvar gnus-mime/original-select-group-hook nil)))

(cond ((boundp 'gnus-summary-mode-hook)
       (defvar gnus-mime/original-summary-mode-hook gnus-summary-mode-hook))
      ((boundp 'gnus-Subject-mode-hook)
       (defvar gnus-mime/original-summary-mode-hook gnus-Subject-mode-hook))
      (t (defvar gnus-mime/original-summary-mode-hook nil)))

(cond ((boundp 'gnus-article-mode-hook)
       (defvar gnus-mime/original-article-mode-hook gnus-article-mode-hook))
      ((boundp 'gnus-Article-mode-hook)
       (defvar gnus-mime/original-article-mode-hook gnus-Article-mode-hook))
      (t (defvar gnus-mime/original-article-mode-hook nil)))

(cond ((boundp 'gnus-article-prepare-hook)
       (defvar gnus-mime/original-article-prepare-hook gnus-article-prepare-hook))
      ((boundp 'gnus-Article-prepare-hook)
       (defvar gnus-mime/original-article-prepare-hook gnus-Article-prepare-hook))
      (t (defvar gnus-mime/original-article-prepare-hook nil))) 

(setq gnus-startup-hook 'gnus-mime/define)
(setq gnus-Startup-hook gnus-startup-hook)
--Multipart Mon Mar  7 01:26:37 1994
Content-Type: text/plain; charset=ISO-2022-JP

======$B!X?M$K$O$=$l$>$l0[$J$kL4$H$=$NJ}K!$,$"$C$FA3$k$Y$-$G$"$k!Y(B======
                     $B<i2,(B $BCNI'(B (MORIOKA Tomohiko)
                     Email: <morioka@jaist.ac.jp>
--Multipart Mon Mar  7 01:26:37 1994--
