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: =?ISO-2022-JP?B?GyRCQj84QDhsGyhC?= MIME header encoder/decoder
 tiny-mime.el ver 3.1 =?ISO-2022-JP?B?GyRCQGJMQD1xGyhC?=
Content-Type: multipart/mixed; boundary="Multipart Fri Feb 25 14:40:32 1994"
Message-ID: <MORIOKA.94Feb25144033@is15e0s03.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: Fri, 25 Feb 1994 05:40:33 GMT
Dnas-Posting-Host: is15e0s03
Lines: 431
Xref: galaxy.trc.rwcp.or.jp fj.editor.emacs:4453 fj.sources:2923
X-originally-archived-at: http://galaxy.rwcp.or.jp/text/cgi-bin/newsarticle2?ng=fj.editor.emacs&nb=4453&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 Feb 25 14:40:32 1994
Content-Type: text/plain; charset=ISO-2022-JP


  tiny-mime.el,v 3.0 $B$N@bL@=q$G$9!#(B

  $B$3$N(B file $B$O!"(BEmacs $B$N(B outline-mode $B$N7A<0$G=q$+$l$F$$$^$9!#(B

  $B$"$H$G%]%9%H$9$k(B ol2 $B$r;H$C$F!"(B

% ol2 < tiny-mime.ol > tiny-mime.pln

$B$H$9$k$H!"(Bplain2 $B$,M}2r$9$k7A<0$N(B plain text $B$KJQ49$5$l$^$9!#(B

--Multipart Fri Feb 25 14:40:32 1994
Content-Type: application/octet-stream; name="tiny-mime.ol"; type=emacs-outline
Content-Transfer-Encoding: 7bit

$B!X(Btiny-mime.el $B@bL@=q!Y(B
by. $B<i2,(B $BCNI'(B
1994$BG/(B2$B7n(B7$BF|(B

  $B$3$N@bL@=q$O(B ol2 $B$H(B plain2 $B$rMQ$$$k$3$H$K$h$C$F(B LaTeX $B7A<0$KJQ49$9$k(B
$B$3$H$,$G$-$^$9!#(B


* tiny-mime.el $B$H$O(B

  tiny-mime.el $B$O(B Mule, NEmacs, NEpoch $B>e$GF0:n$9$k(B MIME message
header $B$N(B encoder/decoder $B$G$9!#%*%j%8%J%k$O!"@N!"$($J$_(B $B$D$0$H$b(B $B$5$s(B
$B$,(B fj.editor.emacs $B$KEj9F$5$l$?(B MIME message header $B$N(B decoder $B$G$9!#(B

  $B8=:_$G$O!"Ev;~$N$b$N$KHf$Y!"(B

 $B!&(Bdecoding $B;~$K$*$1$k(B unfolding $B5!G=(B
 $B!&(BISO-2022-JP $B$K2C$(!"(BISO-8859-*, US-ASCII $B$N(B encoding/decoding
 $B!&(BQ-encoding $B$N(B decoding

$B$H$$$C$?5!G=$r;}$C$F$$$^$9!#(B


* tiny-mime.el $B$N%5%]!<%H$9$k(B character set, encoding

  tiny-mime.el $B$O!"<!$N(B character set, encoding $B$r%5%]!<%H$7$^$9!#(B

*** Mule

  ISO-2022-JP, US-ASCII, ISO-8859-1..9 $B$N(B encoding/decoding $B$r%5%]!<%H(B
$B$7$^$9!#(B

*** NEmacs, NEpoch

  ISO-2022-JP, US-ASCII $B$N(B encoding/decoding $B$r%5%]!<%H$7$^$9!#(B

  $B$^$?!"(BISO-8859-*$B$G$"$C$F$b!"(Bencoded-text $B$K4^$^$l$kJ8;zNs$,<B:]$K$O(B 
ASCII $B$GI=$;$kHO0O$J$iI=<($7$^$9!#(B


* tiny-mime.el $B$N4JC1$J;H$$J}(B

** decode

  tiny-mime.el $B$r(B load $B$7$F!"(Bdecode $B$7$?$$(B buffer $B>e$G!"(B

M-x mime/decode-message-header

$B$r<B9T$7$^$9!#(B

  $B$^$?!"(Bdecode $B$7$?$$(B region $B$r(B

M-x mime/decode-region

$B$G(B decode $B$9$k$3$H$,$G$-$^$9!#0zMQ$J$I$G(B body-part $B$K;D$C$?(B 
encoded-word $B$r(B decode $B$9$k$N$KJXMx$G$7$g$&!#(B

** encode

  tiny-mime.el $B$r(B load $B$7$F!"(Bencode $B$7$?$$(B buffer $B>e$G!"(B

M-x mime/encode-message-header

$B$r<B9T$7$^$9!#(B


* tiny-mime.el $B$NJQ?t(B

** mime/no-encoding-header-fields

  tiny-mime.el $B$G(B encode $B$7$J$$(B message header $B$N(B field $B$r;XDj$7$^$9!#(B

  default $B$G$O(B X-Nsubject $B$,;XDj$5$l$F$$$^$9!#(B

$BNc!'(B X-Nsubject $B$H(B Subject $B$r(B encode $B$7$J$$$h$&$K$9$k!#(B

[[E
----------------------------------------------------------------------
(setq mime/no-encoding-header-fields '("X-Nsubject" "Subject"))
----------------------------------------------------------------------
]]E

$B!NCm0U!O(B mime.el $B$HJ;MQ$9$k>l9g!"(Btiny-mime.el $B$,(B encode $B$7$J$/$F$b!"(B
mime.el $B$,(B encode $B$9$k$N$G!"(Bmime.el $B$N(B message header encoder $B$,F/$+$J(B
$B$$$h$&$K$K@_Dj$7$^$9!#(B

** mime/use-X-Nsubject

  $B$3$NJQ?t$NCM$,(B t $B$N>l9g!"(Bmessage header $B$r(B encode $B$9$k;~!"(Bencode $B$7(B
$B$?7k2L!"(BSubject $B$K(B encoded-word $B$,4^$^$l$k>l9g!"(BSubject $B$r(B decode $B$7$?(B
$B$b$N$rF~$l$?(B X-Nsubject $B$r:n@.$7$^$9!#(B

  default $B$G$O(B nil $B$,;XDj$5$l$F$$$^$9!#(B

$B!NCm0U!O(BMule $B$G(B ISO-2022-JP $B$K4^$^$l$k$b$N0J30$NJ8;z=89g$r;H$&>l9g$O!"(B
$B$3$l$r;XDj$7$J$$J}$,8-L@$G$9!#(B

** mail-header-separator

  $B4X?t(B mime/encode-message-header $B$K$*$1$k(B message header $B$H(B body part
$B$N6h@Z$j$rI=$9JQ?t$G$9!#Nc$($P!"(BGNUS $B$G$O(B "--text follows this line--" 
$B$,;XDj$5$l$^$9!#(B

$B!NCm0U!O$3$NJQ?t$NJ8;zNs$O!"(Bversion 2.6 $B$h$j@55,I=8=$G$O$J$/$J$j$^$7$?!#(B


* mailer, news reader $B$X$NAH$_9~$_(B

  $BF|>oE*$K!"L50U<1$K(B MIME header $B$rK\Mh$N8@8l$G8+$?$$$H$$$&$N$OEvA3$N(B
$BM_5a$G$9!#$=$3$G!"(Btiny-mime.el $B$r(B mailer $B$d(B news reader $B$KAH$_9~$`$H<+(B
$BF0E*$K(B MIME header $B$N(B encode/decode $B$,$G$-$^$9!#(B

  $B$^$?!"(Bmetamail $B$r;H$C$F$*$i$l$kJ}$G$b!"IaCJ$O(B message header $B$N(B 
decode $B$@$1$GNI$/$F!"3($d2;$J$I$r:F@8$9$k;~$@$1(B metamail $B$r;H$&$H$$$&(B
$B$h$&$J;H$$J}$b$G$-$^$9!#(B

  $B$3$NL\E*$r<B8=$9$k$K$O!"(Bmailer $B$d(B news reader $B$NE,@Z$J(B hook $B$K(B 
mime/decode-message-header $B$rF~$l$l$PNI$$$G$7$g$&!#$^$?!"J8;zNs$N(B 
decode $B$r$7$?$$>l9g$N$?$a$K!"(B

(mime/decode-string $BJ8;zNs(B)

$B$H$$$&4X?t$bMQ0U$7$F$$$^$9!#(B

  GNUS $B$H(B mh-e $B$K4X$7$F$O!"(Btm-gnus, tm-mh-e $B$H$$$&(B MIME $BBP1~2=%b%8%e!<(B
$B%k$rMQ0U$7$F$$$^$9!#(B

  $B$3$l$i$N!"3F(B MUA $B$KBP1~$9$k%b%8%e!<%k$r(B load $B$9$k$H(B tiny-mime.el $B$K(B
$B$h$k(B message header $B$N(B decoding $B$,%5%]!<%H$5$l!"$^$?!"(Bmetamail $B$*$h$S(B 
metamail.el $B$rJ;MQ$7$F(B MIME message $B$N(B full decoding $B$,9T$J$($^$9!#(B

  $B$3$N%Q%C%1%$%8$rMxMQ$9$k$K$O(B tm-<MUA>.el $B$H(B tm-misc.el, tiny-mime.el 
$B$,I,MW$G$9!#$5$i$K!"(BMIME message $B$N(B full decoding $B$r9T$J$&$K$O(B 
metamail $B$*$h$S(B metamail.el $B$,I,MW$G$9!#(B

** tm-gnus.el

  GNUS $B$KBP$9$k%b%8%e!<%k$G$9!#(B

  $B$3$N%b%8%e!<%k$r(B load $B$9$k$H(B

 (1) summary mode $B$G$N(B Subject $B$N(B decoding

 (2) mode-line $B$G$N(B Subject $B$N(B decoding

 (3) article mode $B$G$N(B message header $B$N(B decoding

$B$,%5%]!<%H$5$l$^$9!#(B

  summary mode $B$K(B

M-t : message header $B$N(B decoding $B$r9T$J$&$+$I$&$+$N@ZBX$((B

v   : MIME message $B$N(B full-decoding

$B$,DI2C$5$l$^$9!#(B

*** $B%$%s%9%H!<%k(B

  load-path $B$G;XDj$5$l$?%G%#%l%/%H%j!<$K(B tm-gnus.el $B$H(B tm-misc.el $B$rF~(B
$B$l$^$9!#(Bbyte-compile $B$9$k>l9g$O!"$"$i$+$8$a!"(Bgnus $B$,(B load $B$5$l$F$$$k>u(B
$BBV$G9T$J$C$F2<$5$$!#(B

  $B$=$l$+$i(B ~/.emacs $B$N(B GNUS $B$N(B hook $B$N@_Dj$r9T$J$C$F$$$kItJ,$h$j8e$K(B

[[E
----------------------------------------------------------------------
(load "tm-gnus")
----------------------------------------------------------------------
]]E

$B$rDI2C$7$^$9!#(B

  MIME message $B$N(B full-decoding $B$r9T$J$&>l9g$O(B metamail $B%Q%C%1%$%8$r%$(B
$B%s%9%H!<%k$7!"(Bload-path $B$G;XDj$5$l$?%G%#%l%/%H%j!<$K(B metamail.el $B$rF~(B
$B$l$F2<$5$$!#(B

*** $B3F<o@_Dj(B

**** article $B$r(B save $B$9$k;~(B decoding $B$7$J$$(B

  article $B$r(B save $B$9$k;~!"J]B8$5$l$k(B message $B$O$=$N;~I=<($5$l$F$$$k$h(B
$B$&$K!"$=$N;~$N(B MIME decoding mode $B$K1~$8$F(B save $B$5$l$^$9!#(B

  $B$7$+$7!"(Barticle $B$r(B save $B$9$k;~!">o$K!"(BMIME decoding $B$r9T$J$o$J$$!"@8(B
$B$N(B message $B$GJ]B8$7$?$$>l9g$O(B

(gnus-mime/toggle-mime-header-decoding-mode nil)

$B$r9T$J$C$F!"(BMIME decoding $B$r9T$J$o$J$$(B mode $B$K$7$F!"(Barticle save $B4X?t(B
$B$r<B9T$9$k$h$&$K@_Dj$7$F2<$5$$!#(B

  save $B$N<B9T8e!"(BMIME decoding mode $B$rA0$N>uBV$KLa$7$?$$>l9g$O!"(B

[[E
(let ((mm mime/header-decoding-mode))
  (gnus-mime/toggle-mime-header-decoding-mode nil)
  (article save $B4X?t(B)
  (gnus-mime/toggle-mime-header-decoding-mode mm)
  )
]]E

$B$N$h$&$K!"0l;~JQ?t$K(B MIME decoding mode $B$rJ]B8$7$F$*$1$P(B OK $B$G$9!#(B

  $B0J2<$K!"(Bmh-e $B$N(B folder $B$K(B save $B$9$k>l9g$r<($7$^$9!#(B

[[E
----------------------------------------------------------------------
(setq gnus-Startup-hook
      '(lambda ()
 (if (string-match "^GNUS [0-3]" gnus-version)
     (setq gnus-default-article-saver
   (function
    (lambda ()
      (interactive)
      (let ((mm mime/header-decoding-mode))
(gnus-mime/toggle-mime-header-decoding-mode nil)
(gnus-Subject-save-in-folder)
(gnus-mime/toggle-mime-header-decoding-mode mm)
))))
   (setq gnus-default-article-saver
 (function
    (lambda ()
      (interactive)
      (let ((mm mime/header-decoding-mode))
(gnus-mime/toggle-mime-header-decoding-mode nil)
(gnus-summary-save-in-folder)
(gnus-mime/toggle-mime-header-decoding-mode mm)
))))
   )))
----------------------------------------------------------------------
]]E

**** reply $B$9$k;~(B Subject $B$N(B encoding $BK!$r(B reply $B85$K9g$o$;$k(B

  reply $B$9$k;~!"(Breply $B85$N(B Subject $B$K(B ASCII $B0J30$NJ8;z=89g$NF~$C$F$$$k(B
$B>l9g!"(Breply $B85$,(B MIME encode $B$5$l$F$$$?$i(B encode $B$7!"$=$&$G$J$+$C$?$i(B
$B@8$GF~$l$?$$>l9g$O!"<!$N$h$&$K@_Dj$7$^$9!#(B

[[E
----------------------------------------------------------------------
(setq gnus-article-prepare-hook
      '(lambda ()
 (if (mime/exist-encoded-word-in-subject)
     (setq mime/no-encoding-header-fields '("X-Nsubject"))
   (setq mime/no-encoding-header-fields '("X-Nsubject" "Subject"))
   )))
----------------------------------------------------------------------
]]E


** tm-mh-e.el

  mh-e $B$KBP$9$k%b%8%e!<%k$G$9!#(B

  $B$3$N%b%8%e!<%k$r(B load $B$9$k$H(B folder mode $B$K(B

M-t : message header $B$N(B decoding $B$r9T$J$&$+$I$&$+$N@ZBX$((B

v   : MIME message $B$N(B full-decoding

$B$,DI2C$5$l$^$9!#(B

*** $B%$%s%9%H!<%k(B

  load-path $B$G;XDj$5$l$?%G%#%l%/%H%j!<$K(B tm-mh-e.el $B$H(B tm-misc.el $B$rF~(B
$B$l$^$9!#(Bbyte-compile $B$9$k>l9g$O!"$"$i$+$8$a!"(Bmh-e $B$,(B load $B$5$l$F$$$k>u(B
$BBV$G9T$J$C$F2<$5$$!#(B

  $B$=$l$+$i(B ~/.emacs $B$N(B mh-e $B$N(B hook $B$N@_Dj$r9T$J$C$F$$$kItJ,$h$j8e$K(B

[[E
----------------------------------------------------------------------
(load "tm-mh-e")
----------------------------------------------------------------------
]]E

$B$rDI2C$7$^$9!#(B

  MIME message $B$N(B full-decoding $B$r9T$J$&>l9g$O(B metamail $B%Q%C%1%$%8$r%$(B
$B%s%9%H!<%k$7!"(Bload-path $B$G;XDj$5$l$?%G%#%l%/%H%j!<$K(B metamail.el $B$rF~(B
$B$l$F2<$5$$!#(B

  $B$^$?!"(BMH $B$,(B MH-6.8JP2 $B$N>l9g!"(B~/.mh_profile $B$K(B

[[E
----------------------------------------------------------------------
scan:-form scan.mime
inc:-form inc.mime
repl:-form replcomps.mime
showproc: mhl
----------------------------------------------------------------------
]]E

$B$rDI2C$7$F$/$@$5$$!#$^$?!"$=$l0J30$N(B MH $B$N=hM}$O(B Emacs $B$NB&$G<h$j;E@Z(B
$B$k$N$G!"(BMH $B$N@_Dj$O$7$J$$$h$&$K$7$F$/$@$5$$!#(B


* mime.el $B$H$NJ;MQ(B

  mime.el $B$HJ;MQ$9$kNc$r<($7$^$9!#$3$NNc$N>l9g!"(BISO-2022-JP $BJ8;zNs$N(B 
encode $B$O(B tiny-mime.el $B$,9T$J$$!"$=$l0J30$NJ8;z=89g$KB0$9$kJ8;zNs$O(B 
mime.el $B$,(B encode $B$7$^$9!#(B

  $B$^$?!"(Btiny-mime.el $B$,(B encode $B$7$J$+$C$?J8;zNs$b(B mime.el $B$,(B encode $B$9(B
$B$k$N$G!"7k2LE*$K!"I,$:A4$F$N(B field $B$,(B encode $B$5$l$k$3$H$KCm0U$7$F2<$5(B
$B$$!#(B

[[E
----------------------------------------------------------------------
;;;
;;; for Edit MIME mode
;;;
(autoload 'mime-mode "mime" "Edit MIME message." t)
(autoload 'mime-convert-buffer "mime" "convert to MIME." t)
(setq mime-mode-hook '(lambda ()
(require 'mh-e)
(define-key (current-local-map)
  "\C-c\C-s" 'mh-insert-signature)
))

;; MIME header $B$N(B encoder $B$r(B tiny-mime $B$N$b$N$r;H$&!#(B
(setq mime-translate-hook 'mime/encode-message-header)

;;;
;;; for GNUS
;;;
(setq news-reply-mode-hook
      '(lambda ()
 (mime-mode)
 ))
(setq gnus-signature-file nil)

;;;
;;; for mh-e
;;;
(setq mh-letter-mode-hook
      '(lambda ()
 (mime/decode-message-header)
 (mime-mode)
 (make-local-variable 'mail-header-separator)
 (setq mail-header-separator "--------")
 ))
----------------------------------------------------------------------
]]E

** $BFCDj$N(B field $B$r(B encode $B$7$?$/$J$$>l9g(B

  $BFCDj$N(B field $B$r(B encode $B$7$?$/$J$$>l9g!"(Btiny-mime.el $B$NJQ?t(B 
mime/no-encoding-header-fields $B$K$h$C$F!"(Btiny-mime.el $B$K$h$k(B encode $B$r(B
$B$d$a$k$3$H$,$G$-$^$9$,!"(Bmime.el $B$,(B encode $B$9$k$N$G$O0UL#$,$"$j$^$;$s!#(B
$B$=$3$G!"<!$N$h$&$K@_Dj$9$k$3$H$G!"(Bmime.el $B$G$b(B encode $B$7$J$$$h$&$K$G$-(B
$B$^$9!#(B

[[E
----------------------------------------------------------------------
(if (boundp 'MULE)
    (progn
      (defun mime-header-charset-chooser-for-mule-no-encode-ISO-2022-JP (begin end)
(let ((lclist (find-charset-region begin end)))
  (cond ((null lclist) nil);US-ASCII requres no encoding.
((memq lc-ltn1 lclist)
 '("ISO-8859-1" . "Q"))
((memq lc-ltn2 lclist)
 '("ISO-8859-2" . "Q"))
((memq lc-ltn3 lclist)
 '("ISO-8859-3" . "Q"))
((memq lc-ltn4 lclist)
 '("ISO-8859-4" . "Q"))
((memq lc-crl lclist)
 '("ISO-8859-5" . "Q"))
;;((memq lc-arb lclist)
;; '("ISO-8859-6" . "Q"))
((memq lc-grk lclist)
 '("ISO-8859-7" . "Q"))
((memq lc-hbw lclist)
 '("ISO-8859-8" . "Q"))
((memq lc-ltn5 lclist)
 '("ISO-8859-9" . "Q"))
((memq lc-jp lclist) nil)
(t;Unknown charset.  It must be Mule!
 '("X-ISO-2022-JP-2" . "B"))
)))
      (setq mime-header-charset-chooser
    'mime-header-charset-chooser-for-mule-no-encode-ISO-2022-JP)
      )
  (progn
    (defun mime-header-charset-chooser-for-nemacs-no-encode-ISO-2022-JP (begin end))
    (setq mime-header-charset-chooser
  'mime-header-charset-chooser-for-nemacs-no-encode-ISO-2022-JP)
    ))
----------------------------------------------------------------------
]]E

  $BMW$9$k$K!"(BISO-2022-JP $BJ8;zNs$N(B encode $B$r(B mime.el $B$K$5$;$J$/$9$kLu$G(B
$B$9!#(B


* Mule $B$K$*$1$k2~B$(B

  Mule $B$G$O!"(B1 octet $BJ8;z=89g$H$7$F!"$H$j$"$($:!"(BISO-8859 $B%7%j!<%:$r%5(B
$B%]!<%H$7$^$7$?$,!"4X?t(B ``get-leading-character'' $B$K(B MIME $B$K$*$1$kJ8;z(B
$B=89gL>$H!"$=$l$KBP1~$9$k(B Mule $B$N(B leading character $B$r=q$-9~$a$PBP1~$G(B
$B$-$k$O$:$G$9!#(B

  $B$7$+$7$J$,$i!"(B2 octet $B$NJ8;z=89g$N>l9g!"$3$NJ}K!$G$OBP1~$G$-$^$;$s!#(B
--Multipart Fri Feb 25 14:40:32 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 Fri Feb 25 14:40:32 1994--
