--- /dev/null
+-*- mode: text; fill-column: 70; -*-
+
+---
+ If BBDB is used then, bbdb-gnus.elc can't be shared with them before
+Semi-gnus 6.8.X. It is necessary to byte-compile it again.
+
+;; It is a simple way that only bbdb-gnus.el is byte-compiled after
+;; gnus starts.
+
+---
+gnus-bbdb.el
+
+ This is the BBDB API module for Semi-gnus. `mime-bbdb' should not be
+necessary for Semi-gnus, if that module were used.
+
+ You need FLIM 1.11.3 or later.
+
+ If you are using bbdb-auto-notes-hook, the patch listed at the end
+of this file should be applied. If not, it might not.
+
+ EXAMPLE:
+
+;; You need to set nothing for `mime-bbdb'.
+;(setq mime-bbdb/use-mail-extr nil)
+;(eval-after-load "mail-extr" '(require 'mime-bbdb))
+
+(require 'bbdb)
+(require 'gnus-bbdb)
+(bbdb-initialize 'sc) ;; 'Gnus or 'gnus should be deleted.
+(add-hook 'gnus-startup-hook 'gnus-bbdb-insinuate)
+
+ If you would like to decode the quoted encoded words forcibly, even
+though FLIM does not decode them, put the following lines in your
+.gnus file.
+
+(setq gnus-bbdb/decode-field-body-function
+ (function
+ (lambda (field-body field-name)
+ (eword-decode-string field-body))))
+
+---
+ This is a patch for bbdb.el / bbdb-hooks.el.
+
+------ cut here ------ cut here ------ cut here ------ cut here ------
+--- bbdb-hooks.el~ Tue Oct 13 03:13:50 1998
++++ bbdb-hooks.el Fri Oct 30 17:05:53 1998
+@@ -352,12 +352,22 @@
+ (marker (bbdb-header-start))
+ field pairs fieldval ; do all bindings here for speed
+ regexp string notes-field-name notes
+- replace-p replace-or-add-msg)
++ replace-p replace-or-add-msg
++ extract-field-value-funtion)
+ (set-buffer (marker-buffer marker))
+ (save-restriction
+- (widen)
+- (goto-char marker)
+- (if (and (setq fieldval (bbdb-extract-field-value "From"))
++ (let ((function-list bbdb-extract-field-value-function-list)
++ function)
++ (or (progn
++ (while (and (not extract-field-value-funtion)
++ (setq function (pop function-list)))
++ (setq extract-field-value-funtion (funcall function)))
++ extract-field-value-funtion)
++ (progn
++ (widen)
++ (goto-char marker)
++ (setq extract-field-value-funtion 'bbdb-extract-field-value))))
++ (if (and (setq fieldval (funcall extract-field-value-funtion "From"))
+ (string-match (bbdb-user-mail-names) fieldval))
+ ;; Don't do anything if this message is from us. Note that we have
+ ;; to look at the message instead of the record, because the record
+@@ -368,7 +378,7 @@
+ (goto-char marker)
+ (setq field (car (car ignore-all))
+ regexp (cdr (car ignore-all))
+- fieldval (bbdb-extract-field-value field))
++ fieldval (funcall extract-field-value-funtion field))
+ (if (and fieldval
+ (string-match regexp fieldval))
+ (setq ignore t)
+@@ -382,7 +392,7 @@
+ pairs (cdr (car rest)) ; (REGEXP . STRING) or
+ ; (REGEXP FIELD-NAME STRING) or
+ ; (REGEXP FIELD-NAME STRING REPLACE-P)
+- fieldval (bbdb-extract-field-value field)) ; e.g., Subject line
++ fieldval (funcall extract-field-value-funtion field)) ; e.g., Subject line
+ (if fieldval
+ (while pairs
+ (setq regexp (car (car pairs))
+--- bbdb.el~ Tue Oct 13 03:14:55 1998
++++ bbdb.el Fri Oct 30 17:05:53 1998
+@@ -620,6 +620,7 @@
+ (defvar bbdb-showing-changed-ones nil)
+ (defvar bbdb-modified-p nil)
+ (defvar bbdb-elided-display nil)
++(defvar bbdb-extract-field-value-function-list nil)
+
+ (defvar bbdb-debug t)
+ (defmacro bbdb-debug (&rest body)
+------ cut here ------ cut here ------ cut here ------ cut here ------
+
+---
--- /dev/null
+-*- mode: text; fill-column: 70; -*-
+
+---
+BBDB \e$B$r;HMQ$5$l$F$$$kJ}$O!"\e(B bbdb-gnus.elc \e$B$r\e(B Semi-gnus 6.8.X \e$B0JA0$N$b\e(B
+\e$B$N$H6&M-$9$k$3$H$O$G$-$^$;$s!#I,$:!"\e(B byte-compile \e$B$7D>$7$F$/$@$5$$!#\e(B
+
+;; gnus \e$B$r5/F0$7$?$"$H$G!"\e(B bbdb-gnus.el \e$B$N$_$r\e(B byte-compile \e$B$9$k$H$$$&\e(B
+;; \e$B$N$,$*<j7Z$G$9!#\e(B :-)
+
+---
+gnus-bbdb.el
+
+Semi-gnus \e$B$KFC2=$7$?\e(B BBDB API \e$B%b%8%e!<%k$G$9!#$3$N%b%8%e!<%k$r;HMQ$9$k\e(B
+\e$B$3$H$K$h$C$F!"\e(B Semi-gnus \e$B$G;HMQ$9$k>l9g$K$O\e(B mime-bbdb \e$B$,ITMW$K$J$j$^$9!#\e(B
+
+1.11.3 \e$B0J9_$N\e(B FLIM \e$B$,I,MW$G$9!#\e(B
+
+bbdb-auto-notes-hook \e$B$r;HMQ$7$F$$$J$$J}$K$OITMW$G$9$,!";HMQ$7$F$$$kJ}\e(B
+\e$B$O\e(B bbdb.el / bbdb-hooks.el \e$B$K$3$N%U%!%$%k$N:G8e$K$"$k\e(B patch \e$B$r$"$F$kI,\e(B
+\e$BMW$,$"$j$^$9!#\e(B
+
+\e$B@_DjNc\e(B:
+
+;; mime-bbdb \e$B$K4X$9$k@_Dj$OITMW$G$9!#\e(B
+;(setq mime-bbdb/use-mail-extr nil)
+;(eval-after-load "mail-extr" '(require 'mime-bbdb))
+
+(require 'bbdb)
+(require 'gnus-bbdb)
+(bbdb-initialize 'sc) ;; 'gnus / 'Gnus \e$B$O$O$:$7$F$/$@$5$$!#\e(B
+(add-hook 'gnus-startup-hook 'gnus-bbdb-insinuate)
+
+FLIM \e$B$G$O\e(B quote \e$B$5$l$?\e(B eword encoded word \e$B$O\e(B decode \e$B$5$l$^$;$s$,!"$=$l\e(B
+\e$B$r6/@)E*$K\e(B decode \e$B$7$?$$>l9g$K$O!"<!$N@_Dj$r2C$($F$/$@$5$$!#\e(B
+
+(setq gnus-bbdb/decode-field-body-function
+ (function
+ (lambda (field-body field-name)
+ (eword-decode-string field-body))))
+
+---
+\e$B0J2<$O\e(B bbdb.el / bbdb-hooks.el \e$B$K$"$F$k\e(B patch \e$B$G$9!#\e(B
+
+------ cut here ------ cut here ------ cut here ------ cut here ------
+--- bbdb-hooks.el~ Tue Oct 13 03:13:50 1998
++++ bbdb-hooks.el Fri Oct 30 17:05:53 1998
+@@ -352,12 +352,22 @@
+ (marker (bbdb-header-start))
+ field pairs fieldval ; do all bindings here for speed
+ regexp string notes-field-name notes
+- replace-p replace-or-add-msg)
++ replace-p replace-or-add-msg
++ extract-field-value-funtion)
+ (set-buffer (marker-buffer marker))
+ (save-restriction
+- (widen)
+- (goto-char marker)
+- (if (and (setq fieldval (bbdb-extract-field-value "From"))
++ (let ((function-list bbdb-extract-field-value-function-list)
++ function)
++ (or (progn
++ (while (and (not extract-field-value-funtion)
++ (setq function (pop function-list)))
++ (setq extract-field-value-funtion (funcall function)))
++ extract-field-value-funtion)
++ (progn
++ (widen)
++ (goto-char marker)
++ (setq extract-field-value-funtion 'bbdb-extract-field-value))))
++ (if (and (setq fieldval (funcall extract-field-value-funtion "From"))
+ (string-match (bbdb-user-mail-names) fieldval))
+ ;; Don't do anything if this message is from us. Note that we have
+ ;; to look at the message instead of the record, because the record
+@@ -368,7 +378,7 @@
+ (goto-char marker)
+ (setq field (car (car ignore-all))
+ regexp (cdr (car ignore-all))
+- fieldval (bbdb-extract-field-value field))
++ fieldval (funcall extract-field-value-funtion field))
+ (if (and fieldval
+ (string-match regexp fieldval))
+ (setq ignore t)
+@@ -382,7 +392,7 @@
+ pairs (cdr (car rest)) ; (REGEXP . STRING) or
+ ; (REGEXP FIELD-NAME STRING) or
+ ; (REGEXP FIELD-NAME STRING REPLACE-P)
+- fieldval (bbdb-extract-field-value field)) ; e.g., Subject line
++ fieldval (funcall extract-field-value-funtion field)) ; e.g., Subject line
+ (if fieldval
+ (while pairs
+ (setq regexp (car (car pairs))
+--- bbdb.el~ Tue Oct 13 03:14:55 1998
++++ bbdb.el Fri Oct 30 17:05:53 1998
+@@ -620,6 +620,7 @@
+ (defvar bbdb-showing-changed-ones nil)
+ (defvar bbdb-modified-p nil)
+ (defvar bbdb-elided-display nil)
++(defvar bbdb-extract-field-value-function-list nil)
+
+ (defvar bbdb-debug t)
+ (defmacro bbdb-debug (&rest body)
+------ cut here ------ cut here ------ cut here ------ cut here ------
+
+---
--- /dev/null
+README.branch --- description of branches and tags. (DRAFT)
+========================================================================
+
+Semi-gnus revision tree (1998-07-16)
+
+ vendor personal main trunk public
+ branch branches branches
+------------------------------------------------------------------------
+qGnus 0.?? ------> Semi-gnus 6.0.0
+ : :
+ : himi <-- 6.0.7
+ : ichikawa <-- 6.0.8
+ : akr <-- 6.2.3
+ : shuhei-k <-- 6.3.1
+Gnus 5.6.11 ------> 6.3.3
+ : 6.4.0 (for SEMI 1.5)
+ : (6.4.?)------> for SEMI 1.5
+ : | \
+ : | \
+(Synch with original Gnus | ---> for SEMI 1.6
+ was done many times, but (6.4.?)------> 6.5 (for SEMI 1.7)
+ we don't include them.) | / 6.5.0
+ : | (?)/
+ : | <---
+ : (6.5.?)------> 6.6 (for SEMI 1.8, FLIM 1.7)
+ : | \ 6.6.0 stable branch
+ : | \
+ : | ---> 6.7 (for SEMI 1.8, FLIM 1.7)
+ : | 6.7.0 develop branch
+ : sync | :
+Gnus 5.6.22 ------> | feedback 6.7.7
+ : (6.7.8)<------ 6.7.8
+ : | \
+ : | \
+ : | ---> 6.8 (for SEMI 1.8, FLIM 1.8)
+ : sync | 6.8.0
+Gnus 5.6.24 ------> | 6.8.1
+ : : :
+ : : :
+========================================================================
+
+The Vendor Branch
+
+ Original version of Gnus.
+ Each version has a tag of the form "qgnus-0_XY" or "gnus-5_X_Y" or
+ "pgnus-0_XY".
+
+ The branch tag for the vendor branch is "larsi".
+
+The Main Trunk
+
+ Semi-gnus was developed on the main trunk until current branch-
+ management plan (See "Public Branches" below) was introduced.
+ Each version has a tag of the form "gnus-6_N2_N3". (0 < N2 < 5)
+
+Public Branches
+
+ Current main stream of Semi-gnus development.
+
+ [Goal and policy of public branches here ???]
+
+ Each branch has a tag of the form "gnus-N1_N2" and each version
+ has a tag of the form "gnus-N1_N2_N3".
+
+ N1, N2, and N3 are changed by the following rules.
+
+ N1 will be incremented if any fundamental architecture change is
+ made. Of cource, in this case, N2 and N3 will be reset to zero.
+
+ N2 will be incremented and new branch will be made if any "major
+ changes" are made. "major changes" include API changes, major
+ version up of original Gnus, or synchronization with original Gnus
+ which requires design decision.
+
+ N3 will be incremented if some "minor changes" are made. "minor
+ changes" include small bug fix or synchronization with original Gnus
+ without design decision.
+
+ The following branch tags are currently available.
+
+ for-semi-1_5 Semi-gnus for SEMI 1.5 API
+ for-semi-1_6 Semi-gnus for SEMI 1.6 API
+ gnus-6_5 Semi-gnus for SEMI 1.7 API
+ gnus-6_6 Semi-gnus for SEMI 1.8, FLIM 1.7 API (stable)
+ gnus-6_7 Semi-gnus for SEMI 1.8, FLIM 1.7 API (develop)
+ gnus-6_8 Semi-gnus for SEMI 1.8, FLIM 1.8 API
+
+Personal Branches
+
+ Some Semi-gnus developers have their own "personal branches".
+ Each personal branch may have its own goal and/or policy.
+ See README.${tag} (if exists) for information of each branch.
+
+ The following branch tags are curretly available.
+
+ himi Owner: Miyashita Hisashi
+ ichikawa Owner: Tatsuya Ichikawa
+ akr Owner: Tanaka Akira
+ shuhei-k Owner: Shuhei KOBAYASHI
+
+"semi-gnus" Tag
+
+ Was assigned to the latest stable version.
+ Currently not maintained. (XXX: ???)
+
+"for-semi-N1_N2" Tags
+
+ Were assigned to corresponding version of SEMI API N1.N2.
+ We will not use this convention any longer. (XXX: ???)
--- /dev/null
+README.branch.ja --- branch \e$B$H\e(B tag \e$B$N@bL@\e(B (\e$BAp9F\e(B)
+========================================================================
+
+Semi-gnus revision tree (1998-07-16)
+
+ vendor personal main trunk public
+ branch branches branches
+------------------------------------------------------------------------
+qGnus 0.?? ------> Semi-gnus 6.0.0
+ : :
+ : himi <-- 6.0.7
+ : ichikawa <-- 6.0.8
+ : akr <-- 6.2.3
+ : shuhei-k <-- 6.3.1
+Gnus 5.6.11 ------> 6.3.3
+ : 6.4.0 (for SEMI 1.5)
+ : (6.4.?)------> for SEMI 1.5
+ : | \
+ : | \
+(\e$B85$N\e(B Gnus \e$B$H$N\e(B Sync \e$B$O2?EY\e(B | ---> for SEMI 1.6
+ \e$B$b$J$5$l$F$$$^$9$,!"$3$3$K\e(B (6.4.?)------> 6.5 (for SEMI 1.7)
+ \e$B$O=q$-$^$;$s!#\e(B) | / 6.5.0
+ : | (?)/
+ : | <---
+ : (6.5.?)------> 6.6 (for SEMI 1.8, FLIM 1.7)
+ : | \ 6.6.0 stable branch
+ : | \
+ : | ---> 6.7 (for SEMI 1.8, FLIM 1.7)
+ : | 6.7.0 develop branch
+ : sync | :
+Gnus 5.6.22 ------> | feedback 6.7.7
+ : (6.7.8)<------ 6.7.8
+ : | \
+ : | \
+ : | ---> 6.8 (for SEMI 1.8, FLIM 1.8)
+ : sync | 6.8.0
+Gnus 5.6.24 ------> | 6.8.1
+ : : :
+ : : :
+========================================================================
+
+The Vendor Branch
+
+ Gnus \e$B$N85$N%P!<%8%g%s$G$9!#\e(B
+ \e$B$=$l$>$l$N%P!<%8%g%s$O\e(B "qgnus-0_XY" \e$B$d\e(B "gnus-5_X_Y" \e$B$d\e(B
+ "pgnus-0_XY" \e$B$H$$$&7A<0$N\e(B tag \e$B$,IU$$$F$$$^$9!#\e(B
+
+ vendor branch \e$B$N\e(B branch tag \e$B$O\e(B "larsi" \e$B$G$9!#\e(B
+
+The Main Trunk
+
+ \e$B8=:_$N\e(B branch \e$B4IM}7W2h$,F3F~$5$l$k$^$G!"\e(BSemi-gnus \e$B$O\e(B main trunk \e$B$G\e(B
+ \e$B3+H/$5$l$F$$$^$7$?\e(B (\e$B2<$N\e(B "Public Branches" \e$B$rFI$s$G$/$@$5$$\e(B)\e$B!#$=$l\e(B
+ \e$B$>$l$N%P!<%8%g%s$O\e(B "gnus-6_N2_N3" \e$B$H$$$&7A<0$G$9!#\e(B(0 < N2 < 5)
+
+Public Branches
+
+ \e$B8=:_$N\e(B Semi-gnus \e$B3+H/$N<gN.$G$9!#\e(B
+
+ [public branch \e$B$NL\I8$H<g5A$r=q$/\e(B ???]
+
+ \e$B$=$l$>$l$N\e(B branch \e$B$O\e(B "gnus-N1_N2" \e$B$H$$$&7A<0$N\e(B tag \e$B$,IU$$$F$$$F!"\e(B
+ \e$B$=$l$>$l$N%P!<%8%g%s$O\e(B "gnus-N1_N2_N3" \e$B$H$$$&7A<0$N\e(B tag \e$B$,IU$$$F$$\e(B
+ \e$B$^$9!#\e(B
+
+ N1, N2, N3 \e$B$O0J2<$N5,B'$K=>$C$FJQ99$5$l$^$9!#\e(B
+
+ N1 \e$B$O4pACE*$J;EAH$_$NJQ99$,$J$5$l$?$H$-$KA}$d$5$l$^$9!#$b$A$m$s!"\e(B
+ \e$B$3$N>l9g$O\e(B N2 \e$B$H\e(B N3 \e$B$O\e(B 0 \e$B$K$J$j$^$9!#\e(B
+
+ N2 \e$B$O?7$7$$\e(B branch \e$B$,\e(B "\e$B<g$JJQ99\e(B" \e$B$r9T$C$?$H$-$KA}$d$5$l$^$9!#\e(B "\e$B<g\e(B
+ \e$B$JJQ99\e(B" \e$B$H$O!"\e(BAPI \e$B$NJQ99!"85$N\e(B Gnus \e$B$NBg$-$J99?7!"@_7W$N7hDj$rH<$&\e(B
+ \e$B$h$&$J85$N\e(B Gnus \e$B$H$NF14|$J$I$G$9!#\e(B
+
+ N3 \e$B$O\e(B "\e$B>.$5$JJQ99\e(B" \e$B$,$J$5$l$?$H$-$KA}$d$5$l$^$9!#\e(B"\e$B>.$5$JJQ99\e(B" \e$B$O>.\e(B
+ \e$B$5$J%P%0=$@5$d!"@_7W$N7hDj$rH<$o$J$$85$N\e(B Gnus \e$B$H$NF14|$J$I$G$9!#\e(B
+
+ \e$B8=:_$O0J2<$N\e(B branch tag \e$B$,;HMQ2DG=$G$9!#\e(B
+ The following branch tags are currently available.
+
+ for-semi-1_5 Semi-gnus for SEMI 1.5 API
+ for-semi-1_6 Semi-gnus for SEMI 1.6 API
+ gnus-6_5 Semi-gnus for SEMI 1.7 API
+ gnus-6_6 Semi-gnus for SEMI 1.8, FLIM 1.7 API (stable)
+ gnus-6_7 Semi-gnus for SEMI 1.8, FLIM 1.7 API (develop)
+ gnus-6_8 Semi-gnus for SEMI 1.8, FLIM 1.8 API
+
+Personal Branches
+
+ Semi-gnus \e$B3+H/<T$NCf$K$O<+J,$N\e(B "personal branch" \e$B$r;}$C$F$$$k?M$b\e(B
+ \e$B$$$^$9!#$=$l$>$l$N\e(B personal branch \e$B$OL\I8!"<g5A$r;}$C$F$$$k$G$7$g\e(B
+ \e$B$&!#$=$l$>$l$N\e(B branch \e$B$N>pJs$O\e(B (\e$BB8:_$9$k$J$i$P!"\e(B) README.${tag} \e$B$r\e(B
+ \e$BFI$s$G$/$@$5$$!#\e(B
+
+ \e$B0J2<$N\e(B branch tag \e$B$,8=:_;HMQ2DG=$G$9!#\e(B
+
+ himi Owner: Miyashita Hisashi
+ ichikawa Owner: Tatsuya Ichikawa
+ akr Owner: Tanaka Akira
+ shuhei-k Owner: Shuhei KOBAYASHI
+
+"semi-gnus" Tag
+
+ \e$B$3$l$O:G?7$N0BDjHG$K3d$jEv$F$i$l$F$$$^$7$?!#8=:_$O0];}$5$l$F$$$^$;\e(B
+ \e$B$s!#\e(B(XXX: ???)
+
+"for-semi-N1_N2" Tags
+
+ \e$B$3$l$O\e(B SEMI API N1.N2 \e$B$KBP1~$9$k%P!<%8%g%s$K3d$jEv$F$i$l$F$$$^$7$?!#\e(B
+ \e$B$3$N=,47$O$b$&;H$o$l$^$;$s!#\e(B(XXX: ???)
Gnus to use it, and you must not use gnus-mime for SEMI.
It requires SEMI package, so please get and install SEMI package
-before to install it.
-
+before to install it. You can get SEMI from
+ftp://ftp.jaist.ac.jp/pub/elisp/semi/
+Required environment for SEMI is written in README.en of SEMI package.
How to get? (via CVS)
=====================
-(0) cvs login
+(0) cvs login (first time only)
% cvs -d :pserver:anonymous@chamonix.jaist.ac.jp:/hare/cvs/root \
login
himi himi branch
ichikawa ichikawa branch
+ Based on pGnus.
akr akr branch
shuhei-k shuhei-k branch
Mail-Followup-To/Mail-Reply-To, gnus-cache fix.
+For more detailed information, please read README.branch.
+
How to get? (via ftp)
=====================
semi-gnus-ja-help@meadow.scphys.kyoto-u.ac.jp (Japanese)
In addition, we need developers. If you would like to develop it,
-please send mail to cvs@chamonix.jaist.ac.jp.
+please send mail to cvs@chamonix.jaist.ac.jp with your account name
+and UNIX /etc/passwd style crypted password.
--- /dev/null
+\e$B$3$N%Q%C%1!<%8$K$O\e(B Semi-gnus \e$B$,F~$C$F$$$^$9!#\e(B
+
+Semi-gnus \e$B$H$O!)\e(B
+==================
+
+ Semi-gnus \e$B$O\e(B SEMI \e$B$N$?$a$N\e(B gnus-mime \e$B$H\e(B Gnus \e$B$NAH9g$;$rCV$-49$($k$b\e(B
+\e$B$N$G$9!#\e(BGnus \e$B$H\e(B gnus-mime \e$B$NA4$F$N5!G=$r;}$C$F$$$^$9$N$G!"$3$l$r;HMQ$9\e(B
+\e$B$k$?$a$K\e(B Gnus \e$B$r%$%s%9%H!<%k$9$kI,MW$O$J$/!"\e(BSEMI \e$B$N$?$a$N\e(B gnus-mime \e$B$O\e(B
+\e$B;HMQ$7$F$O$$$1$^$;$s!#\e(B
+
+ SEMI \e$B%Q%C%1!<%8$rMW5a$7$^$9$N$G!"%$%s%9%H!<%k$9$kA0$K\e(B SEMI \e$B%Q%C%1!<\e(B
+\e$B%8$r%$%s%9%H!<%k$7$F$/$@$5$$!#\e(BSEMI \e$B$O\e(B
+ftp://ftp.jaist.ac.jp/pub/elisp/semi/ \e$B$+$i<hF@$9$k$3$H$,$G$-$^$9!#I,MW\e(B
+\e$B$J4D6-$O\e(B SEMI \e$B$N\e(B README.ja \e$B$r;2>H$7$F$/$@$5$$!#\e(B
+
+
+\e$B<hF@J}K!\e(B (CVS)
+=====================
+
+(0) cvs login (\e$B=i2s$N$_\e(B)
+
+ % cvs -d :pserver:anonymous@chamonix.jaist.ac.jp:/hare/cvs/root \
+ login
+
+ CVS password: [CR] # \e$B6uJ8;zNs\e(B
+
+(1) checkout
+
+ % cvs -d :pserver:anonymous@chamonix.jaist.ac.jp:/hare/cvs/root \
+ checkout [-r TAG] gnus
+
+(2) compile
+
+ % cd gnus
+ % make EMACS=<file name of your emacs>
+
+(3) update
+
+ % cvs update [-r TAG]
+
+\e$B<g$J%?%0$O0J2<$N$h$&$K$J$C$F$$$^$9\e(B:
+
+ semi-gnus \e$B:G?7$N0BDjHG$K3d$jEv$F$i$l$^$9!#Hs>o$KJ]<iE*$G\e(B
+ \e$B$9!#\e(B(\e$B8=:_$O;HMQ$5$l$F$$$^$;$s!#\e(B)
+
+ for-semi-N1_N2 SEMI API N1.N2 (N1 \e$B$H\e(B N2 \e$B$O<+A3?t\e(B) \e$B$KBP1~$7$F\e(B
+ \e$B:G?7$N0BDjHG$K3d$jEv$F$i$l$^$9!#\e(B(\e$BNc\e(B
+ `for-semi-1_3' \e$B$O\e(B SEMI API 1.3 \e$BMQ$G$9!#\e(B)
+ (\e$B8=:_$O;HMQ$5$l$F$$$^$;$s!#\e(B)
+
+ gnus-N1_N2_N3 gnus(Gnus) N1.N2.N3 \e$B$K3d$jEv$F$i$l$^$9!#\e(B
+ (\e$BNc\e(B `gnus-6_2_1' \e$B$O\e(B gnus 6.2.1 \e$B$G$9!#\e(B)
+
+ larsi \e$B85$N\e(B Gnus
+
+ himi himi branch
+
+ ichikawa ichikawa branch
+ Based on pGnus
+
+ akr akr branch
+
+ shuhei-k shuhei-k branch
+ Mail-Followup-To/Mail-Reply-To, gnus-cache fix.
+
+\e$B>\$7$/$O!"\e(BREADME.branch.ja \e$B$r;2>H$7$F$/$@$5$$!#\e(B
+
+
+\e$B<hF@J}K!\e(B (ftp)
+=====================
+
+ \e$B$[$\KhF|$N\e(B snapshot \e$B$,\e(B
+
+ ftp://ftp.jaist.ac.jp/pub/GNU/elisp/semi-gnus/
+
+ \e$B$+$i<hF@2DG=$G$9!#\e(B
+
+ \e$BCm0U\e(B: \e$B$3$l$i$N\e(B snapshot \e$B$O$=$NF|$N4V$K\e(B repository \e$B$K2?$+JQ99$,$"$C$?\e(B
+ \e$B$H$-$K<+F0E*$K:n@.$5$l!"IaDL$O%F%9%H$5$l$F$$$^$;$s!#\e(B
+
+
+\e$B3+H/$X$N;22CJ}K!\e(B
+=======================
+
+ Gnus \e$B$N%P%0$r8+$D$1$?$H$-$O!"\e(B`M-x gnus-bug' \e$B$H$7$F!"\e(BGnus \e$B$N0];}<T$K\e(B
+ \e$B%P%0Js9p$rAw$C$F$/$@$5$$!#\e(B
+
+ Semi-gnus \e$B$N%P%0$r8+$D$1$?$+!"\e(BGnus \e$B$N%P%0$G$"$k$+$I$&$+$,J,$+$i$J$$\e(B
+ \e$B$H$-$O!"%P%0Js9p$r\e(B Semi-gnus \e$B%a!<%j%s%0%j%9%H$KAw$C$F$/$@$5$$\e(B:
+
+ semi-gnus-en@meadow.scphys.kyoto-u.ac.jp (\e$B1Q8l\e(B)
+ semi-gnus-ja@meadow.scphys.kyoto-u.ac.jp (\e$BF|K\8l\e(B)
+
+Semi-gnus \e$B$N2~A1$N$?$a$NDs0F$b4?7^$5$l$^$9!#\e(B
+
+ Semi-gnus ML \e$B$G$O!"\e(BSemi-gnus \e$B4XO"$N%P%0$rJs9p$7$?$j!":G?7$N\e(B
+ Semi-gnus \e$B$N%j%j!<%9$r<hF@$7$?$j!"\e(BSemi-gnus \e$B$N>-Mh$N3HD%$r5DO@$7$?$j\e(B
+ \e$B$9$k$3$H$,$G$-$^$9!#\e(BSemi-gnus ML \e$B$K;22C$9$k$?$a$K$O\e(B
+
+ semi-gnus-en-help@meadow.scphys.kyoto-u.ac.jp (\e$B1Q8l\e(B)
+ semi-gnus-ja-help@meadow.scphys.kyoto-u.ac.jp (\e$BF|K\8l\e(B)
+
+ \e$B$K6u$N%a!<%k$rAw$C$F$/$@$5$$!#\e(B
+
+ \e$B2C$($F!"3+H/<T$rI,MW$H$7$F$$$^$9!#3+H/$K;22C$7$?$$>l9g$O!"\e(B
+cvs@chamonix.jaist.ac.jp \e$B$K%"%+%&%s%HL>$H\e(B UNIX \e$B$N\e(B /etc/passwd \e$B$NMM<0$G\e(B
+\e$B0E9f2=$5$l$?%Q%9%o!<%I$r%a!<%k$rAw$C$F$/$@$5$$!#\e(B
*1998/10/02-2 \e$B@_Dj%U%!%$%k72FI$_9~$_;~$N\e(B coding-system \e$BLdBj\e(B
----------- \e$BL$BP:v\e(B -----------
-
+
*1998/09/25-1 message/partial \e$B$N7k9g5!G=$N2~NI\e(B
Subject \e$B$G\e(B summary \e$B$r8!:w$9$kBe$o$j$K!"\e(Bgnus-newsgroup-headers \e$B$J\e(B
Offline \e$B;~$K%a%C%;!<%8$r:n@.$7$?>l9g!"\e(B Message-Id \e$B$N7A<0$,ITEv$J$b\e(B
\e$B$N$K$J$C$F$7$^$&!#\e(B
-*1998/10/02-5 Edit article \e$B;~$K%a%C%;!<%8$rGK2u$9$kLdBj\e(B
-
- nnml \e$BEy$GJ]B8$7$F$"$k%a%C%;!<%8$G\e(B edit article \e$B$r;HMQ$7$FJT=8$r9T$C\e(B
- \e$B$?>l9g!"\e(B MIME entity \e$B$rGK2u$7$F$7$^$&!#\e(B
-
*1998/10/02-6 smtpmail.el \e$B:o=|\e(B
\e$B8=:_!"\e(B Semi-gnus \e$B$G$O\e(B smtpmail.el \e$B$r;HMQ$7$F$$$J$$$N$G:o=|$9$k!#\e(B
\e$B$3$3$K$O!"B>%V%i%s%A$GBP:vCf$^$?$O!"BP:v:Q$G\e(B gnus-V1_V2 \e$B;^$K<h$j9~\e(B
\e$B$^$l$F$$$J$$$b$N$r4^$`!#\e(B
-
+
*1998/10/02-3 message/partial \e$B;HMQ;~$N\e(B Message-Id \e$BLdBj\e(B
message/partial \e$B7A<0$G%a%C%;!<%8$rAw?.$7$?>l9g!"A4%Q!<%H$N\e(B
*1998/10/02-1 Draft \e$B$NJT=8!&Aw?.;~$N\e(B encode / decode \e$BLdBj\e(B
1998/11/04 - \e$B40N;\e(B
+
+*1998/10/02-5 Edit article \e$B;~$K%a%C%;!<%8$rGK2u$9$kLdBj\e(B
+
+ 1998/11/12 - \e$B40N;\e(B
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
;; MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;; Katsumi Yamaoka <yamaoka@jpl.org>
;; Keywords: mail, news, MIME
;; This file is part of GNU Emacs.
(mime-maybe-hide-echo-buffer))
(gnus-run-hooks 'gnus-mime-article-prepare-hook))
+(defun gnus-article-make-full-mail-header (&optional number charset)
+ "Create a new mail header structure in a raw article buffer."
+ (unless (and number charset)
+ (save-current-buffer
+ (set-buffer gnus-summary-buffer)
+ (unless number
+ (setq number (or (cdr gnus-article-current) 0)))
+ (unless charset
+ (setq charset (or default-mime-charset 'x-ctext)))))
+ (goto-char (point-min))
+ (let ((header-end (if (search-forward "\n\n" nil t)
+ (1- (point))
+ (goto-char (point-max))))
+ (chars (- (point-max) (point)))
+ (lines (count-lines (point) (point-max)))
+ (default-mime-charset charset)
+ xref)
+ (narrow-to-region (point-min) header-end)
+ (setq xref (std11-fetch-field "xref"))
+ (prog1
+ (make-full-mail-header
+ number
+ (std11-fetch-field "subject")
+ (std11-fetch-field "from")
+ (std11-fetch-field "date")
+ (std11-fetch-field "message-id")
+ (std11-fetch-field "references")
+ chars
+ lines
+ (when xref (concat "Xref: " xref)))
+ (widen))))
+
(defun gnus-article-prepare (article &optional all-headers header)
"Prepare ARTICLE in article mode buffer.
ARTICLE should either be an article number or a Message-ID.
(or all-headers gnus-show-all-headers))))
(when (or (numberp article)
(stringp article))
- ;; Hooks for getting information from the article.
- ;; This hook must be called before being narrowed.
- (let ((method
- (if gnus-show-mime
- (progn
- (setq mime-message-structure gnus-current-headers)
- (if (or (not gnus-strict-mime)
- (mime-fetch-field "MIME-Version"))
- gnus-article-display-method-for-mime
- gnus-article-display-method-for-encoded-word))
- gnus-article-display-method-for-traditional)))
- (gnus-run-hooks 'gnus-tmp-internal-hook)
- (gnus-run-hooks 'gnus-article-prepare-hook)
- ;; Display message.
- (funcall method)
- ;; Associate this article with the current summary buffer.
- (setq gnus-article-current-summary summary-buffer)
- ;; Perform the article display hooks.
- (gnus-run-hooks 'gnus-article-display-hook))
+ (gnus-article-prepare-display)
;; Do page break.
(goto-char (point-min))
(setq gnus-page-broken
(set-window-point (get-buffer-window (current-buffer)) (point))
t))))))
+(defun gnus-article-prepare-display ()
+ "Make the current buffer look like a nice article."
+ (let ((method
+ (if gnus-show-mime
+ (progn
+ (mime-parse-buffer)
+ (if (or (not gnus-strict-mime)
+ (mime-fetch-field "MIME-Version"))
+ gnus-article-display-method-for-mime
+ gnus-article-display-method-for-encoded-word))
+ gnus-article-display-method-for-traditional)))
+ (gnus-run-hooks 'gnus-tmp-internal-hook)
+ (gnus-run-hooks 'gnus-article-prepare-hook)
+ ;; Display message.
+ (funcall method)
+ ;; Associate this article with the current summary buffer.
+ (setq gnus-article-current-summary (current-buffer))
+ ;; Perform the article display hooks.
+ (gnus-run-hooks 'gnus-article-display-hook)))
+
(defun gnus-article-wash-status ()
"Return a string which display status of article washing."
(save-excursion
:group 'gnus-article-various
:type 'hook)
+(defcustom gnus-article-edit-article-setup-function
+ 'gnus-article-mime-edit-article-setup
+ "Function called to setup an editing article buffer."
+ :group 'gnus-article-various
+ :type 'function)
+
(defvar gnus-article-edit-done-function nil)
(defvar gnus-article-edit-mode-map nil)
(gnus-configure-windows 'edit-article)
(setq gnus-article-edit-done-function exit-func)
(setq gnus-prev-winconf winconf)
+ (when gnus-article-edit-article-setup-function
+ (funcall gnus-article-edit-article-setup-function))
(gnus-message 6 "C-c C-c to end edits")))
(defun gnus-article-edit-done (&optional arg)
(let ((func gnus-article-edit-done-function)
(buf (current-buffer))
(start (window-start)))
+ (remove-hook 'gnus-article-mode-hook
+ 'gnus-article-mime-edit-article-unwind)
(gnus-article-edit-exit)
(save-excursion
(set-buffer buf)
(query-replace-regexp "\\([.!?][])}]* \\)\\([[({A-Z]\\)" "\\1 \\2"))))
;;;
+;;; Article editing with MIME-Edit
+;;;
+
+(defcustom gnus-article-mime-edit-article-setup-hook nil
+ "Hook run after setting up a MIME editing article buffer."
+ :group 'gnus-article-various
+ :type 'hook)
+
+(defun gnus-article-mime-edit-article-unwind ()
+ "Unwind `gnus-article-buffer' if article editing was given up."
+ (remove-hook 'gnus-article-mode-hook 'gnus-article-mime-edit-article-unwind)
+ (when mime-edit-mode-flag
+ (mime-edit-exit 'nomime 'no-error)
+ (message ""))
+ (when (featurep 'font-lock)
+ (setq font-lock-defaults nil)
+ (font-lock-mode 0)))
+
+(defun gnus-article-mime-edit-article-setup ()
+ "Convert current buffer to MIME-Edit buffer and turn on MIME-Edit mode
+after replacing with the original article."
+ (setq gnus-show-mime t)
+ (setq gnus-article-edit-done-function
+ `(lambda (&rest args)
+ (when mime-edit-mode-flag
+ (mime-edit-exit)
+ (message ""))
+ (goto-char (point-min))
+ (let (case-fold-search)
+ (when (re-search-forward
+ (format "^%s$" (regexp-quote mail-header-separator))
+ nil t)
+ (replace-match "")))
+ (when (featurep 'font-lock)
+ (setq font-lock-defaults nil)
+ (font-lock-mode 0))
+ (apply ,gnus-article-edit-done-function args)
+ (set-buffer gnus-original-article-buffer)
+ (erase-buffer)
+ (insert-buffer gnus-article-buffer)
+ (setq gnus-current-headers (gnus-article-make-full-mail-header))
+ (gnus-article-prepare-display)))
+ (define-key (current-local-map) "\C-c\C-k" 'gnus-article-mime-edit-exit)
+ (erase-buffer)
+ (insert-buffer gnus-original-article-buffer)
+ (mime-edit-again)
+ (when (featurep 'font-lock)
+ (set (make-local-variable 'font-lock-defaults)
+ '(message-font-lock-keywords t))
+ (font-lock-set-defaults)
+ (turn-on-font-lock))
+ (add-hook 'gnus-article-mode-hook 'gnus-article-mime-edit-article-unwind)
+ (gnus-run-hooks 'gnus-article-mime-edit-article-setup-hook))
+
+(defun gnus-article-mime-edit-exit ()
+ "Exit the article MIME editing without updating."
+ (interactive)
+ (let ((winconf gnus-prev-winconf)
+ buf)
+ (when mime-edit-mode-flag
+ (mime-edit-exit)
+ (message ""))
+ (goto-char (point-min))
+ (let (case-fold-search)
+ (when (re-search-forward
+ (format "^%s$" (regexp-quote mail-header-separator)) nil t)
+ (replace-match "")))
+ (when (featurep 'font-lock)
+ (setq font-lock-defaults nil)
+ (font-lock-mode 0))
+ ;; We remove all text props from the article buffer.
+ (setq buf (format "%s" (buffer-string)))
+ (set-buffer (get-buffer-create gnus-original-article-buffer))
+ (erase-buffer)
+ (insert buf)
+ (setq gnus-current-headers (gnus-article-make-full-mail-header))
+ (gnus-article-prepare-display)
+ (set-window-configuration winconf)))
+
+;;;
;;; Article highlights
;;;
(interactive "P")
(gnus-summary-select-article t)
(set-buffer gnus-original-article-buffer)
- (gnus-setup-message 'compose-bounce
- (let* ((references (mail-fetch-field "references"))
- (parent (and references (gnus-parent-id references))))
- (message-bounce)
- ;; If there are references, we fetch the article we answered to.
- (and fetch parent
- (gnus-summary-refer-article parent)
- (gnus-summary-show-all-headers)))))
+ (let (gnus-message-setup-hook)
+ (gnus-setup-message 'compose-bounce
+ (let* ((references (mail-fetch-field "references"))
+ (parent (and references (gnus-parent-id references))))
+ (message-bounce)
+ ;; If there are references, we fetch the article we answered to.
+ (and fetch parent
+ (gnus-summary-refer-article parent)
+ (gnus-summary-show-all-headers))))))
;;; Gcc handling.
:group 'message-interface
:type 'regexp)
+(defcustom message-bounce-setup-function 'message-bounce-setup-for-mime-edit
+ "Function to setup a re-sending bounced message."
+ :group 'message-sending
+ :type 'function)
+
;;;###autoload
(defcustom message-from-style 'default
"*Specifies how \"From\" headers look.
:group 'message-various
:type 'hook)
+(defcustom message-bounce-setup-hook nil
+ "Normal hook, run each time a a re-sending bounced message is initialized.
+The function `message-bounce' runs this hook."
+ :group 'message-various
+ :type 'hook)
+
(defcustom message-mode-hook nil
"Hook run in message mode buffers."
:group 'message-various
(kill-buffer (current-buffer)))
(message "Resending message to %s...done" address)))
+(defun message-bounce-setup-for-mime-edit ()
+ (goto-char (point-min))
+ (when (search-forward (concat "\n" mail-header-separator "\n") nil t)
+ (replace-match "\n\n"))
+ (set (make-local-variable 'message-setup-hook) nil)
+ (mime-edit-again))
+
;;;###autoload
(defun message-bounce ()
"Re-mail the current message.
(message-remove-header message-ignored-bounced-headers t)
(goto-char (point-max))
(insert mail-header-separator))
+ (when message-bounce-setup-function
+ (funcall message-bounce-setup-function))
+ (run-hooks 'message-bounce-setup-hook)
(message-position-point)))
;;;
(setq passwd (nth 2 (assoc mailhost pop3-fma-password)))
(pop3-fma-decode-string passwd))
-(setq pop3-read-passwd 'pop3-fma-read-passwd)
+(setq pop3-read-passwd 'pop3-fma-read-passwd
+ nnmail-read-passwd 'pop3-fma-read-passwd)
;;
;; Set multiple pop3 server's password
(defun pop3-fma-store-password (passwd)