Synch to Gnus 200306181725.
authoryamaoka <yamaoka>
Wed, 18 Jun 2003 23:27:20 +0000 (23:27 +0000)
committeryamaoka <yamaoka>
Wed, 18 Jun 2003 23:27:20 +0000 (23:27 +0000)
lisp/ChangeLog
lisp/gnus-art.el
texi/ChangeLog
texi/gnus-ja.texi
texi/gnus.texi

index 0c99ea3..3ba8049 100644 (file)
@@ -1,3 +1,8 @@
+2003-06-18  Didier Verna  <didier@xemacs.org>
+
+       * gnus-art.el (article-display-face): Correctly toggle between
+       display and hiding. Handle multiple Face headers.
+
 2003-06-17  Dave Love  <fx@gnu.org>
 
        * nnimap.el: Require cl when compiling.
index 9b01f47..8cbf824 100644 (file)
@@ -1034,7 +1034,7 @@ See Info node `(gnus)Customizing Articles' for details."
   :link '(custom-manual "(gnus)Customizing Articles")
   :type gnus-article-treat-custom)
 
-(make-obsolete-variable 'gnus-treat-strip-pgp 
+(make-obsolete-variable 'gnus-treat-strip-pgp
                        "This option is obsolete in Gnus 5.10.")
 
 (defcustom gnus-treat-strip-pem nil
@@ -2120,19 +2120,28 @@ unfolded."
   "Display any Face headers in the header."
   (interactive)
   (gnus-with-article-headers
-    (let ((face (message-fetch-field "face")))
-      (when face
-       (let ((png (gnus-convert-face-to-png face))
-             image)
-         (when png
-           (setq image (gnus-create-image png 'png t))
-           (gnus-article-goto-header "from")
-           (when (bobp)
-             (insert "From: [no `from' set]\n")
-             (forward-char -17))
-           (gnus-add-wash-type 'face)
-           (gnus-add-image 'face image)
-           (gnus-put-image image)))))))
+    (if (memq 'face gnus-article-wash-types)
+       (gnus-delete-images 'face)
+      (let (face faces)
+       (save-excursion
+         (set-buffer gnus-original-article-buffer)
+         (save-restriction
+           (mail-narrow-to-head)
+           (while (gnus-article-goto-header "Face")
+             (push (mail-header-field-value) faces))))
+       (while (setq face (pop faces))
+         (let ((png (gnus-convert-face-to-png face))
+               image)
+           (when png
+             (setq image (gnus-create-image png 'png t))
+             (gnus-article-goto-header "from")
+             (when (bobp)
+               (insert "From: [no `from' set]\n")
+               (forward-char -17))
+             (gnus-add-wash-type 'face)
+             (gnus-add-image 'face image)
+             (gnus-put-image image))))))
+    ))
 
 (defun article-display-x-face (&optional force)
   "Look for an X-Face header and display it if present."
@@ -3403,7 +3412,7 @@ The directory to save in defaults to `gnus-article-save-directory'."
       (shell-command-on-region (point-min) (point-max) command nil)))
   (setq gnus-last-shell-command command))
 
-(defmacro gnus-read-string (prompt &optional initial-contents history 
+(defmacro gnus-read-string (prompt &optional initial-contents history
                            default-value)
   "Like `read-string' but allow for older XEmacsen that don't have the 5th arg."
   (if (and (featurep 'xemacs)
@@ -4486,7 +4495,7 @@ The uncompress method used is derived from `buffer-file-name'."
               (message "%s %s..." message basename))
           (unwind-protect
               (unless (memq (apply 'call-process-region
-                                   (point-min) (point-max) 
+                                   (point-min) (point-max)
                                    prog
                                    t (list t err-file) nil
                                    args)
index 8910610..7e27cae 100644 (file)
@@ -1,3 +1,10 @@
+2003-06-18  Didier Verna  <didier@xemacs.org>
+
+       * gnus.texi (Face): New node.
+       * gnus.texi (Article Display): Reference it.
+       * gnus.texi (Customizing Articles): Ditto.
+       * gnus.texi (Image Enhancements): Put the Face node into the menu.
+
 2003-06-17  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
 
        * gnus.texi (Splitting Mail): Add "splitting" entry and concept
@@ -69,7 +76,7 @@
 
 2003-05-13  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * gnus.texi (Anti-Spam Basics): Removed mention of gnus-junk. 
+       * gnus.texi (Anti-Spam Basics): Removed mention of gnus-junk.
 
 2003-05-13  Jesper Harder  <harder@ifa.au.dk>
 
 
        * texi2latex.el (latexi-translate-file): Add @syncodeindex.
 
-       * gnus.texi: Markup and formatting improvements.  
+       * gnus.texi: Markup and formatting improvements.
        Use @syncodeindex for merging indexes to get the same font for
        @defvar and @vindex entries.  Be more consistent about the case
        of index entries.
-       
+
 
 2003-04-30  Reiner Steib  <Reiner.Steib@gmx.de>
 
        * gnus-faq.texi: Allow inclusion in `gnus.texi' again.
 
 2003-04-21  Reiner Steib  <Reiner.Steib@gmx.de>
-               
+
        * gnus-faq.texi: New, the Gnus FAQ from http://my.gnus.org/FAQ.
        From Frank Schmitt <ich@frank-schmitt.net>.
 
index 7a9ec59..5754d8f 100644 (file)
@@ -618,7 +618,7 @@ Reply, Followup and Post
 * Summary Mail Commands::       \e$B%a!<%k$rAw$k\e(B
 * Summary Post Commands::       \e$B%K%e!<%9$rAw$k\e(B
 * Summary Message Commands::    \e$BB>$N%a%C%;!<%84XO"$NL?Na\e(B
-* Canceling and Superseding::   
+* Canceling and Superseding::
 
 Marking Articles
 
@@ -682,7 +682,7 @@ Various Summary Stuff
 
 * Summary Group Information::   \e$B>pJs;X8~$NL?Na\e(B
 * Searching for Articles::      \e$BJ#?t5-;vL?Na\e(B
-* Summary Generation Commands::  
+* Summary Generation Commands::
 * Really Various Summary Commands::  \e$B$"$N$d$C$+$$$JB>$KE,9g$7$J$$L?Na\e(B
 
 Article Buffer
@@ -770,7 +770,7 @@ Choosing a Mail Back End
 
 Browsing the Web
 
-* Archiving Mail::              
+* Archiving Mail::
 * Web Searches::                \e$BJ8;zNs$K%^%C%A$9$k5-;v$+$i%0%k!<%W$r:n$k\e(B
 * Slashdot::                    Slashdot \e$B$N%3%a%s%H$rFI$`\e(B
 * Ultimate::                    Ultimate Bulletin Board \e$B%7%9%F%`\e(B
@@ -918,8 +918,8 @@ Thwarting Email Spam
 * Anti-Spam Basics::            \e$B$?$/$5$s$N\e(B spam \e$B$r8:$i$94JC1$JJ}K!\e(B
 * SpamAssassin::                Spam \e$BBP:v%D!<%k$N;H$$J}\e(B
 * Hashcash::                    CPU \e$B;~4V$rHq$d$7$F\e(B spam \e$BB`<#$9$k\e(B
-* Filtering Spam Using The Spam ELisp Package::  
-* Filtering Spam Using Statistics with spam-stat::  
+* Filtering Spam Using The Spam ELisp Package::
+* Filtering Spam Using Statistics with spam-stat::
 
 Appendices
 
@@ -5092,7 +5092,7 @@ Summary Buffer} \e$B$r;2>H$7$F2<$5$$!#\e(B
 * Summary Mail Commands::       \e$B%a!<%k$rAw$k\e(B
 * Summary Post Commands::       \e$B%K%e!<%9$rAw$k\e(B
 * Summary Message Commands::    \e$BB>$N%a%C%;!<%84XO"$NL?Na\e(B
-* Canceling and Superseding::   
+* Canceling and Superseding::
 @end menu
 
 @node Summary Mail Commands
@@ -8681,12 +8681,15 @@ gnus \e$B$G%a!<%k$rFI$`$3$H$NM-Mx$JE@$O!"C1=c$J%P%0$rAG@2$i$7$$IT>rM}$KCV$-\e(B
 @code{X-Face} \e$B%X%C%@!<$O>.$5$JGr9u2hA|$G!"%a%C%;!<%8%X%C%@!<$+$i6!5k$5$l\e(B
 \e$B$^$9\e(B (@pxref{X-Face})\e$B!#\e(B
 
-\e$B0lJ}\e(B Picon \e$B$O$"$J$?<+?H$N%7%9%F%`$K0MB8$7!"\e(Bgnus \e$B$O%X%C%@!<$K%^%C%A$9$k$"\e(B
-\e$B$J$?$N;}$AJ*$rC5$7$F$_$^$9\e(B (@pxref{Picons})\e$B!#\e(B
+@code{Face} \e$B%X%C%@!<$O>.$5$J%+%i!<2hA|$G!"%a%C%;!<%8%X%C%@!<$+$i6!5k$5$l\e(B
+\e$B$^$9\e(B (@pxref{Face})\e$B!#\e(B
 
 \e$B%9%^%$%j!<$O!"?M!9$,%a%C%;!<%8$K;6$i$+$7$?$,$k>.$5$J\e(B @samp{:-)} \e$B%7%s%\%k\e(B
 \e$B$G$9!#\e(B
 
+\e$B0lJ}\e(B Picon \e$B$O$"$J$?<+?H$N%7%9%F%`$K0MB8$7!"\e(Bgnus \e$B$O%X%C%@!<$K%^%C%A$9$k$"\e(B
+\e$B$J$?$N;}$AJ*$rC5$7$F$_$^$9\e(B (@pxref{Picons})\e$B!#\e(B
+
 \e$B$3$l$i$9$Y$F$N5!G=$O%H%0%k$G$9!#$b$7$9$G$K$=$l$i$,B8:_$7$F$$$?$J$i$P!"$=\e(B
 \e$B$l$i$O:o=|$5$l$^$9!#\e(B
 
@@ -9389,7 +9392,7 @@ Line Formatting})\e$B!#%G%#%U%)%k%H$O\e(B @samp{Gnus: %%b %S %Z} \e$B$G$9!#;HMQ2DG=
 @menu
 * Summary Group Information::   \e$B>pJs;X8~$NL?Na\e(B
 * Searching for Articles::      \e$BJ#?t5-;vL?Na\e(B
-* Summary Generation Commands::  
+* Summary Generation Commands::
 * Really Various Summary Commands::  \e$B$"$N$d$C$+$$$JB>$KE,9g$7$J$$L?Na\e(B
 @end menu
 
@@ -10296,6 +10299,10 @@ GNUS \e$B$d\e(B Gnus \e$B$G$O!"$3$N$?$A$N0-$$LdBj$G6C$+$5$l$J$$$h$&$K$9$k$K$O!"35N,
 
 @xref{X-Face}.
 
+@item gnus-treat-display-face (head)
+
+@xref{Face}.
+
 @item gnus-treat-emphasize (t, head, integer)
 @item gnus-treat-fill-article (t, integer)
 @item gnus-treat-fill-long-lines (t, integer)
@@ -14532,7 +14539,7 @@ Gnus \e$B$O$3$l$i$N%=!<%9$X$N3&LL$rDs6!$9$k%P%C%/%(%s%I72$r>/$7Hw$($D$D$"$j\e(B
 \e$B$^$9!#\e(B
 
 @menu
-* Archiving Mail::              
+* Archiving Mail::
 * Web Searches::                \e$BJ8;zNs$K%^%C%A$9$k5-;v$+$i%0%k!<%W$r:n$k\e(B
 * Slashdot::                    Slashdot \e$B$N%3%a%s%H$rFI$`\e(B
 * Ultimate::                    Ultimate Bulletin Board \e$B%7%9%F%`\e(B
@@ -15081,7 +15088,7 @@ Gnus \e$B$O%&%'%V%Z!<%8$r<hF@$9$k$?$a$K\e(B url \e$B%i%$%V%i%j$r!"%&%'%V%Z!<%8$rI=<
 \e$B$,\e(B 2.0.14 \e$BL$K~$N\e(B Cyrus IMAPD \e$B$K4^$^$l$F$$$k\e(B @samp{imtest} (\e$B%P!<%8%g\e(B
 \e$B%s\e(B 1.5.x \e$B$H\e(B 1.6.x) \e$B$r;H$C$F$$$k$J$i!"\e(B
 @code{imap-process-connection-type} \e$B$r$$$8$j2s$7$F!"\e(B
-@code{imap.el} \e$B$,\e(B @samp{imtest} \e$B$HDL?.$9$k$H$-$K%Q%$%W$G$O$J$/\e(B
+@file{imap.el} \e$B$,\e(B @samp{imtest} \e$B$HDL?.$9$k$H$-$K%Q%$%W$G$O$J$/\e(B
 \e$B$F\e(B pty \e$B$r;H$&$h$&$K$5$;$kI,MW$,$"$j$^$9!#$=$&$9$k$H$"$J$?\e(B
 \e$B$O\e(B @acronym{IMAP} \e$B%3%^%s%I$N9T$ND9$5$N@)8B$KG:$^$5$l$k$G$7$g$&!#$=$l$O%a!<\e(B
 \e$B%k%\%C%/%9$K$?$/$5$s$N5-;v$,$"$k$H$-$K\e(B Gnus \e$B$rL54|8B$K%O%s%0$5$;$F$7$^$&\e(B
@@ -15138,7 +15145,7 @@ Gnus \e$B$O%&%'%V%Z!<%8$r<hF@$9$k$?$a$K\e(B url \e$B%i%$%V%i%j$r!"%&%'%V%Z!<%8$rI=<
 \e$B%`\e(B @code{imtest} \e$B$,I,MW$G$9!#\e(B
 @item
 @dfn{digest-md5:} DIGEST-MD5 \e$B$G0E9f2=$5$l$?\e(B \e$BMxMQ<TL>\e(B/\e$B%Q%9%o!<%I\e(B \e$B$G$9!#30\e(B
-\e$BIt%i%$%V%i%j\e(B @code{digest-md5.el} \e$B$,I,MW$G$9!#\e(B
+\e$BIt%i%$%V%i%j\e(B @file{digest-md5.el} \e$B$,I,MW$G$9!#\e(B
 @item
 @dfn{cram-md5:} CRAM-MD5 \e$B$G0E9f2=$5$l$?\e(B \e$BMxMQ<TL>\e(B/\e$B%Q%9%o!<%I\e(B \e$B$G$9!#\e(B
 @item
@@ -20730,135 +20737,13 @@ XEmacs \e$B$=$l$K\e(B Emacs 21@footnote{MS \e$B%&%#%s%I%&%:$N\e(B Emacs 21 \e$B$O$^$@
 gnus \e$B$O$3$l$rMxMQ$9$k$3$H$K$7$^$9!#\e(B
 
 @menu
-* Picons::                      \e$B$"$J$?$,FI$s$G$$$k$b$N$N3($rI=<($9$kJ}K!\e(B
+* X-Face::                      \e$B%U%!%s%-!<$G$A$C$A$c$JGr9u$N3($rI=<($9$k\e(B
+* Face::                        \e$B$h$j%U%!%s%-!<$G$A$C$A$c$J%+%i!<$N3($rI=<($9$k\e(B
 * Smileys::                     \e$BI=<($5$l$k$Y$/@8$^$l$?9,$;$=$&$J4i$rI=<($9$kJ}K!\e(B
-* X-Face::                      \e$B%U%!%s%-!<$J$A$C$A$c$JGr9u$N3($rI=<($9$k\e(B
+* Picons::                      \e$B$"$J$?$,FI$s$G$$$k$b$N$N3($rI=<($9$kJ}K!\e(B
 * XVarious::                    \e$B$=$NB>$N\e(B XEmacs \e$B$G\e(B Gnus \e$B$JJQ?t\e(B
 @end menu
 
-@node Picons
-@subsection Picons
-
-@iftex
-@iflatex
-\include{picons}
-@end iflatex
-@end iftex
-
-\e$B$=$l$G!D!"$"$J$?$O$3$N%K%e!<%9%j!<%@!<$r$5$i$K$b$C$HCY$/$7$?$$$C$F$o$1$@\e(B
-\e$B$M\e(B! \e$B$3$l$O$=$&$9$k$N$K$T$C$?$j$JJ}K!$G$9!#$5$i$K$3$l$O!"$"$J$?$,%K%e!<%9\e(B
-\e$B$rFI$s$G$$$k$s$@$H$$$&$3$H$r!"$"$J$?$N8*1[$7$K8+$D$a$F$$$k?M$K0u>]$E$1$k\e(B
-\e$B$?$a$NAG@2$i$7$$J}K!$G$b$"$j$^$9!#\e(B
-
-Picon \e$B$H$O$J$s$G$7$g$&\e(B? Picons \e$B%&%'%V%5%$%H$+$iD>@\0zMQ$7$^$7$g$&!#\e(B
-
-@iftex
-@iflatex
-\margindex{}
-@end iflatex
-@end iftex
-
-@quotation
-@dfn{Picon} \e$B$H$O!"\e(B``\e$B8D?M%"%$%3%s\e(B (personal icons)'' \e$B$NN,$G$9!#$3$l$O!"%M%C\e(B
-\e$B%H>e$NMxMQ<T$d%I%a%$%s$rI=8=$9$k$N$K;H$o$l$k$?$a$N>.$5$J2hA|$G!"%G!<%?%Y!<\e(B
-\e$B%9$r;}$?$;$F!"$"$kEE;R%a!<%k%"%I%l%9$,$"$C$?$i!"$=$l$KE,@Z$J2hA|$r8+$D$1\e(B
-\e$B$i$l$k$h$&$K$7$F$*$/$b$N$G$9!#MxMQ<T$H%I%a%$%s0J30$K$b!"\e(BUsenet \e$B%K%e!<%9\e(B
-\e$B%0%k!<%W$dE75$M=Js$N$?$a$N\e(Bpicon \e$B%G!<%?%Y!<%9$,$"$j$^$9!#\e(Bpicon \e$B$OGr9u\e(B
-\e$B$N\e(B @code{XBM} \e$B7A<0$G$b%+%i!<$N\e(B @code{XPM} \e$B7A<0$G$b\e(B @code{GIF} \e$B7A<0$G$b9=\e(B
-\e$B$$$^$;$s!#\e(B
-@end quotation
-
-@vindex gnus-picon-databases
-Picon \e$B%G!<%?%Y!<%9$NF~<j$H%$%s%9%H!<%k$N<j=g$K$D$$$F$O!"%&%'%V%V%i%&%6!<\e(B
-\e$B$G\e(B @uref{http://www.cs.indiana.edu/picons/ftp/index.html} \e$B$rK,$M$F$_$F2<\e(B
-\e$B$5$$!#\e(B
-
-\e$B$b$7\e(B Debian GNU/Linux \e$B$r;H$C$F$$$k$N$J$i!"\e(B@samp{apt-get install
-picons.*} \e$B$H8@$($P\e(B gnus \e$B$,8+$D$1$k$3$H$,$G$-$k\e(B picon \e$B$,%$%s%9%H!<%k$5$l\e(B
-\e$B$^$9!#\e(B
-
-Picon \e$B$NI=<($,$G$-$k$h$&$K$9$k$?$a$K$O!"\e(Bpicon \e$B%G!<%?%Y!<%9$,$"$k%G%#%l%/\e(B
-\e$B%H%j$,!"$?$@C1$K\e(B @code{gnus-picon-databases} \e$B$K@_Dj$5$l$F$$$k$h$&$K$7$F\e(B
-\e$B2<$5$$!#\e(B
-
-\e$B$b$N$4$H$N=j:_$r4IM}$9$k$?$a$K!"0J2<$NJQ?t$r@_$1$F$$$^$9!#\e(B
-
-@table @code
-@item gnus-picon-database
-@vindex gnus-picon-database
-Picon \e$B%G!<%?%Y!<%9$N>l=j$G$9!#$3$l$O\e(B @file{news}, @file{domains},
-@file{users} (\e$B$J$I$J$I\e(B) \e$B$N%5%V%G%#%l%/%H%j!<$,4^$^$l$F$$$k%G%#%l%/%H%j!<\e(B
-\e$B$N%j%9%H$G$9!#\e(B@code{("/usr/lib/picon" "/usr/local/faces")} \e$B$,%G%#%U%)%k\e(B
-\e$B%H$G$9!#\e(B
-
-@item gnus-picon-news-directories
-@vindex gnus-picon-news-directories
-@code{gnus-picon-database} \e$B$+$i%K%e!<%9%0%k!<%WMQ$N%U%'!<%9$rC5$9$?$a$N\e(B
-\e$B%5%V%G%#%l%/%H%j!<$N%j%9%H$G$9!#%G%#%U%)%k%H$O\e(B @code{("news")} \e$B$G$9!#\e(B
-
-@item gnus-picon-user-directories
-@vindex gnus-picon-user-directories
-@code{gnus-picon-database} \e$B$+$i%f!<%6$N%U%'!<%9$rC5$9$?$a$N%5%V%G%#%l%/\e(B
-\e$B%H%j!<$N%j%9%H$G$9!#\e(B@code{("local" "users" "usenix" "misc")} \e$B$,%G%#%U%)\e(B
-\e$B%k%H$G$9!#\e(B
-
-@item gnus-picon-domain-directories
-@vindex gnus-picon-domain-directories
-@code{gnus-picon-database} \e$B$+$i%I%a%$%sL>$N%U%'!<%9$rC5$9$?$a$N%5%V%G%#\e(B
-\e$B%l%/%H%j!<$N%j%9%H$G$9!#%G%#%U%)%k%H$O\e(B @code{("domains")} \e$B$G$9!#$3$N%j%9\e(B
-\e$B%H$K\e(B @samp{"unknown"} \e$B$rDI2C$7$F$*$-$?$/$J$k?M$b$$$k$G$7$g$&!#\e(B
-
-@item gnus-picon-file-types
-@vindex gnus-picon-file-types
-Picon \e$B$N%U%!%$%kL>$H$7$F;n$7$F$_$k3HD%;R$N=gHV%j%9%H$G$9!#%G%#%U%)%k%H$O!"\e(B
-@code{("xpm" "gif" "xbm")} \e$B$+$i\e(B Emacs \e$B$KAH$_9~$^$l$F$$$J$$$b$N$r=|30$7$?\e(B
-\e$B$b$N$G$9!#\e(B
-@end table
-
-@node Smileys
-@subsection \e$B%9%^%$%j!<\e(B
-@cindex smileys
-
-@iftex
-@iflatex
-\gnusfig{-3cm}{0.5cm}{\epsfig{figure=ps/BigFace,height=20cm}}
-\input{smiley}
-@end iflatex
-@end iftex
-
-\e$B%9%^%$%j!<\e(B @dfn{smiley} \e$B$O\e(B gnus \e$B$H$OJL$N%Q%C%1!<%8$G$9$,!"%9%^%$%j!<$r;H$C\e(B
-\e$B$F$$$k%Q%C%1!<%8$O8=:_\e(B gnus \e$B$@$1$G$9$N$G!"$3$3$G@bL@$7$^$9!#\e(B
-
-\e$B0l8@$G8@$($P\e(B --- gnus \e$B$G%9%^%$%j!<$r;H$&$K$O!"0J2<\e(B
-\e$B$r\e(B @file{~/.gnus.el} \e$B%U%!%$%k$K=q$$$F$/$@$5$$!#\e(B
-
-@lisp
-(setq gnus-treat-display-smileys t)
-@end lisp
-
-\e$B%9%^%$%j!<$O!"J8;z$N4i%^!<%/\e(B --- @samp{:-)}, @samp{8-)}, @samp{:-(} \e$B$J$I\e(B
-\e$B$H$$$C$?$b$N\e(B --- \e$B$r3($KBP1~$5$;!"J8;z$N4i%^!<%/$NBe$o$j$K$=$N3($rI=<($7\e(B
-\e$B$^$9!#$3$NJQ49$OJ8;z$K%^%C%A$9$k@55,I=8=$H$=$l$N%U%!%$%kL>$X$NBP1~$N%j%9\e(B
-\e$B%H$G@)8f$5$l$^$9!#\e(B
-
-@vindex smiley-regexp-alist
-\e$B;H$o$l$kO"A[%j%9%H$O!"JQ?t\e(B @code{smiley-regexp-alist} \e$B$G@_Dj$7$^$9!#3FMW\e(B
-\e$BAG$N:G=i$N9`L\$O%^%C%A$5$;$?$$@55,I=8=$G!"FsHVL\$NMWAG$O3($GCV$-49$($?$$\e(B
-\e$B%0%k!<%W$K%^%C%A$9$k@55,I=8=!"$=$7$F;0HVL\$NMWAG$OI=<($5$;$?$$%U%!%$%k$N\e(B
-\e$BL>A0$G$9!#\e(B
-
-\e$B0J2<$NJQ?t$O!"%9%^%$%j!<$,$3$l$i$N%U%!%$%k$rC5$9>l=j$r%+%9%?%^%$%:$7$^$9\e(B:
-
-@table @code
-@item smiley-data-directory
-@vindex smiley-data-directory
-\e$B%9%^%$%j!<$,4i%U%!%$%k$rC5$9>l=j!#\e(B
-
-@item gnus-smiley-file-types
-@vindex gnus-smiley-file-types
-\e$B%9%^%$%j!<$N%U%!%$%kL>$H$7$F;n$7$F$_$k3HD%;R$N%j%9%H$G$9!#\e(B
-@end table
-
 @node X-Face
 @subsection X-Face
 @cindex x-face
@@ -20869,7 +20754,6 @@ Picon \e$B$N%U%!%$%kL>$H$7$F;n$7$F$_$k3HD%;R$N=gHV%j%9%H$G$9!#%G%#%U%)%k%H$O!"\e(B
 
 @cindex x-face
 @findex gnus-article-display-x-face
-@findex gnus-article-x-face-command
 @vindex gnus-article-x-face-command
 @vindex gnus-article-x-face-too-ugly
 @iftex
@@ -20947,6 +20831,169 @@ gnus \e$B$O!"30$K=P$9%a%C%;!<%8$K\e(B X-Face \e$B%X%C%@!<$r4JC1$KA^F~$9$k$?$a$N!"JX
                                  "~/My-face.gif"))))))
 @end lisp
 
+@c TRANSLATEME
+@node Face
+@subsection Face
+@cindex face
+
+@c #### FIXME: faces and x-faces'implementations should really be harmonized.
+
+@code{Face} headers are essentially a funkier version of @code{X-Face}
+ones. They describe a 48x48 pixel colored image that's supposed to
+represent the author of the message.
+
+@cindex face
+@findex gnus-article-display-face
+The contents of a @code{Face} header must be a base64 encoded PNG image.
+See @url{http://quimby.gnus.org/circus/face/} for the precise
+specifications.
+
+Gnus provides a few convenience functions and variables to allow
+easier insertion of Face headers in outgoing messages.
+
+@findex gnus-convert-png-to-face
+@code{gnus-convert-png-to-face} takes a 48x48 PNG image, no longer than
+726 bytes long, and converts it to a face.
+
+@findex gnus-face-from-file
+@vindex gnus-convert-image-to-face-command
+@code{gnus-face-from-file} takes a JPEG file as the parameter, and then
+converts the file to Face format by using the
+@code{gnus-convert-image-to-face-command} shell command.
+
+Here's how you would typically use this function. Put something like the
+following in your @file{~/.gnus.el} file:
+
+@lisp
+(setq message-required-news-headers
+      (nconc message-required-news-headers
+             (list '(Face . (lambda ()
+                              (gnus-face-from-file "~/face.jpg"))))))
+@end lisp
+
+@node Smileys
+@subsection \e$B%9%^%$%j!<\e(B
+@cindex smileys
+
+@iftex
+@iflatex
+\gnusfig{-3cm}{0.5cm}{\epsfig{figure=ps/BigFace,height=20cm}}
+\input{smiley}
+@end iflatex
+@end iftex
+
+\e$B%9%^%$%j!<\e(B @dfn{smiley} \e$B$O\e(B gnus \e$B$H$OJL$N%Q%C%1!<%8$G$9$,!"%9%^%$%j!<$r;H$C\e(B
+\e$B$F$$$k%Q%C%1!<%8$O8=:_\e(B gnus \e$B$@$1$G$9$N$G!"$3$3$G@bL@$7$^$9!#\e(B
+
+\e$B0l8@$G8@$($P\e(B --- gnus \e$B$G%9%^%$%j!<$r;H$&$K$O!"0J2<\e(B
+\e$B$r\e(B @file{~/.gnus.el} \e$B%U%!%$%k$K=q$$$F$/$@$5$$!#\e(B
+
+@lisp
+(setq gnus-treat-display-smileys t)
+@end lisp
+
+\e$B%9%^%$%j!<$O!"J8;z$N4i%^!<%/\e(B --- @samp{:-)}, @samp{8-)}, @samp{:-(} \e$B$J$I\e(B
+\e$B$H$$$C$?$b$N\e(B --- \e$B$r3($KBP1~$5$;!"J8;z$N4i%^!<%/$NBe$o$j$K$=$N3($rI=<($7\e(B
+\e$B$^$9!#$3$NJQ49$OJ8;z$K%^%C%A$9$k@55,I=8=$H$=$l$N%U%!%$%kL>$X$NBP1~$N%j%9\e(B
+\e$B%H$G@)8f$5$l$^$9!#\e(B
+
+@vindex smiley-regexp-alist
+\e$B;H$o$l$kO"A[%j%9%H$O!"JQ?t\e(B @code{smiley-regexp-alist} \e$B$G@_Dj$7$^$9!#3FMW\e(B
+\e$BAG$N:G=i$N9`L\$O%^%C%A$5$;$?$$@55,I=8=$G!"FsHVL\$NMWAG$O3($GCV$-49$($?$$\e(B
+\e$B%0%k!<%W$K%^%C%A$9$k@55,I=8=!"$=$7$F;0HVL\$NMWAG$OI=<($5$;$?$$%U%!%$%k$N\e(B
+\e$BL>A0$G$9!#\e(B
+
+\e$B0J2<$NJQ?t$O!"%9%^%$%j!<$,$3$l$i$N%U%!%$%k$rC5$9>l=j$r%+%9%?%^%$%:$7$^$9\e(B:
+
+@table @code
+@item smiley-data-directory
+@vindex smiley-data-directory
+\e$B%9%^%$%j!<$,4i%U%!%$%k$rC5$9>l=j!#\e(B
+
+@item gnus-smiley-file-types
+@vindex gnus-smiley-file-types
+\e$B%9%^%$%j!<$N%U%!%$%kL>$H$7$F;n$7$F$_$k3HD%;R$N%j%9%H$G$9!#\e(B
+@end table
+
+@node Picons
+@subsection Picons
+
+@iftex
+@iflatex
+\include{picons}
+@end iflatex
+@end iftex
+
+\e$B$=$l$G!D!"$"$J$?$O$3$N%K%e!<%9%j!<%@!<$r$5$i$K$b$C$HCY$/$7$?$$$C$F$o$1$@\e(B
+\e$B$M\e(B! \e$B$3$l$O$=$&$9$k$N$K$T$C$?$j$JJ}K!$G$9!#$5$i$K$3$l$O!"$"$J$?$,%K%e!<%9\e(B
+\e$B$rFI$s$G$$$k$s$@$H$$$&$3$H$r!"$"$J$?$N8*1[$7$K8+$D$a$F$$$k?M$K0u>]$E$1$k\e(B
+\e$B$?$a$NAG@2$i$7$$J}K!$G$b$"$j$^$9!#\e(B
+
+Picon \e$B$H$O$J$s$G$7$g$&\e(B? Picons \e$B%&%'%V%5%$%H$+$iD>@\0zMQ$7$^$7$g$&!#\e(B
+
+@iftex
+@iflatex
+\margindex{}
+@end iflatex
+@end iftex
+
+@quotation
+@dfn{Picon} \e$B$H$O!"\e(B``\e$B8D?M%"%$%3%s\e(B (personal icons)'' \e$B$NN,$G$9!#$3$l$O!"%M%C\e(B
+\e$B%H>e$NMxMQ<T$d%I%a%$%s$rI=8=$9$k$N$K;H$o$l$k$?$a$N>.$5$J2hA|$G!"%G!<%?%Y!<\e(B
+\e$B%9$r;}$?$;$F!"$"$kEE;R%a!<%k%"%I%l%9$,$"$C$?$i!"$=$l$KE,@Z$J2hA|$r8+$D$1\e(B
+\e$B$i$l$k$h$&$K$7$F$*$/$b$N$G$9!#MxMQ<T$H%I%a%$%s0J30$K$b!"\e(BUsenet \e$B%K%e!<%9\e(B
+\e$B%0%k!<%W$dE75$M=Js$N$?$a$N\e(Bpicon \e$B%G!<%?%Y!<%9$,$"$j$^$9!#\e(Bpicon \e$B$OGr9u\e(B
+\e$B$N\e(B @code{XBM} \e$B7A<0$G$b%+%i!<$N\e(B @code{XPM} \e$B7A<0$G$b\e(B @code{GIF} \e$B7A<0$G$b9=\e(B
+\e$B$$$^$;$s!#\e(B
+@end quotation
+
+@vindex gnus-picon-databases
+Picon \e$B%G!<%?%Y!<%9$NF~<j$H%$%s%9%H!<%k$N<j=g$K$D$$$F$O!"%&%'%V%V%i%&%6!<\e(B
+\e$B$G\e(B @uref{http://www.cs.indiana.edu/picons/ftp/index.html} \e$B$rK,$M$F$_$F2<\e(B
+\e$B$5$$!#\e(B
+
+\e$B$b$7\e(B Debian GNU/Linux \e$B$r;H$C$F$$$k$N$J$i!"\e(B@samp{apt-get install
+picons.*} \e$B$H8@$($P\e(B gnus \e$B$,8+$D$1$k$3$H$,$G$-$k\e(B picon \e$B$,%$%s%9%H!<%k$5$l\e(B
+\e$B$^$9!#\e(B
+
+Picon \e$B$NI=<($,$G$-$k$h$&$K$9$k$?$a$K$O!"\e(Bpicon \e$B%G!<%?%Y!<%9$,$"$k%G%#%l%/\e(B
+\e$B%H%j$,!"$?$@C1$K\e(B @code{gnus-picon-databases} \e$B$K@_Dj$5$l$F$$$k$h$&$K$7$F\e(B
+\e$B2<$5$$!#\e(B
+
+\e$B$b$N$4$H$N=j:_$r4IM}$9$k$?$a$K!"0J2<$NJQ?t$r@_$1$F$$$^$9!#\e(B
+
+@table @code
+@item gnus-picon-database
+@vindex gnus-picon-database
+Picon \e$B%G!<%?%Y!<%9$N>l=j$G$9!#$3$l$O\e(B @file{news}, @file{domains},
+@file{users} (\e$B$J$I$J$I\e(B) \e$B$N%5%V%G%#%l%/%H%j!<$,4^$^$l$F$$$k%G%#%l%/%H%j!<\e(B
+\e$B$N%j%9%H$G$9!#\e(B@code{("/usr/lib/picon" "/usr/local/faces")} \e$B$,%G%#%U%)%k\e(B
+\e$B%H$G$9!#\e(B
+
+@item gnus-picon-news-directories
+@vindex gnus-picon-news-directories
+@code{gnus-picon-database} \e$B$+$i%K%e!<%9%0%k!<%WMQ$N%U%'!<%9$rC5$9$?$a$N\e(B
+\e$B%5%V%G%#%l%/%H%j!<$N%j%9%H$G$9!#%G%#%U%)%k%H$O\e(B @code{("news")} \e$B$G$9!#\e(B
+
+@item gnus-picon-user-directories
+@vindex gnus-picon-user-directories
+@code{gnus-picon-database} \e$B$+$i%f!<%6$N%U%'!<%9$rC5$9$?$a$N%5%V%G%#%l%/\e(B
+\e$B%H%j!<$N%j%9%H$G$9!#\e(B@code{("local" "users" "usenix" "misc")} \e$B$,%G%#%U%)\e(B
+\e$B%k%H$G$9!#\e(B
+
+@item gnus-picon-domain-directories
+@vindex gnus-picon-domain-directories
+@code{gnus-picon-database} \e$B$+$i%I%a%$%sL>$N%U%'!<%9$rC5$9$?$a$N%5%V%G%#\e(B
+\e$B%l%/%H%j!<$N%j%9%H$G$9!#%G%#%U%)%k%H$O\e(B @code{("domains")} \e$B$G$9!#$3$N%j%9\e(B
+\e$B%H$K\e(B @samp{"unknown"} \e$B$rDI2C$7$F$*$-$?$/$J$k?M$b$$$k$G$7$g$&!#\e(B
+
+@item gnus-picon-file-types
+@vindex gnus-picon-file-types
+Picon \e$B$N%U%!%$%kL>$H$7$F;n$7$F$_$k3HD%;R$N=gHV%j%9%H$G$9!#%G%#%U%)%k%H$O!"\e(B
+@code{("xpm" "gif" "xbm")} \e$B$+$i\e(B Emacs \e$B$KAH$_9~$^$l$F$$$J$$$b$N$r=|30$7$?\e(B
+\e$B$b$N$G$9!#\e(B
+@end table
+
 @node XVarious
 @subsection \e$B$5$^$6$^$J\e(B XEmacs \e$BJQ?t\e(B
 
@@ -21051,8 +21098,8 @@ Gnus \e$B$O!"%9%3%"IU$1!"%9%l%C%I$N7A@.!"%9%l%C%IHf3S$J$I$r9T$&$H$-$K!"\e(B
 * Anti-Spam Basics::            \e$B$?$/$5$s$N\e(B spam \e$B$r8:$i$94JC1$JJ}K!\e(B
 * SpamAssassin::                Spam \e$BBP:v%D!<%k$N;H$$J}\e(B
 * Hashcash::                    CPU \e$B;~4V$rHq$d$7$F\e(B spam \e$BB`<#$9$k\e(B
-* Filtering Spam Using The Spam ELisp Package::  
-* Filtering Spam Using Statistics with spam-stat::  
+* Filtering Spam Using The Spam ELisp Package::
+* Filtering Spam Using Statistics with spam-stat::
 @end menu
 
 @node The problem of spam
@@ -21099,14 +21146,14 @@ Spam \e$B$N=|5n\e(B (filtering) \e$B$X$N:G$bC1=c$J<h$jAH$_$O_I2a$9$k$3\e(B
 \e$B$b$&0l$D$NEE;R%a!<%k_I2a$X$N<h$jAH$_$OJ,;67?\e(B spam \e$B=hM}$G!"\e(BDCC (\e$BLuCm\e(B:
 Distributed Checksum Clearinghouse --
 @uref{http://www.rhyolite.com/anti-spam/dcc/}) \e$B$,$=$N$h$&$J%7%9%F%`$rF3\e(B
-\e$BF~$7$F$$$^$9!#K\<AE*$K$O!"@$3&Cf$N\e(B @code{N} \e$B8D$N%7%9%F%`$,!"Cf9q!"%,!<%J\e(B
-\e$B$"$k$$$O%+%j%U%)%k%K%"$K$"$k%^%7%s\e(B @samp{X} \e$B$,\e(B spam \e$BEE;R%a!<%k$rAw=P$7$F\e(B
-\e$B$$$k$3$H$rG'$a$?$i!"$=$l$i\e(B @code{N} \e$B8D$N%7%9%F%`$O\e(B @samp{X} \e$B$^$?\e(B
-\e$B$O\e(B @samp{X} \e$B$+$i$d$C$FMh$?\e(B spam \e$B%a!<%k$r%G!<%?%Y!<%9$K5-F~$7$^$9!#\e(B
-Spam \e$B8!=P$N4p=`$OJQ$o$j$^$9!#$=$l$OAw$i$l$?%a%C%;!<%8$N?t$d%a%C%;!<%8$N\e(B
-\e$BFbMF$J$I$G$"$k$+$b$7$l$^$;$s!#%a%C%;!<%8$,\e(B spam \e$B$+$I$&$+$rJ,;6=hM}%7%9%F\e(B
-\e$B%`$N%f!<%6$,CN$j$?$$>l9g!"H`$O$=$l$i$N\e(B @code{N} \e$B8D$N%7%9%F%`$N$&$A$N0l$D\e(B
-\e$B$rD4$Y$^$9!#\e(B
+\e$BF~$7$F$$$^$9!#K\<AE*$K$O!"@$3&Cf$N\e(B @var{N} \e$B8D$N%7%9%F%`$,!"Cf9q!"%,!<%J\e(B
+\e$B$"$k$$$O%+%j%U%)%k%K%"$K$"$k%^%7%s\e(B @var{X} \e$B$,\e(B spam \e$BEE;R%a!<%k$rAw=P$7$F\e(B
+\e$B$$$k$3$H$rG'$a$?$i!"$=$l$i\e(B @var{N} \e$B8D$N%7%9%F%`$O\e(B @var{X} \e$B$^$?\e(B
+\e$B$O\e(B @var{X} \e$B$+$i$d$C$FMh$?\e(B spam \e$B%a!<%k$r%G!<%?%Y!<%9$K5-F~$7$^$9!#\e(BSpam \e$B8!\e(B
+\e$B=P$N4p=`$OJQ$o$j$^$9!#$=$l$OAw$i$l$?%a%C%;!<%8$N?t$d%a%C%;!<%8$NFbMF$J$I\e(B
+\e$B$G$"$k$+$b$7$l$^$;$s!#%a%C%;!<%8$,\e(B spam \e$B$+$I$&$+$rJ,;6=hM}%7%9%F%`$N%f!<\e(B
+\e$B%6$,CN$j$?$$>l9g!"H`$O$=$l$i$N\e(B @var{N} \e$B8D$N%7%9%F%`$N$&$A$N0l$D$rD4$Y$^\e(B
+\e$B$9!#\e(B
 
 \e$BJ,;67?\e(B spam \e$B=hM}$OF1;~$KB?$/$N%a%C%;!<%8$rAw$k\e(B spammers \e$B$HHs>o$K$h$/@o$C\e(B
 \e$B$F$/$l$^$9$,!"$=$l$O%f!<%6!<$,$+$J$jJ#;($J%A%'%C%/$r@_Dj$9$k$3$H$r5a$a$^\e(B
@@ -21217,9 +21264,10 @@ Spam \e$B$rHr$1$k$?$a$NA09`$N%R%s%H$,==J,$@$C$?F|!9$O2a$.5n$j$^$7$?!#:#$G$O\e(B
              :postscript "mv %t /tmp/foo; formail -bs spamc < /tmp/foo > %t")))
 @end lisp
 
-\e$B$$$C$?$s%a!<%k$r<u$1$k%9%W!<%k$G!"Nc$($P\e(B spam \e$B$G$"$k$3$H$rI=<($9$k%X%C%@!<\e(B
-\e$B$r%a!<%k$K4^$a$k$h$&$K$7$F!"$=$l$r$U$k$$Mn$H$9=`Hw$r$7$^$9!#;H$&$N$OIaDL\e(B
-\e$B$NJ,3dJ}<0\e(B (@pxref{Splitting Mail}) \e$B$G$9\e(B:
+\e$B$$$C$?$s!"%a!<%k$r<u$1$k%9%W!<%k$r$I$&$K$+$7$F=hM}$9$k!"Nc$($P\e(B@: \e$B%a!<%k\e(B
+\e$B$K\e(B spam \e$B$G$"$k$3$H$rI=<($9$k%X%C%@!<$r4^$a$k!"$h$&$K$9$l$P!"$=$l$r$U$k$$\e(B
+\e$BMn$H$9=`Hw$O40N;$G$9!#;H$&$N$OIaDL$NJ,3dJ}<0\e(B (@pxref{Splitting Mail}) \e$B$G\e(B
+\e$B$9\e(B:
 
 @lisp
 (setq nnmail-split-methods '(("spam"  "^X-Spam-Flag: YES")
@@ -21305,7 +21353,7 @@ Spam \e$B$H@o$&$?$a$N?7$7$$5;K!$O!"%a%C%;!<%8$rAw?.$9$k:]$K$$$/$P$/$+$NIiC4\e(B
 (add-hook 'message-send-hook 'mail-add-payment)
 @end lisp
 
-@code{hashcash.el} \e$B%i%$%V%i%j\e(B
+@file{hashcash.el} \e$B%i%$%V%i%j\e(B
 \e$B$O\e(B @uref{http://users.actrix.gen.nz/mycroft/hashcash.el} \e$B$+3+H/HG\e(B
 \e$B$N\e(B gnus \e$B$N\e(B contrib \e$B%G%#%l%/%H%j$K$"$j$^$9!#\e(B
 
@@ -21342,14 +21390,14 @@ Spam \e$B$H@o$&$?$a$N?7$7$$5;K!$O!"%a%C%;!<%8$rAw?.$9$k:]$K$$$/$P$/$+$NIiC4\e(B
 @cindex spam filtering
 @cindex spam
 
-@code{spam.el} \e$B$N??$NL\E*$O\e(B spam \e$B8!=P$H_I2a$N$?$a$N41@)%;%s%?!<\e(B
-\e$B$r\e(B gnus \e$B$NCf$K;}$D$3$H$G$9!#$=$N$?$a$K\e(B @code{spam.el} \e$B$OFs$D$N$3$H$r9T$J\e(B
+@file{spam.el} \e$B$N??$NL\E*$O\e(B spam \e$B8!=P$H_I2a$N$?$a$N41@)%;%s%?!<\e(B
+\e$B$r\e(B gnus \e$B$NCf$K;}$D$3$H$G$9!#$=$N$?$a$K\e(B @file{spam.el} \e$B$OFs$D$N$3$H$r9T$J\e(B
 \e$B$$$^$9\e(B: \e$BF~$C$F$/$k%a!<%k$r_I2a$7!"\e(Bspam \e$B$^$?$O\e(B ham \e$B$H$7$FCN$i$l$k%a!<%k$r\e(B
-\e$BJ,@O$9$k$3$H$G$9!#\e(B@emph{Ham} \e$B$O\e(B @code{spam.el} \e$B$N$$$?$k=j$G\e(B spam \e$B$G$O$J\e(B
-\e$B$$%a%C%;!<%8$r<($9$?$a$K;H$&L>A0$G$9!#\e(B
+\e$BJ,@O$9$k$3$H$G$9!#\e(B@dfn{Ham} \e$B$O\e(B @file{spam.el} \e$B$N$$$?$k=j$G\e(B spam \e$B$G$O$J$$\e(B
+\e$B%a%C%;!<%8$r<($9$?$a$K;H$&L>A0$G$9!#\e(B
 
-\e$B$G$O\e(B @code{spam.el} \e$B$r\e(B load \e$B$9$k$H2?$,5/$-$k$G$7$g$&$+\e(B?  \e$BBh0l$K!"0J2<$N\e(B
-\e$B%-!<%\!<%IL?Na$,;H$($k$h$&$K$J$j$^$9\e(B:
+\e$B$G$O\e(B @file{spam.el} \e$B$rFI$_9~$`$H2?$,5/$-$k$G$7$g$&$+\e(B?  \e$BBh0l$K!"0J2<$N%-!<\e(B
+\e$B%\!<%IL?Na$,;H$($k$h$&$K$J$j$^$9\e(B:
 
 @table @kbd
 @item M-d
@@ -21380,8 +21428,8 @@ Spam \e$B5-;v$r8+$?$H$-$O$$$D$G$b!"%0%k!<%W$rH4$1$kA0$KI,$:\e(B @kbd{M-d} \e$B$G$=$
 
 @end table
 
-\e$B$^$?!"\e(B@code{spam.el} \e$B$r\e(B load \e$B$9$k$H!"$=$NJQ?t72$r%+%9%?%^%$%:$9$k$3$H$,\e(B
-\e$B$G$-$k$h$&$K$J$j$^$9!#\e(B@samp{spam} \e$BJQ?t%0%k!<%W$K$D$$\e(B
+\e$B$^$?!"\e(B@file{spam.el} \e$B$rFI$_9~$`$H!"$=$NJQ?t72$r%+%9%?%^%$%:$9$k$3$H$,$G\e(B
+\e$B$-$k$h$&$K$J$j$^$9!#\e(B@samp{spam} \e$BJQ?t%0%k!<%W$K$D$$\e(B
 \e$B$F\e(B @code{customize-group} \e$B$r;n$7$F$_$F2<$5$$!#\e(B
 
 @vindex gnus-spam-process-newsgroups
@@ -21484,7 +21532,7 @@ Spam \e$B%0%k!<%W$G$O!"%G%#%U%)%k%H$G$9$Y$F$N%a%C%;!<%8$,\e(B spam \e$B$G$"$k$H2r<a
 @code{spam-process-destination} \e$B%Q%i%a!<%?$,@_Dj$5$l$F$$$J$$$H!"\e(Bspam \e$B5-\e(B
 \e$B;v$OC1$K4|8B@Z$l>C5n$5$l$^$9!#\e(B
 
-\e$BF~$C$F$/$k%a!<%k$r_I2a$9$kL\E*$G\e(B @code{spam.el} \e$B$r;H$&$K$O!"FC5iJ,3d%j%9\e(B
+\e$BF~$C$F$/$k%a!<%k$r_I2a$9$kL\E*$G\e(B @file{spam.el} \e$B$r;H$&$K$O!"FC5iJ,3d%j%9\e(B
 \e$B%H\e(B @code{nnmail-split-fancy} \e$B$^$?$O\e(B @code{nnimap-split-fancy} \e$B$K0J2<$rDI\e(B
 \e$B2C$7$J$1$l$P$J$j$^$;$s\e(B:
 
@@ -21574,17 +21622,17 @@ SpamAssassin \e$B%X%C%@!<$K\e(B ding \e$B$N5,B'$rCV$-49$($5$;$k$3$H$O$G$-$^$9$,!"B>
 \e$BK!$H!"$=$l$i$KBP1~$9$k\e(B spam \e$B$H\e(B ham \e$B$N%W%m%;%C%5!<$G$9\e(B:
 
 @menu
-* Blacklists and Whitelists::   
-* BBDB Whitelists::             
-* Gmane Spam Reporting::        
-* Anti-spam Hashcash Payments::  
-* Blackholes::                  
-* Regular Expressions Header Matching::  
-* Bogofilter::                  
-* ifile spam filtering::        
-* spam-stat spam filtering::    
-* SpamOracle::                  
-* Extending the spam elisp package::  
+* Blacklists and Whitelists::
+* BBDB Whitelists::
+* Gmane Spam Reporting::
+* Anti-spam Hashcash Payments::
+* Blackholes::
+* Regular Expressions Header Matching::
+* Bogofilter::
+* ifile spam filtering::
+* spam-stat spam filtering::
+* SpamOracle::
+* Extending the spam elisp package::
 @end menu
 
 @node Blacklists and Whitelists
@@ -21751,9 +21799,9 @@ Hashcash \e$B0u$,L5$$%a%C%;!<%8$O<!$N\e(B spam-\e$BJ,3d\e(B (spam-split) \e$B5,B'$KAw
 \e$B$J$j9-HO0O$KEO$C$F$$$^$9$,!"$b$7;~BeCY$l$J%5!<%P!<$r4^$s$G$$$?$i;d$?$A$K\e(B
 \e$BCN$i$;$k$?$a$K!"3NG'$7$F2<$5$$!#\e(B
 
-\e$B%V%i%C%/%[!<%k!&%A%'%C%/$O\e(B @code{dig.el} \e$B%Q%C%1!<%8$r;H$$$^$9!#$7$+\e(B
+\e$B%V%i%C%/%[!<%k!&%A%'%C%/$O\e(B @file{dig.el} \e$B%Q%C%1!<%8$r;H$$$^$9!#$7$+\e(B
 \e$B$7\e(B @code{spam-use-dig} \e$B$r\e(B @code{nil} \e$B$K@_Dj$9$l$P!"$h$jNI$$@-G=$N$?$a\e(B
-\e$B$K\e(B @code{dns.el} \e$B$rBe$o$j$K;H$&$3$H$r\e(B @code{spam.el} \e$B$K;X<($9$k$3$H$,$G\e(B
+\e$B$K\e(B @file{dns.el} \e$B$rBe$o$j$K;H$&$3$H$r\e(B @file{spam.el} \e$B$K;X<($9$k$3$H$,$G\e(B
 \e$B$-$^$9!#8=>u$G$O\e(B @code{spam-use-dig} \e$B$r\e(B @code{nil} \e$B$K@_Dj$9$k$3$H$O!"$$\e(B
 \e$B$/?M$+$N%f!<%6!<$,;H$($J$$$+$b$7$l$J$$$N$G!"$=$l$,2DG=$J@-G=2~A1$G$"$k$K\e(B
 \e$B$b$+$+$o$i$:?d>)$5$l$^$;$s!#$7$+$7!"$=$l$,F0$/$+$I$&$+$r3N$+$a$k$3$H$O$G\e(B
@@ -21776,7 +21824,7 @@ Hashcash \e$B0u$,L5$$%a%C%;!<%8$O<!$N\e(B spam-\e$BJ,3d\e(B (spam-split) \e$B5,B'$KAw
 
 @defvar spam-use-dig
 
-@code{dns.el} \e$B%Q%C%1!<%8$NBe$o$j$K\e(B @code{dig.el} \e$B%Q%C%1!<%8$r;H$$$^$9!#\e(B
+@file{dns.el} \e$B%Q%C%1!<%8$NBe$o$j$K\e(B @file{dig.el} \e$B%Q%C%1!<%8$r;H$$$^$9!#\e(B
 \e$B%G%#%U%)%k%H$N@_Dj$G$"$k\e(B @code{t} \e$B$,?d>)$5$l$^$9!#\e(B
 
 @end defvar
@@ -21887,10 +21935,10 @@ Path \e$B$K\e(B @code{bogofilter} \e$B$N<B9T%U%!%$%k$,L5$$>l9g!"\e(BBogofilter \e$B$N
 
 @end defvar
 
-Bogofilter \e$B$N%a!<%kJ,N`4o$O!"0U?^$HL\E*$NE@$G\e(B ifile \e$B$K;w$F$$$^$9!#\e(B
-Spam \e$B$H\e(B ham \e$B$N%W%m%;%C%5!<$,Ds6!$5$l!"2C$($F\e(B spam-\e$BJ,3d\e(B (spam-split) \e$B$K\e(B
-\e$B$b\e(B Bogofilter \e$B$,;H$o$l$k$Y$-$G$"$k$3$H!"$^$?$O$9$G$K5-;v$K;H$o$l$?$3$H$r\e(B
-\e$B<($9\e(B @code{spam-use-bogofilter} \e$B$*$h\e(B
+Bogofilter \e$B$N%a!<%kJ,N`4o$O!"0U?^$HL\E*$NE@$G\e(B @command{ifile} \e$B$K;w$F$$$^\e(B
+\e$B$9!#\e(BSpam \e$B$H\e(B ham \e$B$N%W%m%;%C%5!<$,Ds6!$5$l!"2C$($F\e(B spam-\e$BJ,\e(B
+\e$B3d\e(B (spam-split) \e$B$K$b\e(B Bogofilter \e$B$,;H$o$l$k$Y$-$G$"$k$3$H!"$^$?$O$9$G$K5-\e(B
+\e$B;v$K;H$o$l$?$3$H$r<($9\e(B @code{spam-use-bogofilter} \e$B$*$h\e(B
 \e$B$S\e(B @code{spam-use-bogofilter-headers} \e$BJQ?t$,Ds6!$5$l$^$9!#$3$N5!G=$r8!::\e(B
 \e$B$9$k$?$a$K\e(B Bogofilter \e$B$N%P!<%8%g%s\e(B 0.9.2.1 \e$B$,;H$o$l$^$7$?!#\e(B
 
@@ -21902,8 +21950,9 @@ Spam \e$B$H\e(B ham \e$B$N%W%m%;%C%5!<$,Ds6!$5$l!"2C$($F\e(B spam-\e$BJ,3d\e(B (spam-s
 
 @defvar spam-use-ifile
 
-Bogofilter \e$B$K;w$?E}7WJ,@O4o$G$"$k\e(B ifile \e$B$r\e(B @code{spam-split} \e$B$K;H$$$?$$\e(B
-\e$B>l9g$O!"$3$NJQ?t$rM-8z$K$7$F2<$5$$!#\e(B
+Bogofilter \e$B$K;w$?E}7WJ,@O4o$G$"\e(B
+\e$B$k\e(B @command{ifile} \e$B$r\e(B @code{spam-split} \e$B$K;H$$$?$$>l9g$O!"$3$NJQ?t$rM-8z\e(B
+\e$B$K$7$F2<$5$$!#\e(B
 
 @end defvar
 
@@ -21969,9 +22018,9 @@ Emacs Lisp \e$B$K$h$kE}7WJ,@O4o$G$"$k\e(B spam-stat.el \e$B$r\e(B @code{spam-split}
 \e$B%W$K$O8z2L$r5Z$\$5$J$$$3$H$KCm0U$7$F2<$5$$!#\e(B
 @end defvar
 
-\e$B$3$l$O\e(B spam.el \e$B$,\e(B spam-stat.el \e$B$HF/$-9g$&$3$H$r2DG=$K$7$^$9!#\e(B
-spam-stat.el \e$B$O\e(B (Lisp \e$B$@$1$N\e(B) spam \e$BFbIt%G!<%?%Y!<%9$rDs6!$7$^$9$,!"$=$l\e(B
-\e$B$O\e(B ifile \e$B$d\e(B Bogofilter \e$B$H0c$C$F30It%W%m%0%i%`$rI,MW$H$7$^$;$s!#\e(B
+\e$B$3$l$O\e(B @file{spam.el} \e$B$,\e(B @file{spam-stat.el} \e$B$HF/$-9g$&$3$H$r2DG=$K$7$^\e(B
+\e$B$9!#\e(B@file{spam-stat.el} \e$B$O\e(B (Lisp \e$B$@$1$N\e(B) spam \e$BFbIt%G!<%?%Y!<%9$rDs6!$7$^\e(B
+\e$B$9$,!"$=$l$O\e(B ifile \e$B$d\e(B Bogofilter \e$B$H0c$C$F30It%W%m%0%i%`$rI,MW$H$7$^$;$s!#\e(B
 Spam \e$B$H\e(B ham \e$B$N%W%m%;%C%5!<$H\e(B @code{spam-split} \e$B$N$?$a\e(B
 \e$B$N\e(B @code{spam-use-stat} \e$BJQ?t$,Ds6!$5$l$^$9!#\e(B
 
@@ -22211,9 +22260,9 @@ gnus \e$B$O$3$N<o$N_I2a$r%5%]!<%H$7$^$9!#$7$+$7$=$l$K$O$$$/$D$+$N@_Dj$,I,MW\e(B
 \e$B$N<-=q$r;H$C$F2<$5$$!#\e(B
 
 @menu
-* Creating a spam-stat dictionary::  
-* Splitting mail using spam-stat::  
-* Low-level interface to the spam-stat dictionary::  
+* Creating a spam-stat dictionary::
+* Splitting mail using spam-stat::
+* Low-level interface to the spam-stat dictionary::
 @end menu
 
 @node Creating a spam-stat dictionary
@@ -24293,6 +24342,9 @@ Gnus \e$B$OHs>o$KJQ2=$KIY$s$@%W%m%0%i%`$H_I2a$N5,B'$r;H$C$F!"%a!<%k$d%K%e!<\e(B
 X-Faces \e$B%X%C%@!<$NA^F~$,4JC1$K$J$j$^$7$?!#\e(B
 
 @item
+Face \e$B%X%C%@!<$r07$($k$h$&$K$J$j$^$7$?!#\e(B
+
+@item
 \e$B35N,%P%C%U%!$K!"?7$7$$%3%^%s%I\e(B @kbd{/ N} \e$B$O?7Ce%a%C%;!<%8$rA^F~$7!"\e(B
 @kbd{/ o} \e$B$O8E$$%a%C%;!<%8$rA^F~$7$^$9!#\e(B
 
index efa9ad3..904394c 100644 (file)
@@ -565,16 +565,16 @@ Reply, Followup and Post
 * Summary Mail Commands::       Sending mail.
 * Summary Post Commands::       Sending news.
 * Summary Message Commands::    Other Message-related commands.
-* Canceling and Superseding::   
+* Canceling and Superseding::
 
 Marking Articles
 
 * Unread Articles::             Marks for unread articles.
 * Read Articles::               Marks for read articles.
 * Other Marks::                 Marks that do not affect readedness.
-* Setting Marks::               
-* Generic Marking Commands::    
-* Setting Process Marks::       
+* Setting Marks::
+* Generic Marking Commands::
+* Setting Process Marks::
 
 Marking Articles
 
@@ -632,7 +632,7 @@ Various Summary Stuff
 
 * Summary Group Information::   Information oriented commands.
 * Searching for Articles::      Multiple article commands.
-* Summary Generation Commands::  
+* Summary Generation Commands::
 * Really Various Summary Commands::  Those pesky non-conformant commands.
 
 Article Buffer
@@ -720,7 +720,7 @@ Choosing a Mail Back End
 
 Browsing the Web
 
-* Archiving Mail::              
+* Archiving Mail::
 * Web Searches::                Creating groups from articles that match a string.
 * Slashdot::                    Reading the Slashdot comments.
 * Ultimate::                    The Ultimate Bulletin Board systems.
@@ -866,8 +866,8 @@ Thwarting Email Spam
 * Anti-Spam Basics::            Simple steps to reduce the amount of spam.
 * SpamAssassin::                How to use external anti-spam tools.
 * Hashcash::                    Reduce spam by burning CPU time.
-* Filtering Spam Using The Spam ELisp Package::  
-* Filtering Spam Using Statistics with spam-stat::  
+* Filtering Spam Using The Spam ELisp Package::
+* Filtering Spam Using Statistics with spam-stat::
 
 Appendices
 
@@ -1831,7 +1831,7 @@ comment element in the group parameters.
 Newsgroup description.  You need to read the group descriptions
 before these will appear, and to do that, you either have to set
 @code{gnus-read-active-file} or use the group buffer @kbd{M-d}
-command. 
+command.
 
 @item o
 @samp{m} if moderated.
@@ -1928,7 +1928,7 @@ background is dark:
        (defface my-group-face-1
          '((t (:foreground "Red" :bold t))) "First group face")
        (defface my-group-face-2
-         '((t (:foreground "DarkSeaGreen4" :bold t))) 
+         '((t (:foreground "DarkSeaGreen4" :bold t)))
          "Second group face")
        (defface my-group-face-3
          '((t (:foreground "Green4" :bold t))) "Third group face")
@@ -5065,7 +5065,7 @@ the server and display it in the article buffer.
 @item gnus-select-article-hook
 @vindex gnus-select-article-hook
 This hook is called whenever an article is selected.  By default it
-exposes any threads hidden under the selected article.  If you would 
+exposes any threads hidden under the selected article.  If you would
 like each article to be saved in the Agent as you read it, putting
 @code{gnus-agent-fetch-selected-article} on this hook will do so.
 
@@ -5187,7 +5187,7 @@ Select the article buffer (@code{gnus-summary-select-article-buffer}).
 * Summary Mail Commands::       Sending mail.
 * Summary Post Commands::       Sending news.
 * Summary Message Commands::    Other Message-related commands.
-* Canceling and Superseding::   
+* Canceling and Superseding::
 @end menu
 
 
@@ -8226,7 +8226,7 @@ banner something like @samp{Do You Yoo-hoo!?} in all articles he
 sends, you can use the following element to remove them:
 
 @lisp
-("@@yoo-hoo\\.co\\.jp\\'" . 
+("@@yoo-hoo\\.co\\.jp\\'" .
  "\n_+\nDo You Yoo-hoo!\\?\n.*\n.*\n")
 @end lisp
 
@@ -8976,12 +8976,15 @@ buffer in Emacs versions that support them.
 @code{X-Face} headers are small black-and-white images supplied by the
 message headers (@pxref{X-Face}).
 
-Picons, on the other hand, reside on your own system, and Gnus will
-try to match the headers to what you have (@pxref{Picons}).
+@code{Face} headers are small colored images supplied by the message
+headers (@pxref{Face}).
 
 Smileys are those little @samp{:-)} symbols that people like to litter
 their messages with (@pxref{Smileys}).
 
+Picons, on the other hand, reside on your own system, and Gnus will
+try to match the headers to what you have (@pxref{Picons}).
+
 All these functions are toggles---if the elements already exist,
 they'll be removed.
 
@@ -9768,10 +9771,10 @@ Variables related to the display are:
 @item gnus-tree-brackets
 @vindex gnus-tree-brackets
 This is used for differentiating between ``real'' articles and
-``sparse'' articles.  The format is 
+``sparse'' articles.  The format is
 @example
-((@var{real-open} . @var{real-close}) 
- (@var{sparse-open} . @var{sparse-close}) 
+((@var{real-open} . @var{real-close})
+ (@var{sparse-open} . @var{sparse-close})
  (@var{dummy-open} . @var{dummy-close}))
 @end example
 and the default is @code{((?[ . ?]) (?( . ?)) (?@{ . ?@}) (?< . ?>))}.
@@ -10021,7 +10024,7 @@ suggestions you find reasonable.  (Note that
 @menu
 * Summary Group Information::   Information oriented commands.
 * Searching for Articles::      Multiple article commands.
-* Summary Generation Commands::  
+* Summary Generation Commands::
 * Really Various Summary Commands::  Those pesky non-conformant commands.
 @end menu
 
@@ -10960,6 +10963,10 @@ is controlled by @code{gnus-body-boundary-delimiter}.
 
 @xref{X-Face}.
 
+@item gnus-treat-display-face (head)
+
+@xref{Face}.
+
 @item gnus-treat-emphasize (t, head, integer)
 @item gnus-treat-fill-article (t, integer)
 @item gnus-treat-fill-long-lines (t, integer)
@@ -11256,7 +11263,7 @@ press R anyway, this variable might be for you.
 If non-@code{nil}, Gnus also requests confirmation according to
 @code{gnus-confirm-mail-reply-to-news} when replying to mail.  This is
 useful for treating mailing lists like newsgroups.
+
 @end table
 
 
@@ -15285,7 +15292,7 @@ filename is unrelated to the article number in Gnus.  @code{nnmaildir}
 also stores the equivalent of @code{nnml}'s overview files in one file
 per article, so it uses about twice as many inodes as @code{nnml}.  (Use
 @code{df -i} to see how plentiful your inode supply is.)  If this slows
-you down or takes up very much space, consider switching to 
+you down or takes up very much space, consider switching to
 @uref{http://www.namesys.com/, ReiserFS} or another non-block-structured
 file system.
 
@@ -15354,7 +15361,7 @@ Gnus has been getting a bit of a collection of back ends for providing
 interfaces to these sources.
 
 @menu
-* Archiving Mail::              
+* Archiving Mail::
 * Web Searches::                Creating groups from articles that match a string.
 * Slashdot::                    Reading the Slashdot comments.
 * Ultimate::                    The Ultimate Bulletin Board systems.
@@ -18099,7 +18106,7 @@ efficient, and it's not a particularly good idea to interrupt them (with
 @kbd{C-g} or anything else) once you've started one of them.
 
 Note that other functions, e.g. @code{gnus-request-expire-articles},
-might run @code{gnus-agent-expire} for you to keep the agent 
+might run @code{gnus-agent-expire} for you to keep the agent
 synchronized with the group.
 
 The agent parameter @code{agent-enable-expiration} may be used to
@@ -18392,7 +18399,7 @@ may ask:
 @code{gnus-agent-fetch-selected-article} to
 @code{gnus-select-article-hook}.
 
-@item If I read an article while plugged, and the article already exists in 
+@item If I read an article while plugged, and the article already exists in
 the Agent, will it get downloaded once more?
 
 @strong{No}, unless @code{gnus-agent-cache} is @code{nil}.
@@ -21364,7 +21371,7 @@ by default.
 @item gnus-nocem-groups
 @vindex gnus-nocem-groups
 Gnus will look for NoCeM messages in the groups in this list.  The
-default is 
+default is
 @lisp
 ("news.lists.filters" "news.admin.net-abuse.bulletins"
  "alt.nocem.misc" "news.admin.net-abuse.announce")
@@ -21583,139 +21590,14 @@ support images yet.}, is able to display pictures and stuff, so Gnus has
 taken advantage of that.
 
 @menu
-* Picons::                      How to display pictures of what you're reading.
-* Smileys::                     Show all those happy faces the way they were meant to be shown.
 * X-Face::                      Display a funky, teensy black-and-white image.
+* Face::                        Display a funkier, teensier colored image.
+* Smileys::                     Show all those happy faces the way they were meant to be shown.
+* Picons::                      How to display pictures of what you're reading.
 * XVarious::                    Other XEmacsy Gnusey variables.
 @end menu
 
 
-@node Picons
-@subsection Picons
-
-@iftex
-@iflatex
-\include{picons}
-@end iflatex
-@end iftex
-
-So@dots{}  You want to slow down your news reader even more!  This is a
-good way to do so.  It's also a great way to impress people staring
-over your shoulder as you read news.
-
-What are Picons?  To quote directly from the Picons Web site:
-
-@iftex
-@iflatex
-\margindex{}
-@end iflatex
-@end iftex
-
-@quotation
-@dfn{Picons} is short for ``personal icons''.  They're small,
-constrained images used to represent users and domains on the net,
-organized into databases so that the appropriate image for a given
-e-mail address can be found.  Besides users and domains, there are picon
-databases for Usenet newsgroups and weather forecasts.  The picons are
-in either monochrome @code{XBM} format or color @code{XPM} and
-@code{GIF} formats.
-@end quotation
-
-@vindex gnus-picon-databases
-For instructions on obtaining and installing the picons databases,
-point your Web browser at
-@uref{http://www.cs.indiana.edu/picons/ftp/index.html}.
-
-If you are using Debian GNU/Linux, saying @samp{apt-get install
-picons.*} will install the picons where Gnus can find them.
-
-To enable displaying picons, simply make sure that
-@code{gnus-picon-databases} points to the directory containing the
-Picons databases.
-
-The following variables offer control over where things are located.
-
-@table @code
-
-@item gnus-picon-databases
-@vindex gnus-picon-databases
-The location of the picons database.  This is a list of directories
-containing the @file{news}, @file{domains}, @file{users} (and so on)
-subdirectories.  Defaults to @code{("/usr/lib/picon"
-"/usr/local/faces")}.
-
-@item gnus-picon-news-directories
-@vindex gnus-picon-news-directories
-List of subdirectories to search in @code{gnus-picon-databases} for
-newsgroups faces.  @code{("news")} is the default.
-
-@item gnus-picon-user-directories
-@vindex gnus-picon-user-directories
-List of subdirectories to search in @code{gnus-picon-databases} for user
-faces.  @code{("users" "usenix" "local" "misc")} is the default.
-
-@item gnus-picon-domain-directories
-@vindex gnus-picon-domain-directories
-List of subdirectories to search in @code{gnus-picon-databases} for
-domain name faces.  Defaults to @code{("domains")}.  Some people may
-want to add @samp{"unknown"} to this list.
-
-@item gnus-picon-file-types
-@vindex gnus-picon-file-types
-Ordered list of suffixes on picon file names to try.  Defaults to
-@code{("xpm" "gif" "xbm")} minus those not built-in your Emacs.
-
-@end table
-
-@node Smileys
-@subsection Smileys
-@cindex smileys
-
-@iftex
-@iflatex
-\gnusfig{-3cm}{0.5cm}{\epsfig{figure=ps/BigFace,height=20cm}}
-\input{smiley}
-@end iflatex
-@end iftex
-
-@dfn{Smiley} is a package separate from Gnus, but since Gnus is
-currently the only package that uses Smiley, it is documented here.
-
-In short---to use Smiley in Gnus, put the following in your
-@file{~/.gnus.el} file:
-
-@lisp
-(setq gnus-treat-display-smileys t)
-@end lisp
-
-Smiley maps text smiley faces---@samp{:-)}, @samp{8-)}, @samp{:-(} and
-the like---to pictures and displays those instead of the text smiley
-faces.  The conversion is controlled by a list of regexps that matches
-text and maps that to file names.
-
-@vindex smiley-regexp-alist
-The alist used is specified by the @code{smiley-regexp-alist}
-variable.  The first item in each element is the regexp to be matched;
-the second element is the regexp match group that is to be replaced by
-the picture; and the third element is the name of the file to be
-displayed.
-
-The following variables customize where Smiley will look for these
-files:
-
-@table @code
-
-@item smiley-data-directory
-@vindex smiley-data-directory
-Where Smiley will look for smiley faces files.
-
-@item gnus-smiley-file-types
-@vindex gnus-smiley-file-types
-List of suffixes on smiley file names to try.
-
-@end table
-
-
 @node X-Face
 @subsection X-Face
 @cindex x-face
@@ -21727,7 +21609,6 @@ readers.
 
 @cindex x-face
 @findex gnus-article-display-x-face
-@findex gnus-article-x-face-command
 @vindex gnus-article-x-face-command
 @vindex gnus-article-x-face-too-ugly
 @iftex
@@ -21811,6 +21692,173 @@ Using the last function would be something like this:
 @end lisp
 
 
+@node Face
+@subsection Face
+@cindex face
+
+@c #### FIXME: faces and x-faces'implementations should really be harmonized.
+
+@code{Face} headers are essentially a funkier version of @code{X-Face}
+ones. They describe a 48x48 pixel colored image that's supposed to
+represent the author of the message.
+
+@cindex face
+@findex gnus-article-display-face
+The contents of a @code{Face} header must be a base64 encoded PNG image.
+See @url{http://quimby.gnus.org/circus/face/} for the precise
+specifications.
+
+Gnus provides a few convenience functions and variables to allow
+easier insertion of Face headers in outgoing messages.
+
+@findex gnus-convert-png-to-face
+@code{gnus-convert-png-to-face} takes a 48x48 PNG image, no longer than
+726 bytes long, and converts it to a face.
+
+@findex gnus-face-from-file
+@vindex gnus-convert-image-to-face-command
+@code{gnus-face-from-file} takes a JPEG file as the parameter, and then
+converts the file to Face format by using the
+@code{gnus-convert-image-to-face-command} shell command.
+
+Here's how you would typically use this function. Put something like the
+following in your @file{~/.gnus.el} file:
+
+@lisp
+(setq message-required-news-headers
+      (nconc message-required-news-headers
+             (list '(Face . (lambda ()
+                              (gnus-face-from-file "~/face.jpg"))))))
+@end lisp
+
+
+@node Smileys
+@subsection Smileys
+@cindex smileys
+
+@iftex
+@iflatex
+\gnusfig{-3cm}{0.5cm}{\epsfig{figure=ps/BigFace,height=20cm}}
+\input{smiley}
+@end iflatex
+@end iftex
+
+@dfn{Smiley} is a package separate from Gnus, but since Gnus is
+currently the only package that uses Smiley, it is documented here.
+
+In short---to use Smiley in Gnus, put the following in your
+@file{~/.gnus.el} file:
+
+@lisp
+(setq gnus-treat-display-smileys t)
+@end lisp
+
+Smiley maps text smiley faces---@samp{:-)}, @samp{8-)}, @samp{:-(} and
+the like---to pictures and displays those instead of the text smiley
+faces.  The conversion is controlled by a list of regexps that matches
+text and maps that to file names.
+
+@vindex smiley-regexp-alist
+The alist used is specified by the @code{smiley-regexp-alist}
+variable.  The first item in each element is the regexp to be matched;
+the second element is the regexp match group that is to be replaced by
+the picture; and the third element is the name of the file to be
+displayed.
+
+The following variables customize where Smiley will look for these
+files:
+
+@table @code
+
+@item smiley-data-directory
+@vindex smiley-data-directory
+Where Smiley will look for smiley faces files.
+
+@item gnus-smiley-file-types
+@vindex gnus-smiley-file-types
+List of suffixes on smiley file names to try.
+
+@end table
+
+
+@node Picons
+@subsection Picons
+
+@iftex
+@iflatex
+\include{picons}
+@end iflatex
+@end iftex
+
+So@dots{}  You want to slow down your news reader even more!  This is a
+good way to do so.  It's also a great way to impress people staring
+over your shoulder as you read news.
+
+What are Picons?  To quote directly from the Picons Web site:
+
+@iftex
+@iflatex
+\margindex{}
+@end iflatex
+@end iftex
+
+@quotation
+@dfn{Picons} is short for ``personal icons''.  They're small,
+constrained images used to represent users and domains on the net,
+organized into databases so that the appropriate image for a given
+e-mail address can be found.  Besides users and domains, there are picon
+databases for Usenet newsgroups and weather forecasts.  The picons are
+in either monochrome @code{XBM} format or color @code{XPM} and
+@code{GIF} formats.
+@end quotation
+
+@vindex gnus-picon-databases
+For instructions on obtaining and installing the picons databases,
+point your Web browser at
+@uref{http://www.cs.indiana.edu/picons/ftp/index.html}.
+
+If you are using Debian GNU/Linux, saying @samp{apt-get install
+picons.*} will install the picons where Gnus can find them.
+
+To enable displaying picons, simply make sure that
+@code{gnus-picon-databases} points to the directory containing the
+Picons databases.
+
+The following variables offer control over where things are located.
+
+@table @code
+
+@item gnus-picon-databases
+@vindex gnus-picon-databases
+The location of the picons database.  This is a list of directories
+containing the @file{news}, @file{domains}, @file{users} (and so on)
+subdirectories.  Defaults to @code{("/usr/lib/picon"
+"/usr/local/faces")}.
+
+@item gnus-picon-news-directories
+@vindex gnus-picon-news-directories
+List of subdirectories to search in @code{gnus-picon-databases} for
+newsgroups faces.  @code{("news")} is the default.
+
+@item gnus-picon-user-directories
+@vindex gnus-picon-user-directories
+List of subdirectories to search in @code{gnus-picon-databases} for user
+faces.  @code{("users" "usenix" "local" "misc")} is the default.
+
+@item gnus-picon-domain-directories
+@vindex gnus-picon-domain-directories
+List of subdirectories to search in @code{gnus-picon-databases} for
+domain name faces.  Defaults to @code{("domains")}.  Some people may
+want to add @samp{"unknown"} to this list.
+
+@item gnus-picon-file-types
+@vindex gnus-picon-file-types
+Ordered list of suffixes on picon file names to try.  Defaults to
+@code{("xpm" "gif" "xbm")} minus those not built-in your Emacs.
+
+@end table
+
+
 @node XVarious
 @subsection Various XEmacs Variables
 
@@ -21920,8 +21968,8 @@ This is annoying.  Here's what you can do about it.
 * Anti-Spam Basics::            Simple steps to reduce the amount of spam.
 * SpamAssassin::                How to use external anti-spam tools.
 * Hashcash::                    Reduce spam by burning CPU time.
-* Filtering Spam Using The Spam ELisp Package::  
-* Filtering Spam Using Statistics with spam-stat::  
+* Filtering Spam Using The Spam ELisp Package::
+* Filtering Spam Using Statistics with spam-stat::
 @end menu
 
 @node The problem of spam
@@ -21967,13 +22015,13 @@ mail can be useful.
 
 Another approach to filtering e-mail is the distributed spam
 processing, for instance DCC implements such a system.  In essence,
-@code{N} systems around the world agree that a machine @samp{X} in
+@var{N} systems around the world agree that a machine @var{X} in
 China, Ghana, or California is sending out spam e-mail, and these
-@code{N} systems enter @samp{X} or the spam e-mail from @samp{X} into
+@var{N} systems enter @var{X} or the spam e-mail from @var{X} into
 a database.  The criteria for spam detection vary---it may be the
 number of messages sent, the content of the messages, and so on.  When
 a user of the distributed processing system wants to find out if a
-message is spam, he consults one of those @code{N} systems.
+message is spam, he consults one of those @var{N} systems.
 
 Distributed spam processing works very well against spammers that send
 a large number of messages at once, but it requires the user to set up
@@ -22067,7 +22115,7 @@ to non-existent domains is yucky, in my opinion.
 @cindex DCC
 
 The days where the hints in the previous section was sufficient in
-avoiding spam is coming to an end.  There are many tools out there
+avoiding spam are coming to an end.  There are many tools out there
 that claim to reduce the amount of spam you get.  This section could
 easily become outdated fast, as new products replace old, but
 fortunately most of these tools seem to have similar interfaces.  Even
@@ -22077,7 +22125,7 @@ easy to adapt it to most other tools.
 If the tool you are using is not installed on the mail server, you
 need to invoke it yourself.  Ideas on how to use the
 @code{:postscript} mail source parameter (@pxref{Mail Source
-Specifiers}) follows.
+Specifiers}) follow.
 
 @lisp
 (setq mail-sources
@@ -22087,8 +22135,8 @@ Specifiers}) follows.
              :postscript "mv %t /tmp/foo; formail -bs spamc < /tmp/foo > %t")))
 @end lisp
 
-Once you managed to process your incoming spool somehow, thus making
-the mail contain e.g. a header indicating it is spam, you are ready to
+Once you manage to process your incoming spool somehow, thus making
+the mail contain e.g.@: a header indicating it is spam, you are ready to
 filter it out.  Using normal split methods (@pxref{Splitting Mail}):
 
 @lisp
@@ -22143,7 +22191,7 @@ spam.  And here is the nifty function:
 
 A novel technique to fight spam is to require senders to do something
 costly for each message they send.  This has the obvious drawback that
-you cannot rely on that everyone in the world uses this technique,
+you cannot rely on everyone in the world using this technique,
 since it is not part of the Internet standards, but it may be useful
 in smaller communities.
 
@@ -22175,7 +22223,7 @@ like:
 (add-hook 'message-send-hook 'mail-add-payment)
 @end lisp
 
-The @code{hashcash.el} library can be found in the Gnus development
+The @file{hashcash.el} library can be found in the Gnus development
 contrib directory or at
 @uref{http://users.actrix.gen.nz/mycroft/hashcash.el}.
 
@@ -22215,13 +22263,13 @@ a useful contribution, however.
 @cindex spam filtering
 @cindex spam
 
-The idea behind @code{spam.el} is to have a control center for spam detection
-and filtering in Gnus.  To that end, @code{spam.el} does two things: it
+The idea behind @file{spam.el} is to have a control center for spam detection
+and filtering in Gnus.  To that end, @file{spam.el} does two things: it
 filters incoming mail, and it analyzes mail known to be spam or ham.
-@emph{Ham} is the name used throughout @code{spam.el} to indicate
+@dfn{Ham} is the name used throughout @file{spam.el} to indicate
 non-spam messages.
 
-So, what happens when you load @code{spam.el}?  First of all, you get
+So, what happens when you load @file{spam.el}?  First of all, you get
 the following keyboard commands:
 
 @table @kbd
@@ -22253,7 +22301,7 @@ You must have Bogofilter installed for that command to work properly.
 
 @end table
 
-Also, when you load @code{spam.el}, you will be able to customize its
+Also, when you load @file{spam.el}, you will be able to customize its
 variables.  Try @code{customize-group} on the @samp{spam} variable
 group.
 
@@ -22357,7 +22405,7 @@ gnus-spam-process-destinations}).  The ultimate location is a group
 name.  If the @code{spam-process-destination} parameter is not set,
 the spam articles are only expired.
 
-To use the @code{spam.el} facilities for incoming mail filtering, you
+To use the @file{spam.el} facilities for incoming mail filtering, you
 must add the following to your fancy split list
 @code{nnmail-split-fancy} or @code{nnimap-split-fancy}:
 
@@ -22419,7 +22467,7 @@ split.  Go crazy.
 You still have to have specific checks such as
 @code{spam-use-regex-headers} set to t, even if you specifically
 invoke @code{spam-split} with the check.  The reason is that when
-loading @code{spam.el}, some conditional loading is done depending on
+loading @file{spam.el}, some conditional loading is done depending on
 what @code{spam-use-xyz} variables you have set.
 
 @emph{Note for IMAP users}
@@ -22447,17 +22495,17 @@ The following are the methods you can use to control the behavior of
 @code{spam-split} and their corresponding spam and ham processors:
 
 @menu
-* Blacklists and Whitelists::   
-* BBDB Whitelists::             
-* Gmane Spam Reporting::        
-* Anti-spam Hashcash Payments::  
-* Blackholes::                  
-* Regular Expressions Header Matching::  
-* Bogofilter::                  
-* ifile spam filtering::        
-* spam-stat spam filtering::    
+* Blacklists and Whitelists::
+* BBDB Whitelists::
+* Gmane Spam Reporting::
+* Anti-spam Hashcash Payments::
+* Blackholes::
+* Regular Expressions Header Matching::
+* Bogofilter::
+* ifile spam filtering::
+* spam-stat spam filtering::
 * SpamOracle::
-* Extending the spam elisp package::  
+* Extending the spam elisp package::
 @end menu
 
 @node Blacklists and Whitelists
@@ -22628,7 +22676,7 @@ list is fairly comprehensive, but make sure to let us know if it
 contains outdated servers.
 
 The blackhole check uses the @code{dig.el} package, but you can tell
-@code{spam.el} to use @code{dns.el} instead for better performance if
+@file{spam.el} to use @code{dns.el} instead for better performance if
 you set @code{spam-use-dig} to @code{nil}.  It is not recommended at
 this time to set @code{spam-use-dig} to @code{nil} despite the
 possible performance improvements, because some users may be unable to
@@ -22761,7 +22809,7 @@ database directory.
 
 @end defvar
 
-The Bogofilter mail classifier is similar to ifile in intent and
+The Bogofilter mail classifier is similar to @command{ifile} in intent and
 purpose.  A ham and a spam processor are provided, plus the
 @code{spam-use-bogofilter} and @code{spam-use-bogofilter-headers}
 variables to indicate to spam-split that Bogofilter should either be
@@ -22776,7 +22824,7 @@ Bogofilter was used to test this functionality.
 
 @defvar spam-use-ifile
 
-Enable this variable if you want @code{spam-split} to use ifile, a
+Enable this variable if you want @code{spam-split} to use @command{ifile}, a
 statistical analyzer similar to Bogofilter.
 
 @end defvar
@@ -22843,11 +22891,11 @@ of non-spam messages.  Note that this ham processor has no effect in
 @emph{spam} or @emph{unclassified} groups.
 @end defvar
 
-This enables spam.el to cooperate with spam-stat.el.  spam-stat.el
-provides an internal (Lisp-only) spam database, which unlike ifile or
-Bogofilter does not require external programs.  A spam and a ham
-processor, and the @code{spam-use-stat} variable for @code{spam-split}
-are provided.
+This enables @file{spam.el} to cooperate with @file{spam-stat.el}.
+@file{spam-stat.el} provides an internal (Lisp-only) spam database,
+which unlike ifile or Bogofilter does not require external programs.
+A spam and a ham processor, and the @code{spam-use-stat} variable for
+@code{spam-split} are provided.
 
 @node SpamOracle
 @subsubsection Using SpamOracle with Gnus
@@ -22868,11 +22916,11 @@ One possibility is to run SpamOracle as a @code{:prescript} from the
 @xref{Mail Source Specifiers}, (@pxref{SpamAssassin}).  This method has
 the advantage that the user can see the @emph{X-Spam} headers.
 
-The easiest method is to make @code{spam.el} (@pxref{Filtering Spam
+The easiest method is to make @file{spam.el} (@pxref{Filtering Spam
 Using The Spam ELisp Package}) call SpamOracle.
 
-@vindex spam-use-spamoracle 
-To enable SpamOracle usage by @code{spam.el}, set the variable
+@vindex spam-use-spamoracle
+To enable SpamOracle usage by @file{spam.el}, set the variable
 @code{spam-use-spamoracle} to @code{t} and configure the
 @code{nnmail-split-fancy} or @code{nnimap-split-fancy} as described in
 the section @xref{Filtering Spam Using The Spam ELisp Package}.  In
@@ -22915,7 +22963,7 @@ false hits or misses, SpamOracle needs training.  SpamOracle learns the
 characteristics of your spam mails.  Using the @emph{add} mode
 (training mode) one has to feed good (ham) and spam mails to
 SpamOracle.  This can be done by pressing @kbd{|} in the Summary buffer
-and pipe the mail to a SpamOracle process or using @code{spam.el}'s
+and pipe the mail to a SpamOracle process or using @file{spam.el}'s
 spam- and ham-processors, which is much more convenient.  For a
 detailed description of spam- and ham-processors, see @xref{Filtering Spam Using The Spam ELisp Package}.
 
@@ -22995,7 +23043,7 @@ For processing spam and ham messages, provide the following:
 @enumerate
 
 @item
-code 
+code
 
 Note you don't have to provide a spam or a ham processor.  Only
 provide them if Blackbox supports spam or ham processing.
@@ -23081,9 +23129,9 @@ collections, and save it.  And last but not least, you need to use
 this dictionary in your fancy mail splitting rules.
 
 @menu
-* Creating a spam-stat dictionary::  
-* Splitting mail using spam-stat::  
-* Low-level interface to the spam-stat dictionary::  
+* Creating a spam-stat dictionary::
+* Splitting mail using spam-stat::
+* Low-level interface to the spam-stat dictionary::
 @end menu
 
 @node Creating a spam-stat dictionary
@@ -24919,7 +24967,7 @@ Dired integration
 @code{gnus-dired-minor-mode} installs key bindings in dired buffers to send
 a file as an attachment (@kbd{C-c C-a}), open a file using the appropriate
 mailcap entry (@kbd{C-c C-l}), and print a file using the mailcap entry
-(@kbd{C-c P}).  It is enabled with 
+(@kbd{C-c P}).  It is enabled with
 @lisp
 (add-hook 'dired-mode-hook 'turn-on-gnus-dired-mode)
 @end lisp
@@ -24962,14 +25010,14 @@ If @code{auto-compression-mode} is enabled, attachments are automatically
 decompressed when activated.
 
 @item
-If the new option @code{nnml-use-compressed-files} is non-@code{nil}, 
+If the new option @code{nnml-use-compressed-files} is non-@code{nil},
 the nnml back end allows compressed message files.
 
 @item
 Signed article headers (X-PGP-Sig) can be verified with @kbd{W p}.
 
 @item
-The Summary Buffer uses an arrow in the fringe to indicate the current 
+The Summary Buffer uses an arrow in the fringe to indicate the current
 article.  Use @code{(setq gnus-summary-display-arrow nil)} to disable it.
 
 @item
@@ -24989,14 +25037,14 @@ The new @code{recent} mark @samp{.} indicates newly arrived messages (as
 opposed to old but unread messages).
 
 @item
-The new option @code{gnus-gcc-mark-as-read} automatically marks 
+The new option @code{gnus-gcc-mark-as-read} automatically marks
 Gcc articles as read.
 
 @item
 The nndoc back end now supports mailman digests and exim bounces.
 
 @item
-Gnus supports RFC 2369 mailing list headers, and adds a number of 
+Gnus supports RFC 2369 mailing list headers, and adds a number of
 related commands in mailing list groups.  @xref{Mailing List}.
 
 @item
@@ -25140,6 +25188,9 @@ are also new.  @xref{Thwarting Email Spam}.
 Easy inclusion of X-Faces headers.
 
 @item
+Face headers handling.
+
+@item
 In the summary buffer, the new command @kbd{/ N} inserts new messages
 and @kbd{/ o} inserts old messages.
 
@@ -25734,7 +25785,7 @@ specified by RFC 1153.
 @cindex mail filtering (splitting)
 The action of sorting your emails according to certain rules. Sometimes
 incorrectly called mail filtering.
+
 @end table
 
 
@@ -25964,7 +26015,7 @@ Sometimes, a problem do not directly generate an elisp error but
 manifests itself by causing Gnus to be very slow.  In these cases, you
 can use @kbd{M-x toggle-debug-on-quit} and press @kbd{C-g} when things are
 slow, and then try to analyze the backtrace (repeating the procedure
-helps isolating the real problem areas).  
+helps isolating the real problem areas).
 
 A fancier approach is to use the elisp profiler, ELP.  The profiler is
 (or should be) fully documented elsewhere, but to get you started