Newsgroups: fj.editor.emacs,fj.mail,fj.sources
Path: galaxy.trc.rwcp.or.jp!jaist-news!morioka
From: morioka@jaist.ac.jp (=?ISO-2022-JP?B?GyRCPGkyLBsoQiAbJEJDTkknGyhC?= /
 MORIOKA Tomohiko)
Subject: =?ISO-2022-JP?B?GyRCNEowVxsoQg==?= MIME header encoder/decoder:
 tiny-mime.el version 2.6 [4/5]
Content-Type: multipart/mixed; boundary="Multipart Fri Dec  3 21:25:17 1993"
Message-ID: <MORIOKA.93Dec3212517@is15e0s03.jaist.ac.jp>
Sender: news@jaist.ac.jp (News System Administrator)
X-Nsubject: $B4J0W(B MIME header encoder/decoder: tiny-mime.el version 2.6 [4/5]
Content-Transfer-Encoding: 7bit
Organization: JAIST, Hokuriku; Tatsunokuchi, Ishikawa, Japan /
 =?ISO-2022-JP?B?GyRCS0xOJkBoQzwySjNYNTs9UUJnM1gxIUJnM1gbKEIgGyRCQFAbKEI=?=
 =?ISO-2022-JP?B?GyRCQG44KUc9SH43NEMkOH1ELhsoQg==?=
Mime-Version: 1.0
Date: Fri, 3 Dec 1993 12:25:17 GMT
Lines: 269
Xref: galaxy.trc.rwcp.or.jp fj.editor.emacs:4227 fj.mail:1454 fj.sources:2918
X-originally-archived-at: http://galaxy.rwcp.or.jp/text/cgi-bin/newsarticle2?ng=fj.mail&nb=1454&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 Fri Dec  3 21:25:17 1993
Content-Type: text/plain; charset=ISO-2022-JP

  tm-gnus.el $B$r$*FO$1$7$^$9!#(B

  tm-gnue.el $B$O(B GNUS with tiny-mime patch $B$N8e7Q$G$9!#(Btm-gnus.el $B$O(B
tiny-mime patch $B$KHf$Y$F<!$N$h$&$JFCD'$r;}$C$F$$$^$9!#(B

 (1) gnus.el $B$K(B patch $B$rEv$F$kI,MW$,$J$/!"(Btm-gnus.el $B$r(B load $B$9$k$@$1(B
     $B$GNI$$!#(B

 (2) message header $B$N(B decoding $B$H(B body-part $B$N(B decoding $B$r40A4$KJ,N%(B
     $B$7$?!#(B

     (a) $B=>Mh!"(BM-t $B$K3d$jEv$F$i$l$F$$$?!"(BMIME $B$N(B decoding $BK!$K4X$9$k%H(B
         $B%0%k$O(B message header $B$r(B decode $B$9$k$+$7$J$$$+$rA*Br$9$k$@$1(B
         $B$H$J$C$?!#(B

     (b) metamail $B$r;H$C$?(B body-part $B$b4^$a$?(B full-decoding $B$O!"%-!<$r(B
         $B2!$7$?;~0l2s8B$j$N<B9T$H$7!"%b!<%I$H$O$7$J$$$3$H$K$7$?!#$3$N(B 
         MIME decoding $B5!G=$O(B Summary mode $B$N(B v $B%-!<$K3d$jEv$F$i$l$F$$(B
         $B$k!#(B

  (2) $B$O$\$/<+?H$,;H$$$K$/$$$H;W$C$F$$$?$3$H$N2~A1$K$J$C$F$$$k$D$b$j$G(B
$B$9!#$^$@(B fj $B$G$O(B text/plain $B0J30$N(B Content-Type: $B$O0lHLE*$G$O$"$j$^$;(B
$B$s$,!"2hA|$H$+2;$H$+(B anon-ftp $B$H$+$rK\3JE*$K;H$&$H!"Kh2s(B decode $B$5$l$k(B
$B$H]5F+$7$/$J$j$^$9!#(B

  tm-gnus.el $B$O!"(BGNUS 3.14.4 $B$d(B 4.1 $B0J30$N%P!<%8%g%s$N(B GNUS $B$K$bBP1~$9(B
$B$k$3$H$K$7$^$7$?!#<B:]$K$O(B 3.14.1 $B$7$+;n$7$F$$$^$;$s$,!"$H$j$"$($:!"(B
MIME $BBP1~$G$J$$%P!<%8%g%s$N(B GNUS $B$G$b(B MIME $B5!G=$,;H$($k$h$&$K$J$k$O$:(B
$B$G$9!#(B

  tm-gnus.el $B$r;H$&$K$O:GDc8B(B tm-misc.el $B$H(B tiny-mime.el $B$,I,MW$G$9!#(B
body-part $B$^$G$b4^$a$?(B MIME $B40A4BP1~$r$7$?$$>l9g$O!"(Bmetamail $B$H(B Umerin 
$B$5$s$N(B metamail.el $B$rMQ0U$7$F2<$5$$!#(B

  $B$G$O!"Nc$K$h$C$F!"$_$s$J$NBg9%$-$J(B (^_^) MIME $B7A<0$G!"0J2<$K!"%W%m%0(B
$B%i%`$r:\$;$^$9!#(BMIME $B$N(B body-part $BBP1~$NJ}$O(B MIME $B$G=hM}$7$F2<$5$$!#$=(B
$B$&$G$J$$J}$O!"(Beditor $BEy$G@Z$j=P$7$F2<$5$$!#(B

  $B!JA0$K!"(Bgnue-mime.el $B$H$$$&L>A0$GEj9F$7$^$7$?$,!"$9$G$K(B gnus-mime.el
$B$H$$$&L>A0$N(B package $B$,B8:_$9$k$i$7$$$N$G!"(Btm-gnus.el $B$KL>A0$rJQ$($^$7(B
$B$?!#!K(B

--Multipart Fri Dec  3 21:25:17 1993
Content-Type: application/octet-stream; name="tm-gnus.el"; type=elisp
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 Fri Dec  3 21:25:17 1993
Content-Type: text/plain; charset=ISO-2022-JP

$B(.!X$o$+$i$s$+$M!)!D$`$m$s!"%8%g!<%/$@$h!Y(,(,(,(,(,(,(,(,(,(,(,(,(,(/(B
$B(-(B                  $B<i2,(B $BCNI'(B (MORIOKA Tomohiko)                    $B(-(B
$B(-!!(B                                    Email: <morioka@jaist.ac.jp>$B(-(B
$B(1(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(0(B
--Multipart Fri Dec  3 21:25:17 1993--
