Synch with the released version of Oort Gnus v0.04.
authoryamaoka <yamaoka>
Mon, 7 Jan 2002 05:13:17 +0000 (05:13 +0000)
committeryamaoka <yamaoka>
Mon, 7 Jan 2002 05:13:17 +0000 (05:13 +0000)
All modules will be merged into `t-gnus-6_15' branch, later...

67 files changed:
ChangeLog
etc/gnus/catchup.xpm
etc/gnus/cu-exit.xpm
etc/gnus/describe-group.xpm
etc/gnus/exit-gnus.xpm
etc/gnus/exit-summ.xpm
etc/gnus/followup.xpm
etc/gnus/fuwo.xpm
etc/gnus/get-news.xpm
etc/gnus/gnntg.xpm
etc/gnus/kill-group.xpm
etc/gnus/mail-reply.xpm
etc/gnus/next-ur.xpm
etc/gnus/oort.xface [new file with mode: 0644]
etc/gnus/post.xpm
etc/gnus/prev-ur.xpm
etc/gnus/reply-wo.xpm
etc/gnus/reply.xpm
etc/gnus/rot13.xpm
etc/gnus/save-aif.xpm
etc/gnus/save-art.xpm
etc/gnus/subscribe.xpm
etc/gnus/unsubscribe.xpm
etc/gnus/uu-decode.xpm
etc/gnus/uu-post.xpm
lisp/ChangeLog
lisp/compface.el [new file with mode: 0644]
lisp/dgnushack.el
lisp/gnus-agent.el
lisp/gnus-art.el
lisp/gnus-cite.el
lisp/gnus-delay.el
lisp/gnus-draft.el
lisp/gnus-ems.el
lisp/gnus-fun.el [new file with mode: 0644]
lisp/gnus-group.el
lisp/gnus-int.el
lisp/gnus-mailcap.el
lisp/gnus-offline.el
lisp/gnus-picon.el
lisp/gnus-salt.el
lisp/gnus-srvr.el
lisp/gnus-sum.el
lisp/gnus-topic.el
lisp/gnus-util.el
lisp/gnus-vers.el
lisp/gnus-win.el
lisp/gnus-xmas.el
lisp/gnus.el
lisp/ietf-drums.el
lisp/imap.el
lisp/lpath.el
lisp/mail-parse.el
lisp/message.el
lisp/mm-decode.el
lisp/mm-view.el
lisp/nnmail.el
lisp/nnrss.el
lisp/rfc2047.el
lisp/sha1-el.el
lisp/smiley-ems.el
texi/ChangeLog
texi/emacs-mime.texi
texi/gnus-ja.texi
texi/gnus.texi
texi/message-ja.texi
texi/message.texi

index cd7a520..ead05ae 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2002-01-07  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-vers.el (gnus-revision-number): Increment to 10.
+
+       * lisp/gnus-picon.el: Require `mail-parse'.
+
+       * lisp/gnus-fun.el: Autoload "compface" for `uncompface'.
+
+       * lisp/sha1-el.el (sha1-use-external): Replace `executable-find'
+       with `exec-installed-p'.
+
 2002-01-06  TSUCHIYA Masatoshi  <tsuchiya@namazu.org>
 
        * lisp/gnus-namazu.el: Update comments.
index 832c4eb..cba8497 100644 (file)
@@ -1,73 +1,33 @@
 /* XPM */
-static char *magick[] = {
-/* columns rows colors chars-per-pixel */
-"24 24 43 1",
-"  c Gray0",
-". c #099909990999",
-"X c Gray6",
-"o c #133313331333",
-"O c Gray9",
-"+ c Gray11",
-"@ c Gray12",
-"# c #23f323f323f3",
-"$ c Gray15",
-"% c #2ff12ff12ff1",
-"& c #3fff3fff3fff",
-"* c Gray25",
-"= c #4ccc4ccc4ccc",
-"- c #519151915191",
-"; c #53ed53ed53ed",
-": c #565b565b565b",
-"> c Gray35",
-", c #5b1a5b1a5b1a",
-"< c #5fe95fe95fe9",
-"1 c #626262626262",
-"2 c Gray40",
-"3 c #67e767e767e7",
-"4 c Gray42",
-"5 c #6fff6fff6fff",
-"6 c Gray45",
-"7 c Gray46",
-"8 c #77e977e977e9",
-"9 c #7bdb7bdb7bdb",
-"0 c #7ccc7ccc7ccc",
-"q c Gray50",
-"w c #866586658665",
-"e c Gray56",
-"r c Gray60",
-"t c #9bcb9bcb9bcb",
-"y c #9fff9fff9fff",
-"u c #a7c7a7c7a7c7",
-"i c #af0eaf0eaf0e",
-"p c Gray70",
-"a c Gray75",
-"s c Gray81",
-"d c #dfffdfffdfff",
-"f c #efffefffefff",
-"g c Gray100",
-/* pixels */
-"aaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaaaaaaaaaaaaaaaaaaaa",
-"aaaaaa7$$*uaaaaaaaaareep",
-"aaaaaa$rr6<aaaaaaaae;==>",
-"aaaaaa7<r6<aaaaaaaa<6rr$",
-"9&&&&&&>6;aaaareeeee#rw*",
-"&aqqagga@<<<7e7qqqqqq=:u",
-"33e4qgggsaa%1Oa&&&ggge<a",
-"17a9ygf7%%%%#=$aa%ggga<a",
-"7aa&gga<aaaae$>ae7ggya<a",
-"aa;sgg;uaaaapepa<agg&a<a",
-"au;&&&%aaaaaaaae<aaa;a6.",
-"a<aggg%aaaaaaaa3qqq&e<:o",
-"r7<5gg%aaaaaaaaXyggqeaue",
-"6gs$6fa=re6666=s@egy3rrr",
-"ga>r=aa=r6 <qqdd3=yg&rrr",
-"&>er=aa=r6 aggg=wr&g&rrr",
-"rrrrr$a<:6 @$$$rri=d5qrr",
-"rrrrr<===6$wrrrrrr6&qo6r",
-"rrrrrrrrrewrrrrrrr6   oq",
-"rrrrrrrrrrrrrrrrrrrrrrrr",
-"rrrrrrrrrrrrrrrrrrrrrrrr",
-"rrrrrrrrrrrrrrrrrrrrrrrr"
-};
+static char * catchup_xpm[] = {
+"24 24 6 1",
+"      c None",
+".     c #FFFFFFFFFFFF",
+"X     c #E1E1E0E0E0E0",
+"o     c #A5A5A5A59595",
+"O     c #999999999999",
+"+     c #000000000000",
+"                        ",
+"                        ",
+"                        ",
+"                        ",
+"                        ",
+"                        ",
+"                        ",
+"            .           ",
+"         .  .X          ",
+"       ...  .oX  .      ",
+"     ..oooX.oXo  .X     ",
+"    .oooXXXX..oXXoXX    ",
+"    .oXXXX.XoX.oXooX    ",
+"     X...X.X.XX.XoXX    ",
+"     Xo..X.XXX.XXXX     ",
+"   . Xo.oXX..XXXXXX     ",
+"OOOOXoXXXXXo.XXXXX++OOOO",
+"OOOOOX..X.XXXXXXXX++OOOO",
+"OOOOOX..XXXXXXXXX++OOOOO",
+"OOOOOOXXXXXXXXX+++OOOOOO",
+"OOOOOOOOOXXXX++++OOOOOOO",
+"OOOOOOOOO+++++OOOOOOOOOO",
+"OOOOOOOOOO+OOOOOOOOOOOOO",
+"OOOOOOOOOOOOOOOOOOOOOOOO"};
index bc051f8..1723622 100644 (file)
@@ -1,64 +1,31 @@
 /* XPM */
-static char *magick[] = {
-/* columns rows colors chars-per-pixel */
-"24 24 34 1",
-"  c Gray0",
-". c #0bfb0bfb0bfb",
-"X c Gray6",
-"o c Gray9",
-"O c Gray11",
-"+ c Gray12",
-"@ c #23f323f323f3",
-"# c Gray15",
-"$ c #2ff52ff52ff5",
-"% c #3fff3fff3fff",
-"& c Gray25",
-"* c Gray28",
-"= c #4ccc4ccc4ccc",
-"- c #53e853e853e8",
-"; c #5b1a5b1a5b1a",
-": c #5fef5fef5fef",
-"> c #67e767e767e7",
-", c Gray42",
-"< c #6ff76ff76ff7",
-"1 c #77dc77dc77dc",
-"2 c Gray50",
-"3 c #866586658665",
-"4 c #88a888a888a8",
-"5 c Gray56",
-"6 c Gray60",
-"7 c #9bcb9bcb9bcb",
-"8 c #9fff9fff9fff",
-"9 c #a7d7a7d7a7d7",
-"0 c Gray70",
-"q c #b635b635b635",
-"w c Gray75",
-"e c Gray78",
-"r c #dfffdfffdfff",
-"t c Gray100",
-/* pixels */
-"wwwwwwwwwwwwwwwwwwwwwwww",
-"wwwwwwwwwwwwwwwwwwwwwwww",
-"wwwwwwwwwwwwwwwwwwwwwwww",
-"wwwwwwwwwwwwwwwwwwwwwwww",
-"wwwwwwwwwwwwwwwwwwwwwwww",
-"wwwwwwwwwww-$$$-wwwwwwww",
-"wwwwwww9-$w$ttt$wwwwwwww",
-"wwwwww:<ro:1ttto::wwwwww",
-"wwww1$wrt5 wttt$w$$1wwww",
-"wwww1.ttt5 5ww$ttt.1wwww",
-"wwwww$8tt+222% 222$wwwww",
-"wwwww$%tt%ttt2 ww$6wwwww",
-"wwwww$52t%ttt2wtt%wwwwww",
-"wwwww1 %r%ttt2w22>wwwwww",
-"wwwwww,::X%%%+$w:5wwwwww",
-"qqqqqq4*5%t%t255;qqqqqqq",
-"6666663#*+2+2%**=6666666",
-"6666666=0$w$0*0&36666666",
-"6666666=,$9@5*,#66666666",
-"6666666= +% 2% #66666666",
-"6666666= %e@<2 #66666666",
-"6666666:#     +666666666",
-"666666666=====3666666666",
-"666666666666666666666666"
-};
+static char * cu_exit_xpm[] = {
+"24 24 4 1",
+"      c None",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"o     c #999999999999",
+"                        ",
+"                        ",
+"                        ",
+"                        ",
+"                        ",
+"           .....        ",
+"        .. .XXX.        ",
+"      ..X..XXXX...      ",
+"     .XXXX.XXXX.X...    ",
+"    ..XXXX.XXX.XXX..    ",
+"     .XXX..........     ",
+"     .XXX.XXX.XXX..     ",
+"      .XX.XXX.XXX.      ",
+"      .XX.XXX.XX..      ",
+"      ............      ",
+"       .X.X.X.X..       ",
+"ooooooo..........ooooooo",
+"ooooooo.X.X.X.X.oooooooo",
+"ooooooo.........oooooooo",
+"ooooooo..X...X..oooooooo",
+"ooooooo...X.X...oooooooo",
+"ooooooo........ooooooooo",
+"ooooooooo.....oooooooooo",
+"oooooooooooooooooooooooo"};
index e191277..7f7ad67 100644 (file)
@@ -1,72 +1,32 @@
 /* XPM */
-static char *magick[] = {
-/* columns rows colors chars-per-pixel */
-"24 24 42 1",
-"  c Gray0",
-". c #099909990999",
-"X c #0bfb0bfb0bfb",
-"o c #133313331333",
-"O c Gray9",
-"+ c Gray11",
-"@ c #23f323f323f3",
-"# c Gray15",
-"$ c #2d8d2d8d2d8d",
-"% c #399939993999",
-"& c #433243324332",
-"* c #4ccc4ccc4ccc",
-"= c #519151915191",
-"- c #53e353e353e3",
-"; c #565656565656",
-": c Gray36",
-"> c #5fdf5fdf5fdf",
-", c Gray42",
-"< c #6fff6fff6fff",
-"1 c Gray45",
-"2 c #77f777f777f7",
-"3 c #7ccc7ccc7ccc",
-"4 c Gray50",
-"5 c #865a865a865a",
-"6 c Gray58",
-"7 c Gray60",
-"8 c #9bfb9bfb9bfb",
-"9 c Gray62",
-"0 c #9fff9fff9fff",
-"q c #a0c0a0c0a0c0",
-"w c Gray64",
-"e c Gray65",
-"r c Gray70",
-"t c #b635b635b635",
-"y c Gray73",
-"u c Gray75",
-"i c #d332d332d332",
-"p c Gray85",
-"a c #e665e665e665",
-"s c #eccbeccbeccb",
-"d c #f998f998f998",
-"f c Gray100",
-/* pixels */
-"&77&77&77&77&77&77&77&77",
-"777777777777777777777777",
-"77777777777777777iaaa777",
-"&77&77&77&77&77<ff<fffp0",
-"77777777777777uffffffffp",
-"7777777777777udfffffffff",
-"&77&77&77&77<ff<ff<ff<ff",
-"777777777777ffffffffffff",
-"777777777777ffffffffffff",
-"&77&77&77&77<ff<ff<ff<ff",
-"777777777777ffffffffffff",
-"777777777777ffffffffffff",
-"&77&77&77&77:ff<ff<ff<ff",
-"777777777777rfffffffffff",
-"77777&##37770pffffffffff",
-"&77%-6ty-#77&7i<ff<ff<fs",
-"777*5w7wy*17777pffffffae",
-"777$13&7w+*77770rsfffre7",
-"&73X:@3*1 *7&77&77&77&77",
-"71o2;o***o17777777777777",
-"3o,**X%*X377777777777777",
-"XO,  +##3&77&77&77&77&77",
-":;o #50w7777777777777777",
-"@oX+57707777777777777777"
-};
+static char * describe_group_xpm[] = {
+"24 24 5 1",
+".     c None",
+"      c #000000000000",
+"o     c #FFFFF5F5ACAC",
+"+     c #E1E1E0E0E0E0",
+"@     c #C7C7C6C6C6C6",
+" .. .. .. .. .. .. .. ..",
+"........................",
+".................oooo...",
+" .. .. .. .. .. oo oo o.",
+"..............oooooooooo",
+".............ooooooooooo",
+" .. .. .. .. oo oo oo oo",
+"............oooooooooooo",
+"............oooooooooooo",
+" .. .. .. .. oo oo oo oo",
+"............oooooooooooo",
+"............oooooooooooo",
+" .. .. .. .. oo oo oo oo",
+"............oooooooooooo",
+".....    ...oooooooooooo",
+" ..   ++  .. .o oo oo oo",
+"...  @@@+  ....ooooooooo",
+"...     @  ....oooooooo.",
+" .         . .. .. .. ..",
+".         ..............",
+"        ................",
+"       .. .. .. .. .. ..",
+"      ..................",
+"    ...................."};
index d910b55..534f3c2 100644 (file)
@@ -1,76 +1,33 @@
 /* XPM */
-static char *magick[] = {
-/* columns rows colors chars-per-pixel */
-"24 24 46 1",
-"  c Gray0",
-". c Gray6",
-"X c #133313331333",
-"o c Gray11",
-"O c Gray12",
-"+ c Gray15",
-"@ c #2ff82ff82ff8",
-"# c Gray20",
-"$ c #399939993999",
-"% c #3fff3fff3fff",
-"& c Gray25",
-"* c Gray28",
-"= c #4ccc4ccc4ccc",
-"- c #53e353e353e3",
-"; c #565e565e565e",
-": c #5b1a5b1a5b1a",
-"> c #5ff55ff55ff5",
-", c #626262626262",
-"< c Gray40",
-"1 c #67e767e767e7",
-"2 c Gray42",
-"3 c #6ff96ff96ff9",
-"4 c Gray45",
-"5 c #77d777d777d7",
-"6 c #7ccc7ccc7ccc",
-"7 c Gray50",
-"8 c Gray56",
-"9 c #97f797f797f7",
-"0 c Gray60",
-"q c #9bd19bd19bd1",
-"w c #9ff29ff29ff2",
-"e c #a7cba7cba7cb",
-"r c Gray67",
-"t c #afd5afd5afd5",
-"y c Gray70",
-"u c Gray75",
-"i c #c3c3c3c3c3c3",
-"p c Gray78",
-"a c #cbcbcbcbcbcb",
-"s c Gray81",
-"d c #d7d8d7d8d7d8",
-"f c #dff2dff2dff2",
-"g c Gray89",
-"h c #e7e7e7e7e7e7",
-"j c #eff8eff8eff8",
-"k c Gray100",
-/* pixels */
-"kkkkkkkkkufkkkku7skkkkkk",
-"kkkkkkkkw>%fkkw 7kkkkkkk",
-"kk3%wkkksu ukk%u7skkkkkk",
-"kww>>@@uu3f@8 @@7.@Owskk",
-"kkwf777%>77O> >>%7777wkk",
-"kkkkkss7j8O.@ 8jujsfjkkk",
-"kkkjuuwO @> @>@@ujkkkkkk",
-"kkk>%O77O$ > %f  >kkkkkk",
-"kkk87sj7<=u>@7s8>@%wkkkk",
-"kkkkkkq==u>>u ukk3u7kkkk",
-"7uwfuw+=>u u> >fuw7uwwuf",
-"8twut#>:8q q8* uprwswwtu",
-"ipuge&,5uq5uau-@uuuuuadu",
-"psuu>4@uuuuuduu5uuduuuuu",
-"uugu>4@uuguuuuuuuuauuuuu",
-"uuuy:>-uuuuuuugguaaugguu",
-"psu8=+uuuuspuuuuudduuuuu",
-"ipu8=+uuujfhguuuuuudauuu",
-"ue82=+8euuuuishspujdgguu",
-"e@$$+X=;>uu5ttp9sduuuuuu",
-"&4$8$ 7=4@@5y>qejdjduuuu",
-";$4O4444444O@eye5@uuusfd",
-">>>>3<>@*<3>@wp9f7uuufsd",
-"uuujfhgedhfjqpswsiuuuuuu"
-};
+static char * exit_gnus_xpm[] = {
+"24 24 6 1",
+"      c None",
+".     c #8686ADAD7D7D",
+"X     c #919187876969",
+"o     c #C2C2B9B99C9C",
+"O     c #A8A8F0F0ECEC",
+"+     c #EFEFEFEFEFEF",
+"                        ",
+"     ....  .            ",
+"        .. .. .         ",
+"  .............         ",
+"   . . . ....           ",
+"     .............      ",
+"  .............. ..     ",
+"  . . ..........  .     ",
+"      .XXXX... ..       ",
+"       o.XXX. . ..      ",
+"      oo.X. ..  ...     ",
+"     ooX. . ...         ",
+"     oXo.     ..        ",
+"    ooX      . .        ",
+"    ooX                 ",
+"OOOOoXXOOOOOOOOOOOOOOOOO",
+"OOOoXoXOOOOOOOOOOOOOOOOO",
+"OOOooXXOOOO+OOOOOOOOOOOO",
+"O+OoooXOO+OOO+OO+OOO+OOO",
+"OXXoXoXoXOO++O++OO++OO+O",
+"XXXXXXXXXXXX+OOOOOOOOOOO",
+"XXXXXXXXXXXXXX+O++OO++OO",
+"XXXXXXXXXXXXXXXXOOOOOOOO",
+"O++O++++O+OO++OOOO++OOO+"};
index 00caf53..5234ccb 100644 (file)
@@ -1,45 +1,30 @@
 /* XPM */
-static char *magick[] = {
-/* columns rows colors chars-per-pixel */
-"24 24 15 1",
-"  c Gray0",
-". c #0bfb0bfb0bfb",
-"X c Gray9",
-"o c #23f323f323f3",
-"O c #2fef2fef2fef",
-"+ c Gray28",
-"@ c #53e353e353e3",
-"# c #5fdf5fdf5fdf",
-"$ c Gray42",
-"% c #77d777d777d7",
-"& c Gray56",
-"* c #9bcb9bcb9bcb",
-"= c #a7c7a7c7a7c7",
-"- c Gray70",
-"; c Gray75",
-/* pixels */
-"@;;@;;@;;@;;@;;@;;@;;@;;",
-";;;;;;;;;;;;;;;;;;;;;;;;",
-";;;;;;;;;;;;;;;;;;;;;;;;",
-"@;;@;;&=@OOOo     O;;@;;",
-";;;;;;X&;;;;=##   O;;;;;",
-";;;;;;.%;;;;;;;   O;;;;;",
-"@;;@;;@;;@;;*;;   O;;@;;",
-";;;;;;;;;;;;%;;   O;;;;;",
-";;;;;;O%;;;;;;;   O;;;;;",
-"@;;@;;o=;@;;-&-   O;;@;;",
-";;;;;;X&;;;;+ &   O;;;;;",
-";;;;;;.%;;;;$ &   O;;;;;",
-"@;;@;;o=;@;;;;;   O;;@;;",
-";;;;;;X&;;;;;;;   O;;;;;",
-";;;;;;*;;;;;@;;   O;;;;;",
-"@;;@;;&=;@;;;;;   O;;@;;",
-";;;;;; #;;;;;&#XO+O;;;;;",
-";;;;;;o=;*OO*#o%#+*;;;;;",
-"@;;@;@;%OOOO@%*@%*@;;@;;",
-";;;;;;;;;;;;;;;;;;;;;;;;",
-";;;;;;;;;;;;;;;;;;;;;;;;",
-"@;;@;;@;;@;;@;;@;;@;;@;;",
-";;;;;;;;;;;;;;;;;;;;;;;;",
-";;;;;;;;;;;;;;;;;;;;;;;;"
-};
+static char * exit_summ_xpm[] = {
+"24 24 3 1",
+".     c None",
+"      c #000000000000",
+"X     c #E1E1E0E0E0E0",
+" .. .. .. .. .. .. .. ..",
+"........................",
+"........................",
+" .. ..             .. ..",
+"......  XXXX       .....",
+"......  XXXXXXX    .....",
+" .. .. XX XX XX    .. ..",
+"...... XXXXXXXX    .....",
+"......  XXXXXXX    .....",
+" .. ..  X XX       .. ..",
+"......  XXXX       .....",
+"......  XXXX       .....",
+" .. ..  X XXXXX    .. ..",
+"......  XXXXXXX    .....",
+"...... XXXXX XX    .....",
+" .. ..  X XXXXX    .. ..",
+"......  XXXXX      .....",
+"......  X          .....",
+" .. . .            .. ..",
+"........................",
+"........................",
+" .. .. .. .. .. .. .. ..",
+"........................",
+"........................"};
index c7cd85a..444895a 100644 (file)
@@ -1,54 +1,31 @@
 /* XPM */
-static char *magick[] = {
-/* columns rows colors chars-per-pixel */
-"24 24 24 1",
-"  c Gray0",
-". c Gray6",
-"X c Gray9",
-"o c Gray12",
-"O c #2ff22ff22ff2",
-"+ c #3fff3fff3fff",
-"@ c Gray28",
-"# c #53ed53ed53ed",
-"$ c #5fee5fee5fee",
-"% c #67e767e767e7",
-"& c #6fff6fff6fff",
-"* c #77f077f077f0",
-"= c #7bdb7bdb7bdb",
-"- c Gray50",
-"; c Gray56",
-": c #9bd79bd79bd7",
-"> c #9fff9fff9fff",
-", c #a7c7a7c7a7c7",
-"< c Gray70",
-"1 c Gray75",
-"2 c Gray81",
-"3 c #dfffdfffdfff",
-"4 c #efffefffefff",
-"5 c Gray100",
-/* pixels */
-"<,1<,1<,1<,1<,1<,1<,1<,1",
-",;1,;1,;1,;1,;1,;1,;1,;1",
-"111111111111111111111111",
-"<,1<,1<,1<,:=+.<,1<,1<,1",
-",;1,;1,;1;O*>5+$;1,;1,;1",
-"11111111##142+>O11111111",
-"<,1<,:=+2555 o2#,1<,1<,1",
-",;1;O*>5555>-151$1,;1,;1",
-"111<@15555525554*:111111",
-"<,1<$:5555555555>=<,1<,1",
-",;1,;*>553--55555+,;1,;1",
-"111111=>&$1O555552#11111",
-"<,111:=+241$+55555#,1<,1",
-",;1,$*>55$ 1+555551$1,;1",
-"11##14555 $4>>55554*:111",
-"<@155555&5551-55555>=<,1",
-",O15555555553-355551o,;1",
-"1,#55555555553$555+%;111",
-"<,#25555555555&1*O<,1<,1",
-",;1+55555555555X;1,;1,;1",
-"111=>5555555555:*1111111",
-"<,1:*45555555552%<<,1<,1",
-",;11$15555555555-;,;1,;1",
-"1111,#55555555553#111111"
-};
+static char * followup_xpm[] = {
+"24 24 4 1",
+"      c None",
+".     c #A5A5A5A59595",
+"X     c #C7C7C6C6C6C6",
+"o     c #E1E1E0E0E0E0",
+"                        ",
+"          .             ",
+"        ..X.            ",
+"      ..XXX.            ",
+"    ..XXXXXo.           ",
+" ...XXXXXXooo.  .       ",
+" .o.XXXXXooooo..X.      ",
+" .oo.XXXoooo..XXX.      ",
+" .oo..Xooo..XXXXXo.     ",
+" .oo.XX...XXXXXXooo.    ",
+" .o.Xoo.o.XXXXXoooo.    ",
+"  .XXoo.oo.XXXoooooo.   ",
+"  .Xooo.oo..XXooooooo.  ",
+"   .ooo.oo.XXooooooooo. ",
+"   .ooo.o.XoooooooooooX.",
+"    .ooo.XXoooooooooooo.",
+"    .ooo.Xoooooooooooo. ",
+"     .ooo.ooooooooooo.  ",
+"     .oo..oooooooooo.   ",
+"      ..  .ooooooo..    ",
+"          .oooooo.      ",
+"           .ooo..       ",
+"           .oo.         ",
+"            ..          "};
index e860d95..362cbc5 100644 (file)
@@ -1,53 +1,31 @@
 /* XPM */
-static char *magick[] = {
-/* columns rows colors chars-per-pixel */
-"24 24 23 1",
-"  c Gray0",
-". c Gray6",
-"X c Gray9",
-"o c Gray12",
-"O c #2fef2fef2fef",
-"+ c #3fff3fff3fff",
-"@ c #53ee53ee53ee",
-"# c #5fe85fe85fe8",
-"$ c #67e767e767e7",
-"% c #6fff6fff6fff",
-"& c #77ea77ea77ea",
-"* c #7bdb7bdb7bdb",
-"= c Gray50",
-"- c Gray56",
-"; c #9bd69bd69bd6",
-": c #9fff9fff9fff",
-"> c #a7c7a7c7a7c7",
-", c Gray70",
-"< c Gray75",
-"1 c Gray81",
-"2 c #dfffdfffdfff",
-"3 c #efffefffefff",
-"4 c Gray100",
-/* pixels */
-",><,><,><,><,><,><,><,><",
-">-<>-<>-<>-<>-<>-<>-<>-<",
-"<<<<<<<<<<<<<<<<<<<<<<<<",
-",><,><,><,><,><,><,><,><",
-">-<>-<>-<>-<>-<>-<>-<>-<",
-"<<<<<<<<<<<<;O;<<<<<<<<<",
-",><,><,><,>< X;,><,><,><",
-">-<>-<>-<>-&#-<>-<>-<>-<",
-"<<<<<<<<<<<;<<<<<<<<<<<<",
-",><,><,><,><,><,><,><,><",
-">-<>-<>-<-O>>-<>-<>-<>-<",
-"<<<<<<<<@@<@<<<<<<<<<<<<",
-",><<<;*+1<<#;<<,><,><,><",
-">-<>#&:<==+#&-<>-<>-<>-<",
-"<<@@<3+=<1o <#<<<<<<<<<<",
-",>O<=+444:+.4=-,><,><,><",
-">-O=<4444:4::<$>-<>-<>-<",
-"<&;444444444+4+<<<<<<<<<",
-",#;444444444<=4O<<,><,><",
-">-O4444444442=2&-<>-<>-<",
-"<<;%444444444=<<#<<<<<<<",
-",><@2444444444+4=-,><,><",
-">-<-=444444444::<$>-<>-<",
-"<<<,$1444444444+4+<<<<<<"
-};
+static char * fuwo_xpm[] = {
+"24 24 4 1",
+"      c None",
+".     c #A5A5A5A59595",
+"X     c #C7C7C6C6C6C6",
+"o     c #E1E1E0E0E0E0",
+"                        ",
+"          .             ",
+"        .. .            ",
+"      ..   .            ",
+"    ..      .           ",
+" ...         .  .       ",
+" . .          ..X.      ",
+" .  .       ..XXX.      ",
+" .  ..    ..XXXXXo.     ",
+" .  .  ...XXXXXXooo.    ",
+" . .X  .o.XXXXXoooo.    ",
+"  .XX  .oo.XXXoooooo.   ",
+"  .X   .oo..XXooooooo.  ",
+"   .   .oo.XXooooooooo. ",
+"   .   .o.XoooooooooooX.",
+"    .   .XXoooooooooooo.",
+"    .   .Xoooooooooooo. ",
+"     .   .ooooooooooo.  ",
+"     .  ..oooooooooo.   ",
+"      ..  .ooooooo..    ",
+"          .oooooo.      ",
+"           .ooo..       ",
+"           .oo.         ",
+"            ..          "};
index b9ad760..d7e7b4a 100644 (file)
@@ -1,68 +1,31 @@
 /* XPM */
-static char *magick[] = {
-/* columns rows colors chars-per-pixel */
-"24 24 38 1",
-"  c Gray0",
-". c #0bfb0bfb0bfb",
-"X c Gray6",
-"o c #133313331333",
-"O c Gray9",
-"+ c Gray11",
-"@ c Gray12",
-"# c #23f323f323f3",
-"$ c Gray15",
-"% c #2ff32ff32ff3",
-"& c #399939993999",
-"* c #3fff3fff3fff",
-"= c Gray25",
-"- c #433243324332",
-"; c Gray28",
-": c #4ccc4ccc4ccc",
-"> c #519151915191",
-", c #53e753e753e7",
-"< c #565a565a565a",
-"1 c Gray35",
-"2 c #5b1a5b1a5b1a",
-"3 c #5fe55fe55fe5",
-"4 c Gray45",
-"5 c Gray46",
-"6 c #77d777d777d7",
-"7 c #7ccc7ccc7ccc",
-"8 c Gray50",
-"9 c #866586658665",
-"0 c Gray56",
-"q c Gray60",
-"w c #9bcb9bcb9bcb",
-"e c #9fff9fff9fff",
-"r c #a7c7a7c7a7c7",
-"t c Gray70",
-"y c Gray75",
-"u c Gray81",
-"i c #dfffdfffdfff",
-"p c Gray100",
-/* pixels */
-"0000000ryyyyyyyyyyyyyyyy",
-"@8888833yyyyyyyyyyyyyyyy",
-"*pppppy3yyyyyyyyyyyyyyyy",
-"*pppppy3yyyyyr=$$6yyyyyy",
-"*ppppp3%3yyyr<9qq36yyyyy",
-"*ppppp ;0>yy0:qqqq%yyyyy",
-"*pppppy @82tq>0qq8>yyyyy",
-"*pppppy%>q42y0>q42yyyyyy",
-"*pppppy3q=q8%%.=:#%6yyyy",
-"%yyyyy03y0:qqqqqqqq:0yyy",
-"33333330yr<9qqqqqqq42yyy",
-"yyyyyyyyyyr=qqqqqqqq$yyy",
-"yyyyyyyyyyyy$:%***$q$**X",
-"yyyyyyyyyyyy$:yppe3q$pp*",
-"yyyyyyyyyyyy$:ypp*q3qpp*",
-"yyyyyyyyyyyy$:yp8402upp*",
-"yyyyyyyyyyyyo$yi*&48ppp*",
-"yyyyyyyyyyy>4&u>00:ippp*",
-"yyyyyyyyyyy%q:00Oq%yyyy%",
-"yyyyyyyyyyy%q4:o<3&%3333",
-"yyyyyyyyyyy%qqq$9443yyyy",
-"yyyyyyyyyyy%44@0&4<3yyyy",
-"yyyyyyyyyyy6o$;r%&O0yyyy",
-"yyyyyyyyyyyy$:0y34%yyyyy"
-};
+static char * get_news_xpm[] = {
+"24 24 4 1",
+".     c None",
+"X     c #A5A5A5A59595",
+"o     c #E1E1E0E0E0E0",
+"O     c #C7C7C6C6C6C6",
+"........................",
+"........................",
+"........................",
+".....XXX................",
+"...XXoooXXXXX...........",
+"XXXoooooXXoooX.XXX......",
+"XoXooXXXooooXXXoooX.....",
+"XooXoXoXooXXXoooooX.....",
+"XooXXXooXoXoXooooooX....",
+"XooXOXooXXXooXooooooX...",
+"XoXOOXooXOXooXXooooooX..",
+"OXOOOXoXOOXooXoooooooX..",
+"OXOooOXOOOXoXOooooooooX.",
+".OXooOXOooOXOOooooooooX.",
+".OXoooOXooOXOooooooooooX",
+"..OXooOXoooOXooooooooooX",
+"..OXooOOXooOXooooooooooX",
+"...OXooOXoooOXoooooooXXX",
+"...OXooXOXooOXooooooXOO.",
+"....OXXOOXooXOXoooXXO...",
+".....OO..OXXOOXooXOO....",
+"..........OO..OXXO......",
+"...............OO.......",
+"........................"};
index ea2a723..21bc5f1 100644 (file)
@@ -1,64 +1,31 @@
 /* XPM */
-static char *magick[] = {
-/* columns rows colors chars-per-pixel */
-"24 24 34 1",
-"  c Gray0",
-". c #099909990999",
-"X c #0bfb0bfb0bfb",
-"o c #133313331333",
-"O c Gray9",
-"+ c Gray11",
-"@ c #23f323f323f3",
-"# c Gray15",
-"$ c #2fef2fef2fef",
-"% c #399939993999",
-"& c #3fff3fff3fff",
-"* c Gray25",
-"= c #433243324332",
-"- c Gray28",
-"; c #4ccc4ccc4ccc",
-": c #519151915191",
-"> c #566656665666",
-", c #5fed5fed5fed",
-"< c #626262626262",
-"1 c Gray42",
-"2 c Gray45",
-"3 c Gray46",
-"4 c #77d777d777d7",
-"5 c #7ccc7ccc7ccc",
-"6 c Gray50",
-"7 c #866586658665",
-"8 c Gray56",
-"9 c Gray60",
-"0 c #9bcb9bcb9bcb",
-"q c #a7c7a7c7a7c7",
-"w c Gray70",
-"e c Gray75",
-"r c #dfffdfffdfff",
-"t c Gray100",
-/* pixels */
-"w8888888weeeeeeeeeeeeeee",
-"8&66666&8eeeeeeeeeeeeeee",
-"86ttttt68eeeeeeeeeeeeeee",
-"86ttttt68eeeee0###0eeeee",
-"86ttttr&-4eee8:000:8eeee",
-"86tttte 144ee,20002,eeee",
-"86ttttt6 =,4e4<000<4eeee",
-"86ttttt6-,0,4e4,0,4eeeee",
-"86ttttt684,0<$$.,#$$0eee",
-"8,eeeee,8e,200000000#eee",
-"q,,,,,,,qe8:00000000,4ee",
-"eeeeeeeeeee0=000006,0$ee",
-"eeeeeeeeeeee8;00002;0$ee",
-"eeeeeeeeeeee8;00002;0$ee",
-"eeeeeeeeeeee8;00002;0$ee",
-"eeeeeeeeeeee8;00002;0$ee",
-"eeeeeeeeeeee8#;;;;%#;$ee",
-"eeeeeeeeeeee=2222+88@0ee",
-"eeeeeeeeeeee#00000.4$eee",
-"eeeeeeeeeeee#00720O,,eee",
-"eeeeeeeeeeee#002;02%8eee",
-"eeeeeeeeeeee+22$,>2%8eee",
-"eeeeeeeeeeee-#o48O%$qeee",
-"eeeeeeeeeeee8;#ee$2,eeee"
-};
+static char * gnntg_xpm[] = {
+"24 24 4 1",
+"      c None",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"o     c #C7C7C6C6C6C6",
+"                        ",
+" .......                ",
+" .XXXXX.                ",
+" .XXXXX.       ...      ",
+" .XXXXX...    .ooo.     ",
+" .XXXXX....  ..ooo..    ",
+" .XXXXX..o.. ..ooo..    ",
+" .XXXXX...o.. ..o..     ",
+" .XXXXX. ..o........    ",
+" .XXXXX.  ..oooooooo.   ",
+" .......   .oooooooo..  ",
+"            .ooooo..o.  ",
+"             .oooo..o.  ",
+"             .oooo..o.  ",
+"             .oooo..o.  ",
+"             .oooo..o.  ",
+"             .........  ",
+"            ......oo.   ",
+"            .ooooo...   ",
+"            .oo..o...   ",
+"            .oo..o..    ",
+"            ........    ",
+"            .... ...    ",
+"            ...  ...    "};
index de83fd9..1ee4fa4 100644 (file)
@@ -1,50 +1,30 @@
 /* XPM */
-static char *magick[] = {
-/* columns rows colors chars-per-pixel */
-"24 24 20 1",
-"  c Gray0",
-". c Gray6",
-"X c Gray12",
-"o c #2ff42ff42ff4",
-"O c #3fff3fff3fff",
-"+ c Gray28",
-"@ c #53e353e353e3",
-"# c #5fe25fe25fe2",
-"$ c #67e767e767e7",
-"% c #6fff6fff6fff",
-"& c #77d777d777d7",
-"* c Gray50",
-"= c Gray56",
-"- c #9fff9fff9fff",
-"; c Gray70",
-": c Gray75",
-"> c Gray81",
-", c #dfffdfffdfff",
-"< c #efffefffefff",
-"1 c Gray100",
-/* pixels */
-"::::::::::::::::::::::::",
-"::::::::::::::::::::::::",
-"::::::::::::::::::::::::",
-"::::#oOOOOOOOOOo+;::::::",
-"::::#:111111111:O$::::::",
-"::::#:1111-O%11:*>@:::::",
-"::::#:111=X.o#<>OOo#::::",
-"::::#:111 OX# :111:#::::",
-"::::#:111  =  :111:#::::",
-"::::#:111>Xo.-1111:#::::",
-"::::#:1111*:O11111:#::::",
-"::::#:11%1*oO->111:#::::",
-"::::#:1-O:,1:*O111:#::::",
-"::::#:111****:1111:#::::",
-"::::#:1111* 111111:#::::",
-"::::#:1,:O-1O*:111:#::::",
-"::::#:1:X1111*#111:#::::",
-"::::#:11>1111,<111:#::::",
-"::::#:111111111111:#::::",
-"::::#:111111111111:#::::",
-"::::#:111111111111:#::::",
-"::::&oooooooooooooo&::::",
-"::::::::::::::::::::::::",
-"::::::::::::::::::::::::"
-};
+static char * kill_group_xpm[] = {
+"24 24 3 1",
+".     c None",
+"o     c #000000000000",
+"+     c #9A9A6C6C4E4E",
+"o..o..o..o..o..o..o..o..",
+"........................",
+"........................",
+"o..o..o..o..o..o..o..o..",
+"........................",
+"........................",
+"o..o..o..o..++.o..o..o..",
+".......++..++++.........",
+"........++.+++..........",
+"o..o..o.+++++..o..o..o..",
+".........+++............",
+".........++++...........",
+"o..o..o.++++++.o..o..o..",
+"........++.++++.........",
+".......++...++++........",
+"o..o...+.o...++o..o..o..",
+"........................",
+"........................",
+"o..o..o..o..o..o..o..o..",
+"........................",
+"........................",
+"o..o..o..o..o..o..o..o..",
+"........................",
+"........................"};
index 92f5dd5..a87f784 100644 (file)
@@ -1,51 +1,32 @@
 /* XPM */
-static char *magick[] = {
-/* columns rows colors chars-per-pixel */
-"24 24 21 1",
-"  c Gray0",
-". c Gray6",
-"X c Gray12",
-"o c #2ff02ff02ff0",
-"O c #3fff3fff3fff",
-"+ c Gray28",
-"@ c #53f353f353f3",
-"# c #5ff95ff95ff9",
-"$ c #67e767e767e7",
-"% c #6fff6fff6fff",
-"& c #77dc77dc77dc",
-"* c Gray50",
-"= c Gray56",
-"- c #9beb9beb9beb",
-"; c #9fff9fff9fff",
-": c Gray70",
-"> c Gray75",
-", c Gray81",
-"< c #dfffdfffdfff",
-"1 c #efffefffefff",
-"2 c Gray100",
-/* pixels */
-">>>>>>>>>>>>>>>==:>>>>>>",
-">>>>>>>>>>>>>>&**$&>>>>>",
-">>>>>>>>>>>>>&-22,-o->>>",
-">>>>>>>>>=$O@$,,2222O>>>",
-">>>>>>>=#*>2*>2O222>$>>>",
-">>>>>>o&>222O2%,22,$:>>>",
-">>>:$O2222<#2*>222=+:>>>",
-">>&$>;;2;2*>2><22;**$&>>",
-">>o.;,,2,,*1%222;;,O;o>>",
-">>o2;O><2O2,%221#o%22o>>",
-">>o222***O2;22;**<222o>>",
-">>o2222<>.;2,O;,22222o>>",
-">>o2221>#2;O%;;,22222o>>",
-">>o222**<22222;*>2222o>>",
-">>o22%,222222221*,222o>>",
-">>o;O,22222222222%#<2o>>",
-">>o;22222222222222<**o>>",
-">>oOOOOOOOOOOOOOOOOX o>>",
-">>>>>>>>>>>>>>>>>>>>>>>>",
-">>>>>>>>>>>>>>>>>>>>>>>>",
-">>>>>>>>>>>>>>>>>>>>>>>>",
-">>>>>>>>>>>>>>>>>>>>>>>>",
-">>>>>>>>>>>>>>>>>>>>>>>>",
-">>>>>>>>>>>>>>>>>>>>>>>>"
-};
+static char * mail_reply_xpm[] = {
+"24 24 5 1",
+"      c None",
+".     c #000000000000",
+"X     c #E1E1E0E0E0E0",
+"O     c #FFFFFFFFFFFF",
+"o     c #C7C7C6C6C6C6",
+"               ..       ",
+"               .X.      ",
+"              ..XX.     ",
+"         ......XoXX..   ",
+"       ...OOO.XooXXX.   ",
+"      ..OOOO.XooXXX.    ",
+"   ...OOOOO.XooXXX...   ",
+"  ..OOOOOO.XXooXX.OO..  ",
+"  ...OOOO.oooXXX......  ",
+"  .O...O.oXooXXX...OO.  ",
+"  .OOO...oXoXX...OOOO.  ",
+"  .OOOOO...X...OOOOOO.  ",
+"  .OOOOO.O...OO.OOOOO.  ",
+"  .OOO..OOOOOOOO..OOO.  ",
+"  .OO.OOOOOOOOOOOO.OO.  ",
+"  .O.OOOOOOOOOOOOOO.O.  ",
+"  ..OOOOOOOOOOOOOOOO..  ",
+"  ....................  ",
+"                        ",
+"                        ",
+"                        ",
+"                        ",
+"                        ",
+"                        "};
index 8c823f2..bea1328 100644 (file)
@@ -1,66 +1,35 @@
 /* XPM */
-static char *magick[] = {
-/* columns rows colors chars-per-pixel */
-"24 24 36 1",
-"  c Gray0",
-". c Gray6",
-"X c Gray9",
-"o c Gray12",
-"O c #23f323f323f3",
-"+ c Gray15",
-"@ c #2ff32ff32ff3",
-"# c #399939993999",
-"$ c #3fff3fff3fff",
-"% c #433243324332",
-"& c Gray28",
-"* c #4ccc4ccc4ccc",
-"= c #53ed53ed53ed",
-"- c #5ff05ff05ff0",
-"; c Gray40",
-": c #67e767e767e7",
-"> c #6ccc6ccc6ccc",
-", c #6fff6fff6fff",
-"< c Gray45",
-"1 c #77f277f277f2",
-"2 c #7bdb7bdb7bdb",
-"3 c #7ccc7ccc7ccc",
-"4 c Gray50",
-"5 c #866586658665",
-"6 c Gray56",
-"7 c Gray60",
-"8 c #9bd39bd39bd3",
-"9 c #9fff9fff9fff",
-"0 c Gray65",
-"q c #a7c7a7c7a7c7",
-"w c Gray70",
-"e c Gray75",
-"r c Gray81",
-"t c #dfffdfffdfff",
-"y c #efffefffefff",
-"u c Gray100",
-/* pixels */
-"wqewqewqewqewqewqewqewqe",
-"q6eq6eq6eq6eq6eq6eq6eq6e",
-"eeeeeeeeeeeeeeeeeeeeeeee",
-"wqewqewqewq82$.wqewqewqe",
-"q6eq6eq6e6@19u$-6eq6eq6e",
-"eeeeeeee==eyr$9@eeeeeeee",
-"wqewq82$ruuu or=qewqewqe",
-"q6e6@19uuuu94eue-eq6eq6e",
-"eeew&euuuuuruuuy18eeeeee",
-"wqew-8uuuuuuuuuu92wqewqe",
-"q6eq619uut44uuuuu$q6eq6e",
-"eeeeee29,-e@uuuuur=eeeee",
-"wqeee82$rye-$uuuuu=qewqe",
-"q6eq-19uu- e$uuuuue-eq6e",
-"ee==eyuuu -y99uuuuy18eee",
-"w&euuuuu,uuue4uuuuu92wqe",
-"q@euuuuuuuuut4tuuuueoq6e",
-"eq=u9$$$ruuuu4@$$r$;6eee",
-"wq=8,988%ruu8,98-+6qewqe",
-"q6e+wq888$et+wq888X6eq6e",
-"eee+88888.4-+88888@eeeee",
-"wqeO#6884,uu*5885<&qewqe",
-"q6eq@#**<uuut;**+&q6eq6e",
-"eeeeqOeeyuuuuteee=eeeeee"
-};
+static char * next_ur_xpm[] = {
+"24 24 8 1",
+".     c None",
+"      c #000000000000",
+"X     c #A5A5A5A59595",
+"o     c #C7C7C6C6C6C6",
+"O     c #FFFF00000000",
+"+     c #9A9A6C6C4E4E",
+"@     c #E1E1E0E0E0E0",
+"#     c #FFFFFFFFFFFF",
+" .. .. .. .. .. .. .. ..",
+"........................",
+"............X...........",
+" .. .. .. .XXX. .. .. ..",
+".........XXooOX.........",
+".......XXooo+O@X........",
+" .. XXXoooo++@@@X. .. ..",
+"....X@Xoooooo@@@X.......",
+"....X@@Xooo@@@@@@X......",
+" .. X@@XXoo@@@@@@@X.. ..",
+"....X@@Xoo@@@@@@@@@X....",
+"....X@Xo@@@XX@@@@@@oX...",
+" .. oXoo@XXooO@@@@@@X ..",
+"....oXoXXooo+OX@@@@Xo...",
+"....XXXoooo++@@X@@Xo....",
+" .. X@Xoooooo@@@XX .. ..",
+"....X@@Xooo@@@@@@X......",
+"....X@@XXoo@@@@@@@X.....",
+" .. X@@Xoo@@@@@@@@@X. ..",
+"....X@Xo@  @@@@@@@  X...",
+"... oXoo ## @@ @@ ## ...",
+" .. oXo ####  @  #### ..",
+".....oX #### @@@ #### ..",
+".....oX@ ## @@@@X ## ..."};
diff --git a/etc/gnus/oort.xface b/etc/gnus/oort.xface
new file mode 100644 (file)
index 0000000..6444b55
--- /dev/null
@@ -0,0 +1,3 @@
+X-Face: $BP*2z+\?fNM."!*~JsIgw(Y]n?WG!KMc;^jL$SLrt@X4%uMguO/$3HO<5@43P@[~'kE'fG
+ #YdP[sb6IJ5|Sm[z#9sI|)iJ})U5;Rt-?jI3i24zoJmonTV}kTVOm/5wMCnc3P~d#+BF1c&N6mdF{u
+ CE+<;lN!v~JRyR"q0d5<\y]faXpTC4,wpQ{=<==?LRA`}3qqIgr
index 008cdc7..7a3eaa5 100644 (file)
@@ -1,53 +1,35 @@
 /* XPM */
-static char *magick[] = {
-/* columns rows colors chars-per-pixel */
-"24 24 23 1",
-"  c Gray0",
-". c Gray6",
-"X c Gray12",
-"o c #2ff22ff22ff2",
-"O c #3fff3fff3fff",
-"+ c Gray28",
-"@ c #53ee53ee53ee",
-"# c #5fdf5fdf5fdf",
-"$ c #67e767e767e7",
-"% c #6fff6fff6fff",
-"& c #77f777f777f7",
-"* c #7bdb7bdb7bdb",
-"= c Gray50",
-"- c Gray56",
-"; c #9bd69bd69bd6",
-": c #9fff9fff9fff",
-"> c #a7c7a7c7a7c7",
-", c Gray70",
-"< c Gray75",
-"1 c Gray81",
-"2 c #dfffdfffdfff",
-"3 c #efffefffefff",
-"4 c Gray100",
-/* pixels */
-",><,><,><,><,><,><,><,><",
-">-<>-<>-<>-<>-<>-<>-<>-<",
-"<<<<<<<<<<<<<<<<<<<<<<<<",
-",><,><,><,>;*O.,><,><,><",
-">-<>-<>-<-o&:4O#-<>-<>-<",
-"<<<<<<<<@@<31O:o<<<<<<<<",
-",><,>;*O1444 X1@><,><,><",
-">-<-o&:4444:=<4<#<>-<>-<",
-"<<<,+<4444414443&;<<<<<<",
-",><,#;4444444444:*,><,><",
-">-<>-o44444444444O>-<>-<",
-"<<<<<;%44444444441@<<<<<",
-",><,><@24444444444@><,><",
-">-<>-<-=4444444444<#<>-<",
-"<<<<<<,$14444444443&;<<<",
-",><,><,#;4444444444:*,><",
-">-<>-<>-o4444444444<X>-<",
-"<<<<<<<<;%4444444%O$-<<<",
-",><,><,><@24444<&;,><,><",
-">-<>-<>-<-=42==#-<>-<>-<",
-"<<<<<<<<<,$Oo+-<<<<<<<<<",
-",><,><,><,><,><,><,><,><",
-">-<>-<>-<>-<>-<>-<>-<>-<",
-"<<<<<<<<<<<<<<<<<<<<<<<<"
-};
+static char * post_xpm[] = {
+"24 24 8 1",
+".     c None",
+"      c #434343434343",
+"X     c #A5A5A5A59595",
+"O     c #000000000000",
+"+     c #C7C7C6C6C6C6",
+"@     c #FFFF00000000",
+"#     c #9A9A6C6C4E4E",
+"$     c #E1E1E0E0E0E0",
+"O..O..O..O..O..O..O..O..",
+"........................",
+"............X...........",
+"O..O..O..O.XXX.O..O..O..",
+".........XX++@X.........",
+".......XX+++#@$X........",
+"O..OXXX++++##$$$X.O..O..",
+"....X$X++++++$$$X.......",
+"....X$$X+++$$$$$$X......",
+"O..OX$$XX++$$$$$$$X..O..",
+"....X$$X++$$$$$$$$$X....",
+"....X$X+$$$$$$$$$$$+X...",
+"O..O+X++$$$$$$$$$$$$XO..",
+"....+X+$$$$$$$$$$$$X+...",
+".....+X$$$$$$$$$$$X+....",
+"O..O.+X$$$$$$$$$XXO..O..",
+"......+X$$$$$$$X++......",
+"......+X$$$$$XX+........",
+"O..O..O+X$$$X++O..O..O..",
+".......+X$$X++..........",
+"........+XX+............",
+"O..O..O..O+.O..O..O..O..",
+"........................",
+"........................"};
index 7c3db24..8013133 100644 (file)
@@ -1,65 +1,35 @@
 /* XPM */
-static char *magick[] = {
-/* columns rows colors chars-per-pixel */
-"24 24 35 1",
-"  c Gray0",
-". c Gray6",
-"X c Gray9",
-"o c Gray12",
-"O c #23f323f323f3",
-"+ c Gray15",
-"@ c #2ff22ff22ff2",
-"# c #399939993999",
-"$ c #3fff3fff3fff",
-"% c Gray28",
-"& c #53ed53ed53ed",
-"* c Gray35",
-"= c #5b1a5b1a5b1a",
-"- c Gray36",
-"; c #5fef5fef5fef",
-": c Gray40",
-"> c #67e767e767e7",
-", c #6ffa6ffa6ffa",
-"< c Gray45",
-"1 c #77ea77ea77ea",
-"2 c #799979997999",
-"3 c #7bdb7bdb7bdb",
-"4 c Gray50",
-"5 c Gray56",
-"6 c Gray60",
-"7 c #9bde9bde9bde",
-"8 c #9fff9fff9fff",
-"9 c #a7c7a7c7a7c7",
-"0 c #acccacccaccc",
-"q c Gray70",
-"w c Gray75",
-"e c Gray81",
-"r c #dfffdfffdfff",
-"t c #efffefffefff",
-"y c Gray100",
-/* pixels */
-"q9wq9wq9wq9wq9wq9wq9wq9w",
-"95w95w95w95w95w95w95w95w",
-"wwwwwwwwwwwwwwwwwwwwwwww",
-"q9wq9wq9wq973$.q9wq9wq9w",
-"95w95w95w5@18y$;5w95w95w",
-"wwwwwwww&&wte$8@wwwwwwww",
-"q9wq973$eyyy oe&9wq9wq9w",
-"95w5@18yyyy84wyw;w95w95w",
-"wwwq%wyyyyyeyyyt17wwwwww",
-"q9wq;7yyyyyyyyyy45q9wq9w",
-"95w9518yyr44yyyy4%%@995w",
-"wwwww&.3;;w@yyye=<<#Owww",
-"q9wq=;:$etw;$rt+w0777O9w",
-"95w5+<8yy; wo44+77777X5w",
-"ww&&wtyyy ;t@re+77777@ww",
-"q%wyyyyy,yyyw4ye=<<#Oq9w",
-"9@wyyyyyyyyyr4rywo;;995w",
-"w9&yyyyyyyyyy4we$3wwwwww",
-"q9&eyyyyyyyyyy,@wwq9wq9w",
-"95w$yyyyyyyyyyy@ww95w95w",
-"www38yyyyyyyyyy71wwwwwww",
-"q9w54yyyyyyyyyye:qq9wq9w",
-"95w9,ryyyyyyyyyy4595w95w",
-"wwww9&yyyyyyyyyyr&wwwwww"
-};
+static char * prev_ur_xpm[] = {
+"24 24 8 1",
+".     c None",
+"      c #000000000000",
+"X     c #A5A5A5A59595",
+"o     c #C7C7C6C6C6C6",
+"O     c #FFFF00000000",
+"+     c #9A9A6C6C4E4E",
+"@     c #E1E1E0E0E0E0",
+"#     c #FFFFFFFFFFFF",
+" .. .. .. .. .. .. .. ..",
+"........................",
+"............X...........",
+" .. .. .. .XXX. .. .. ..",
+".........XXooOX.........",
+".......XXooo+O@X........",
+" .. XXXoooo++@@@X. .. ..",
+"....X@Xoooooo@@@X.......",
+"....X@@Xooo@@@@@@X......",
+" .. X@@XXoo@@@@@@@X.. ..",
+"....X@@Xo  @@@@@@  X....",
+"....X@Xo ## X  @ ## X...",
+" .. oXo #XXXoO@ ####  ..",
+"....oXoXXooo+OX #### ...",
+"....XXXoooo++@@X ## ....",
+" .. X@Xoooooo@@@X  .. ..",
+"....X@@Xooo@@@@@@X......",
+"....X@@XXoo@@@@@@@X.....",
+" .. X@@Xoo@@@@@@@@@X. ..",
+"....X@Xo@@@@@@@@@@@@X...",
+"... oXoo@@@@@@@@@@@@X...",
+" .. oXo@@@@@@@@@@@@X....",
+".....oX@@@@@@@@@@@X.....",
+".....oX@@@@@@@@@@X......"};
index fb45d4c..370678a 100644 (file)
@@ -1,65 +1,31 @@
 /* XPM */
-static char *magick[] = {
-/* columns rows colors chars-per-pixel */
-"24 24 35 1",
-"  c Gray0",
-". c Gray6",
-"X c Gray9",
-"o c Gray12",
-"O c #23f323f323f3",
-"+ c #2ffe2ffe2ffe",
-"@ c #399939993999",
-"# c #3fff3fff3fff",
-"$ c Gray25",
-"% c #499949994999",
-"& c #4ccc4ccc4ccc",
-"* c #519151915191",
-"= c #53f353f353f3",
-"- c Gray35",
-"; c #5feb5feb5feb",
-": c #67e767e767e7",
-"> c #6fff6fff6fff",
-", c Gray45",
-"< c #77ef77ef77ef",
-"1 c #7bdb7bdb7bdb",
-"2 c Gray50",
-"3 c Gray56",
-"4 c Gray60",
-"5 c #9bd39bd39bd3",
-"6 c #9fff9fff9fff",
-"7 c Gray64",
-"8 c #a7c7a7c7a7c7",
-"9 c Gray70",
-"0 c #b998b998b998",
-"q c #bcccbcccbccc",
-"w c Gray75",
-"e c Gray81",
-"r c #dfffdfffdfff",
-"t c #efffefffefff",
-"y c Gray100",
-/* pixels */
-"wwwwwwwwwwwwwwwwwwwwwwww",
-"wwwwwwwwwwwwwwwwwwwwwwww",
-"wwwwwwwwwwwwwwwwwwwwwwww",
-"wwwwwwwwwww5+o1wwwwwwwww",
-"wwwwwwwwww3<w26;3wwwwwww",
-"wwwwwwwww5<tw2yw<5wwwwww",
-"wwwwww93=#yy#yyyy>O8wwww",
-"wwwww<:226yy#yyyw2 ;wwww",
-"www5+5e66yyy#6##2w X5www",
-"w8=>ye#6yy2+#6yyr+9y>$8w",
-"w;;yw2yw22#wyyyr#@9yy@;w",
-"w;3#o+#2w3;tyyy+@3w##3;w",
-"w;wyy>wry66yyr+%0;>yyw;w",
-"w;wyyy222#yyr#;-2ryyyw;w",
-"7=wyyyyrw.6y+ +wryyyyw=7",
-"5&wyyyyye#o3.#6yyyyyyw&5",
-"5&wyyyyw2yw26y66yyyyyw&5",
-"5&wyyye2tyyyyyy66yyyyw&5",
-"5&wyr;>yyyyyyyyy6#eyyw&5",
-"5&wr2ryyyyyyyyyyyy2wyw&5",
-"5&+;ryyyyyyyyyyyyyt2#+&5",
-"5& wwwwwwwwwwwwwwwwww &5",
-"5,&&&&&&&&&&&&&&&&&&&&,5",
-"555555555555555555555555"
-};
+static char * reply_wo_xpm[] = {
+"24 24 4 1",
+"      c None",
+".     c #000000000000",
+"X     c #E1E1E0E0E0E0",
+"O     c #FFFFFFFFFFFF",
+"                        ",
+"                        ",
+"                        ",
+"           ....         ",
+"          ..X....       ",
+"         ..XX.XX..      ",
+"       .O.XX.XXXX..     ",
+"     ..O.XXX.XXXX...    ",
+"    .OO.XXXX.X.......   ",
+"   .OO.XXXX...XXX.OO..  ",
+" ..OO.XX....XXXX.OOOO.. ",
+" .......XX.XXXX.OOO.... ",
+" .OOO.XXX.XXXX.OO..OOO. ",
+" .OOOO....XXX....OOOOO. ",
+" .OOOOOOO..XX..OOOOOOO. ",
+" .OOOOOOO......OOOOOOO. ",
+" .OOOOOO.OO..O..OOOOOO. ",
+" .OOOOO.OOOOOOOO.OOOOO. ",
+" .OOOO.OOOOOOOOOO.OOOO. ",
+" .OOO.OOOOOOOOOOOO.OOO. ",
+" .O..OOOOOOOOOOOOOO..O. ",
+" ..OOOOOOOOOOOOOOOOOO.. ",
+" ...................... ",
+"                        "};
index 20dd102..a458848 100644 (file)
@@ -1,64 +1,31 @@
 /* XPM */
-static char *magick[] = {
-/* columns rows colors chars-per-pixel */
-"24 24 34 1",
-"  c Gray0",
-". c Gray6",
-"X c Gray9",
-"o c Gray12",
-"O c #2ffb2ffb2ffb",
-"+ c #399939993999",
-"@ c #3fff3fff3fff",
-"# c Gray25",
-"$ c #499949994999",
-"% c #4ccc4ccc4ccc",
-"& c #519151915191",
-"* c #53f353f353f3",
-"= c Gray35",
-"- c #5feb5feb5feb",
-"; c #67e767e767e7",
-": c #6fff6fff6fff",
-"> c Gray45",
-", c #77ef77ef77ef",
-"< c Gray50",
-"1 c Gray56",
-"2 c #933293329332",
-"3 c Gray60",
-"4 c #9bd29bd29bd2",
-"5 c #9fff9fff9fff",
-"6 c Gray64",
-"7 c #a7c7a7c7a7c7",
-"8 c Gray70",
-"9 c #b998b998b998",
-"0 c #bcccbcccbccc",
-"q c Gray75",
-"w c Gray81",
-"e c #dfffdfffdfff",
-"r c #efffefffefff",
-"t c Gray100",
-/* pixels */
-"qqqqqqqqqqqqqqqqqqqqqqqq",
-"qqqqqqqqqqqqqqqqqqqqqqqq",
-"qqqqqqqqqqqqqqqqqqqqqqqq",
-"qqqqqqqqqqqqqq4qqqqqqqqq",
-"qqqqqqqqqqqqq1,-1qqqqqqq",
-"qqqqqqqqq4OO4,rq,4qqqqqq",
-"qqqqqq81*:tw:tttt:*7qqqq",
-"qqqqq,;<etq<tttttt--qqqq",
-"qqq4O4wttt<qttttt: X4qqq",
-"q7*Oewrew55ttttteO6qO#7q",
-"q--<q5eq@5ttttte@+2<<+-q",
-"q-1@@wtt@ttttttO+1q@@1-q",
-"q-qtt:q<wtttteO$9-:ttq-q",
-"q-qttt<<<ttte@-=<etttq-q",
-"6*qtttteq:ttO Oqettttq*6",
-"4%qtttttw@o1.@5ttttttq%4",
-"4%qttttq<tq<5t55tttttq%4",
-"4%qtttw<rtttttt55ttttq%4",
-"4%qte-:ttttttttt5@wttq%4",
-"4%qe<etttttttttttt<qtq%4",
-"4%O-etttttttttttttr<@O%4",
-"4% qqqqqqqqqqqqqqqqqq %4",
-"4>%%%%%%%%%%%%%%%%%%%%>4",
-"444444444444444444444444"
-};
+static char * reply_xpm[] = {
+"24 24 4 1",
+"      c None",
+".     c #000000000000",
+"X     c #E1E1E0E0E0E0",
+"O     c #FFFFFFFFFFFF",
+"                        ",
+"                        ",
+"                        ",
+"           ....         ",
+"          ..XXX..       ",
+"         ..XXXXX..      ",
+"       .O.XXXXXXX..     ",
+"     ..O.XXXXXXXXX..    ",
+"    .OO.XXXXXXXXXX...   ",
+"   .OO.XXXXXXXXXX.OO..  ",
+" ..OO.XXXXXXXXXX.OOOO.. ",
+" .....XXXXXXXXX.OOO.... ",
+" .OOO.XXXXXXXX.OO..OOO. ",
+" .OOOO...XXXXX...OOOOO. ",
+" .OOOOOOO..XX..OOOOOOO. ",
+" .OOOOOOO......OOOOOOO. ",
+" .OOOOOO.OO..O..OOOOOO. ",
+" .OOOOO.OOOOOOOO.OOOOO. ",
+" .OOOO.OOOOOOOOOO.OOOO. ",
+" .OOO.OOOOOOOOOOOO.OOO. ",
+" .O..OOOOOOOOOOOOOO..O. ",
+" ..OOOOOOOOOOOOOOOOOO.. ",
+" ...................... ",
+"                        "};
index ad20c8a..6e2d7ac 100644 (file)
@@ -1,50 +1,32 @@
 /* XPM */
-static char *magick[] = {
-/* columns rows colors chars-per-pixel */
-"24 24 20 1",
-"  c Gray0",
-". c Gray6",
-"X c Gray12",
-"o c #2ff52ff52ff5",
-"O c #3fff3fff3fff",
-"+ c Gray28",
-"@ c #53e353e353e3",
-"# c #5fe45fe45fe4",
-"$ c #67e767e767e7",
-"% c #6fff6fff6fff",
-"& c #77d777d777d7",
-"* c Gray50",
-"= c Gray56",
-"- c #9fff9fff9fff",
-"; c Gray70",
-": c Gray75",
-"> c Gray81",
-", c #dfffdfffdfff",
-"< c #efffefffefff",
-"1 c Gray100",
-/* pixels */
-"::::::::::::::::::::::::",
-"::::::::::::::::::::::::",
-"::::::::::::::::::::::::",
-"::::#oOOOOOOOOOo+;::::::",
-"::::#:,*,,**11-#O$::::::",
-"::::#:#:#:#:%--=*>@:::::",
-"::::#:o:o:*%>*:>OOo#::::",
-"::::#:X*X:O*-:**:1:#::::",
-"::::#:>1><::11>:,1:#::::",
-"::::#:>-111%111%11:#::::",
-"::::#:*:-1:*1:*-11:#::::",
-"::::#: *O>*:%*=--1:#::::",
-"::::#:O* :*1O*o%11:#::::",
-"::::#:O:X,**-*:111:#::::",
-"::::#:>1>1,:1,<111:#::::",
-"::::#:1,oo,1111111:#::::",
-"::::#:,O##O*****:1:#::::",
-"::::#:: ::      *1:#::::",
-"::::#:1-..-1:*O:*1:#::::",
-"::::#:11--11,:O,:1:#::::",
-"::::#:11111111>111:#::::",
-"::::&oooooooooooooo&::::",
-"::::::::::::::::::::::::",
-"::::::::::::::::::::::::"
-};
+static char * rot13_xpm[] = {
+"24 24 5 1",
+"      c None",
+".     c #A5A5A5A59595",
+"X     c #C7C7C6C6C6C6",
+"o     c #E1E1E0E0E0E0",
+"O     c #919187876969",
+"                        ",
+"                        ",
+"                        ",
+"             .          ",
+"           ..X.         ",
+"         ..XXX.         ",
+"       ..XXXXXo.        ",
+"    ...XXXXXXooo.       ",
+"    .o.XXXXXoooo.       ",
+"    .oo.XXXooOooo.      ",
+"    .oo..XXoOXOOoo.     ",
+"    .oo.XXoOXooOXoo.    ",
+"    .o.XoooOOXXOXooX.   ",
+"     .XXooOOXOOXoooo.   ",
+"     .XooOOOooooooo.    ",
+"      .oOOXOXooooo.     ",
+"      .oOOXoooooo.      ",
+"       .oOOXooo..       ",
+"       .oooooo.         ",
+"        .ooo..          ",
+"        .oo.            ",
+"         ..             ",
+"                        ",
+"                        "};
index c8bceb6..f0325ac 100644 (file)
@@ -1,55 +1,33 @@
 /* XPM */
-static char *magick[] = {
-/* columns rows colors chars-per-pixel */
-"24 24 25 1",
-"  c Gray6",
-". c #133313331333",
-"X c #199919991999",
-"o c Gray15",
-"O c #2fef2fef2fef",
-"+ c Gray20",
-"@ c #398739873987",
-"# c #3fff3fff3fff",
-"$ c Gray28",
-"% c #4ccc4ccc4ccc",
-"& c #5fdf5fdf5fdf",
-"* c #626262626262",
-"= c Gray40",
-"- c #72f272f272f2",
-"; c Gray45",
-": c #77d777d777d7",
-"> c #7bdb7bdb7bdb",
-", c #7ccc7ccc7ccc",
-"< c Gray56",
-"1 c Gray60",
-"2 c #9fff9fff9fff",
-"3 c #a7c7a7c7a7c7",
-"4 c Gray75",
-"5 c Gray90",
-"6 c Gray100",
-/* pixels */
-"444444444444444444444444",
-"444444444444444444444444",
-"4444444:OOOOOOOOOOO:4444",
-"4444444&4666666666#2>444",
-"4444444&4666666666#62:44",
-"4444444&4666666666 ##O44",
-"4444444&4666666666666O44",
-"4444444&4666666666666O44",
-"4444444&4666666666666O44",
-"43<<<<<$<444444666666O44",
-"4&@@@-------.%.666666O44",
-"4&---5555555o1o666666O44",
-"4&---5555555o1o666666O44",
-"4&---5555555o1o666666O44",
-"4&---5555555o1o666666O44",
-"4&---5555555o1o666666O44",
-"4&--@-------o1o666666O44",
-"4&-<--------,1o666666O44",
-"4&-<--------,1o444444O44",
-"4&--X++++o@-o1o&&&&&&:44",
-"4&--+====%-5o1o444444444",
-"4:*-+====%-5o1o444444444",
-"44:@X++++o@-.%.444444444",
-"444<<<<<<<<<<<<444444444"
-};
+static char * save_aif_xpm[] = {
+"24 24 6 1",
+"      c None",
+".     c #999999999999",
+"X     c #E1E1E0E0E0E0",
+"o     c #C7C7C6C6C6C6",
+"O     c #000000000000",
+"+     c #FFFFFFFFFFFF",
+"                        ",
+"                        ",
+"       .............    ",
+"       .XXXXXXXXXX.X..  ",
+"       .XXXXXXXXXX.XX.  ",
+"       .XXXXXXXXXX....  ",
+"       .XXXXXXXXXXooo.  ",
+"       .XXXXXXXXXXXXX.  ",
+"       .XXXXXXXXXXXXX.  ",
+"       .XXXXXXXXXXXXX.  ",
+" OOOOOOOOOOOOOOXXXXXX.  ",
+" O..O+++++++O.OXXXXXX.  ",
+" O..O+++++++O.OXXXXXX.  ",
+" O..O+++++++O.OXXXXXX.  ",
+" O..O+++++++O.OXXXXXX.  ",
+" O..O+++++++O.OXXXXXX.  ",
+" O..OOOOOOOOO.OXXXXXX.  ",
+" O............OXXXXXX.  ",
+" O............OXXXXXX.  ",
+" O..OOOOOOOOO.O.......  ",
+" O..OoooooO++.O         ",
+" O..OoooooO++.O         ",
+"  O.OoooooO++.O         ",
+"   OOOOOOOOOOOO         "};
index da4158c..fe9726f 100644 (file)
@@ -1,62 +1,32 @@
 /* XPM */
-static char *magick[] = {
-/* columns rows colors chars-per-pixel */
-"24 24 32 1",
-"  c Gray0",
-". c #133313331333",
-"X c #199919991999",
-"o c Gray12",
-"O c #23f323f323f3",
-"+ c Gray15",
-"@ c #2fef2fef2fef",
-"# c Gray20",
-"$ c #398739873987",
-"% c #3fff3fff3fff",
-"& c #4ccc4ccc4ccc",
-"* c #53e353e353e3",
-"= c #5fe65fe65fe6",
-"- c #626262626262",
-"; c Gray40",
-": c #6fff6fff6fff",
-"> c #72f272f272f2",
-", c Gray45",
-"< c #77d777d777d7",
-"1 c #7ccc7ccc7ccc",
-"2 c Gray50",
-"3 c Gray56",
-"4 c Gray60",
-"5 c #9bcb9bcb9bcb",
-"6 c #9fff9fff9fff",
-"7 c #a7c7a7c7a7c7",
-"8 c Gray75",
-"9 c Gray81",
-"0 c #dfffdfffdfff",
-"q c Gray90",
-"w c #efffefffefff",
-"e c Gray100",
-/* pixels */
-"888888888888888888888888",
-"888888888888888888888888",
-"88888*@@@@@@@@@@@@@@@@@4",
-"88888@%28eeeeeeeeee08%o3",
-"88888@e8228eeeeeee222e23",
-"88888@eee82%eeee6%80ee23",
-"88888@eeew8=%28%28eeee23",
-"88888@eee220e82e826eee23",
-"88888@ee:9eeeeeeee6%9e23",
-"87333O3 3888888eeeee:==3",
-"8=$$$>>>>>>>.&.eeeeee0%3",
-"8=>>>qqqqqqq+4+%%%%%%%o3",
-"8=>>>qqqqqqq+4+888888888",
-"8=>>>qqqqqqq+4+888888888",
-"8=>>>qqqqqqq+4+888888888",
-"8=>>>qqqqqqq+4+888888888",
-"8=>>$>>>>>>>+4+888888888",
-"8=>3>>>>>>>>24+888888888",
-"8=>3>>>>>>>>24+888888888",
-"8=>>X####+$>+4+888888888",
-"8=>>#;;;;&>q+4+888888888",
-"8<->#;;;;&>q+4+888888888",
-"88<$X####+$>.&.888888888",
-"888333333333333888888888"
-};
+static char * save_art_xpm[] = {
+"24 24 5 1",
+"      c None",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"o     c #999999999999",
+"O     c #C7C7C6C6C6C6",
+"                        ",
+"                        ",
+"     .................. ",
+"     ...XXXXXXXXXXXXX.. ",
+"     .XX..XXXXXXXXX..X. ",
+"     .XXXX..XXXXX..XXX. ",
+"     .XXXXX......XXXXX. ",
+"     .XXX..XX..XX..XXX. ",
+"     .XX..XXXXXXXX..XX. ",
+"     ...XXXXXXXXXXXX... ",
+" ..............XXXXXXX. ",
+" .oo.XXXXXXX.o......... ",
+" .oo.XXXXXXX.o.         ",
+" .oo.XXXXXXX.o.         ",
+" .oo.XXXXXXX.o.         ",
+" .oo.XXXXXXX.o.         ",
+" .oo.........o.         ",
+" .oooooooooooo.         ",
+" .oooooooooooo.         ",
+" .oo.........o.         ",
+" .oo.OOOOO.XXo.         ",
+" .oo.OOOOO.XXo.         ",
+"  .o.OOOOO.XXo.         ",
+"   ............         "};
index 62db2da..ff193a9 100644 (file)
@@ -1,49 +1,32 @@
 /* XPM */
-static char *magick[] = {
-/* columns rows colors chars-per-pixel */
-"24 24 19 1",
-"  c Gray6",
-". c Gray12",
-"X c #2ff42ff42ff4",
-"o c #3fff3fff3fff",
-"O c Gray28",
-"+ c #53e353e353e3",
-"@ c #5fe25fe25fe2",
-"# c #67e767e767e7",
-"$ c #6fff6fff6fff",
-"% c #77d777d777d7",
-"& c Gray50",
-"* c Gray56",
-"= c #9fff9fff9fff",
-"- c Gray70",
-"; c Gray75",
-": c Gray81",
-"> c #dfffdfffdfff",
-", c #efffefffefff",
-"< c Gray100",
-/* pixels */
-";;;;;;;;;;;;;;;;;;;;;;;;",
-";;;;;;;;;;;;;;;;;;;;;;;;",
-";;;;;;;;;;;;;;;;;;;;;;;;",
-";;;;@Xooooo oooXO-;;;;;;",
-";;;;@;>;=<<o<<<;o#;;;;;;",
-";;;;@;,&=<<o<<<;&:+;;;;;",
-";;;;@;:=$<<o<<<:ooX@;;;;",
-";;;;@@&&&&&.<<<<<<;@;;;;",
-";;;;@*;;;;;X<<<<<<;@;;;;",
-";;;;@;:&@<<o<<<<<<;@;;;;",
-";;;;@;>&&<<o<<<<<<;@;;;;",
-";;;;@;,>:<<o<<<<<<;@;;;;",
-";;;;@Xooooo <<<<<<;@;;;;",
-";;;;@;>;=<<o<<<<<<;@;;;;",
-";;;;@;,&=<<o<<<<<<;@;;;;",
-";;;;@;:=$<<o<<<<<<;@;;;;",
-";;;;@@&&&&&.<<<<<<;@;;;;",
-";;;;@*;;;;;X<<<<<<;@;;;;",
-";;;;@;<<<<<o<<<<<<;@;;;;",
-";;;;@;<<<<<o<<<<<<;@;;;;",
-";;;;@;<<<<<o<<<<<<;@;;;;",
-";;;;%XXXXXXXXXXXXXX%;;;;",
-";;;;;;;;;;;;;;;;;;;;;;;;",
-";;;;;;;;;;;;;;;;;;;;;;;;"
-};
+static char * subscribe_xpm[] = {
+"24 24 5 1",
+"      c None",
+".     c #A5A5A5A59595",
+"X     c #E1E1E0E0E0E0",
+"o     c #C7C7C6C6C6C6",
+"O     c #8686ADAD7D7D",
+"                        ",
+"                        ",
+"                        ",
+"     ...                ",
+"   ..XXX.....           ",
+"...XXXXX..XXX. ...      ",
+".X.XX...XXXX...XXX.     ",
+".XX.X.X.XX...XXXXX.     ",
+".XX...XX.X.X.XXXXXX.    ",
+".XX.o.XX...XX.XXXXXX.   ",
+".X.oo.XX.o.XX..XXXXXX.  ",
+"o.ooo.X.oo.XX.XXXOXXX.  ",
+"o.oXXo.ooo.X.oXXOXXXXX. ",
+" o.XXo.oXXo.ooXXOXXXXX. ",
+" o.XXXo.XXo.oXXXOXXXXXX.",
+"  o.XXo.XXXo.XOOOOXXXXX.",
+"  o.XXoo.XXo.XXXOOXXXXX.",
+"   o.XXo.XXXo.XXXXXXX...",
+"   o.XX.o.XXo.XXXXXX.oo ",
+"    o..oo.XX.o.XXX..o   ",
+"     oo  o..oo.XX.oo    ",
+"          oo  o..o      ",
+"               oo       ",
+"                        "};
index 38eab85..a91180d 100644 (file)
@@ -1,48 +1,32 @@
 /* XPM */
-static char *magick[] = {
-/* columns rows colors chars-per-pixel */
-"24 24 18 1",
-"  c Gray6",
-". c Gray12",
-"X c #2ff42ff42ff4",
-"o c #3fff3fff3fff",
-"O c Gray28",
-"+ c #53e353e353e3",
-"@ c #5fe55fe55fe5",
-"# c #67e767e767e7",
-"$ c #77d777d777d7",
-"% c Gray50",
-"& c Gray56",
-"* c #9fff9fff9fff",
-"= c Gray70",
-"- c Gray75",
-"; c Gray81",
-": c #dfffdfffdfff",
-"> c #efffefffefff",
-", c Gray100",
-/* pixels */
-"------------------------",
-"------------------------",
-"------------------------",
-"----@Xooooo oooXO=------",
-"----@-,,,:-o,,,-o#------",
-"----@-,,,@:o,,,-%;+-----",
-"----@-;%@,,o,,,;ooX@----",
-"----@@%o@%%.,,,,,,-@----",
-"----@&-----X,,,,,,-@----",
-"----@-,,,**o,,,,,,-@----",
-"----@-:-**,o,,,,,,-@----",
-"----@->%*,,o,,,,,,-@----",
-"----@Xooooo ,,,,,,-@----",
-"----@-,,,:-o,,,,,,-@----",
-"----@-,,,@:o,,,,,,-@----",
-"----@-;%@,,o,,,,,,-@----",
-"----@@%o@%%.,,,,,,-@----",
-"----@&-----X,,,,,,-@----",
-"----@-,,,,,o,,,,,,-@----",
-"----@-,,,,,o,,,,,,-@----",
-"----@-,,,,,o,,,,,,-@----",
-"----$XXXXXXXXXXXXXX$----",
-"------------------------",
-"------------------------"
-};
+static char * unsubscribe_xpm[] = {
+"24 24 5 1",
+"      c None",
+".     c #A5A5A5A59595",
+"X     c #E1E1E0E0E0E0",
+"o     c #C7C7C6C6C6C6",
+"O     c #FFFF00000000",
+"                        ",
+"                        ",
+"                        ",
+"     ...                ",
+"   ..XXX.....           ",
+"...XXXXX..XXX. ...      ",
+".X.XX...XXXX...XXX.     ",
+".XX.X.X.XX...XXXXX.     ",
+".XX...XX.X.X.XXXXXX.    ",
+".XX.o.XX...XX.XXXXXX.   ",
+".X.oo.XX.o.XX..XXXXXX.  ",
+"o.ooo.X.oo.XX.XXXXXXX.  ",
+"o.oXXo.ooo.X.oXXXXXXXX. ",
+" o.XXo.oXXo.ooXXOXXXXX. ",
+" o.XXXo.XXo.oXXXOXXXXXX.",
+"  o.XXo.XXXo.XOOOXXXXXX.",
+"  o.XXoo.XXo.XoOOOXXXXX.",
+"   o.XXo.XXXo.XOoOXXX...",
+"   o.XX.o.XXo.XOXoXX.oo ",
+"    o..oo.XX.o.oXX..o   ",
+"     oo  o..oo.XX.oo    ",
+"          oo  o..o      ",
+"               oo       ",
+"                        "};
index cdadff6..b9d940c 100644 (file)
@@ -1,48 +1,36 @@
 /* XPM */
-static char *magick[] = {
-/* columns rows colors chars-per-pixel */
-"24 24 18 1",
-"  c #2fef2fef2fef",
-". c #3fff3fff3fff",
-"X c #4ccc4ccc4ccc",
-"o c #53e353e353e3",
-"O c #566656665666",
-"+ c #5fe35fe35fe3",
-"@ c Gray45",
-"# c #77d777d777d7",
-"$ c Gray50",
-"% c #866586658665",
-"& c Gray56",
-"* c Gray60",
-"= c #9fff9fff9fff",
-"- c Gray75",
-"; c Gray81",
-": c #dfffdfffdfff",
-"> c #efffefffefff",
-", c Gray100",
-/* pixels */
-"------------------------",
-"------------------------",
-"------------------------",
-"------------------------",
-"-----#+++++++++++++&----",
-"----- @@@@@@@@@@@@O+----",
-"----- *%@@@@@@@@@&@+----",
-"----- *X+$$$$$$$.@@+----",
-"----- *X-,,,,,,,$@@+----",
-"----- *X-,,;,,,,$@@+----",
-"----- *X-:$$$-=,$@@+----",
-"----- *X-+-+-$=,$@@+----",
-"----- *X->$;;,,,$@@+----",
-"----- *X--.$.,,,$@@+----",
-"----- *X->--==,,$@@+----",
-"----- *X-,,,,=;,$@@+----",
-"----- *X-,,,,,,,$@@+----",
-"----- *X-,,,,,,,$@@+----",
-"----- *X&-------+@@+----",
-"----- *@XXXXXXXXX%@+----",
-"----- ************@+----",
-"-----o             #----",
-"------------------------",
-"------------------------"
-};
+static char * uu_decode_xpm[] = {
+"24 24 9 1",
+"      c None",
+".     c #919187876969",
+"X     c #C2C2B9B99C9C",
+"o     c #868686868686",
+"O     c #8F8F8F8F8F8F",
+"+     c #000000000000",
+"@     c #4C4C4C4C4C4C",
+"#     c #E9E9EFEFE8E8",
+"$     c #8686ADAD7D7D",
+"                        ",
+"                        ",
+"                        ",
+"    ..............      ",
+"    X.o.........O.++    ",
+"    XX++++++++++..++    ",
+"    XX@########+..++    ",
+"    XX@########+..++    ",
+"    XX@$#$$$#$#+..++    ",
+"    XX@#$$$$$$#+..++    ",
+"    XX@##$#####+..++    ",
+"    XX@##$#$$##+..++    ",
+"    XX@##$#$$##+..++    ",
+"    XX@##$$#$$#+..++    ",
+"    XX@######$#+..++    ",
+"    XX@########+..++    ",
+"    XX@########+..++    ",
+"    XX.@@@@@@@@@..++    ",
+"    X.XXXXXXXXXX..++    ",
+"    .XXXXXXXXXXXX.++    ",
+"     +++++++++++++++    ",
+"     +++++++++++++++    ",
+"                        ",
+"                        "};
index b67fa8b..7c4204c 100644 (file)
@@ -1,57 +1,35 @@
 /* XPM */
-static char *magick[] = {
-/* columns rows colors chars-per-pixel */
-"24 24 27 1",
-"  c Gray0",
-". c #0bfb0bfb0bfb",
-"X c Gray9",
-"o c Gray12",
-"O c #2fef2fef2fef",
-"+ c #3fff3fff3fff",
-"@ c Gray28",
-"# c #4ccc4ccc4ccc",
-"$ c #53e353e353e3",
-"% c #566656665666",
-"& c #5fe25fe25fe2",
-"* c #6fff6fff6fff",
-"= c Gray45",
-"- c #77d777d777d7",
-"; c Gray50",
-": c #866586658665",
-"> c Gray56",
-", c Gray60",
-"< c #9bcb9bcb9bcb",
-"1 c #9fff9fff9fff",
-"2 c #a7c7a7c7a7c7",
-"3 c Gray70",
-"4 c Gray75",
-"5 c Gray81",
-"6 c #dfffdfffdfff",
-"7 c #efffefffefff",
-"8 c Gray100",
-/* pixels */
-"$44$44$44$44$44$44$44$44",
-"444444444444-44444444444",
-"4444444444-O-O,444444444",
-"$44$44$2>O-4$4$@>3$44$44",
-"444444&&&4444442&&-44444",
-"44444$ XOOOOOOOOO..-4444",
-"$44$4O,,,,,,,,,,,,=&4$44",
-"44444O,=#########:=&4444",
-"44444O,#>4444444&==&4444",
-"$44$4O,#48888888;==&4$44",
-"44444O,#48818888;==&4444",
-"44444O,#45+1+1*8;==&4444",
-"$44$4O,#4*6&8158;==&4$44",
-"44444O,#46;61888;==&4444",
-"44444O,#44o++888;==&4444",
-"$44$4O,#48885;78;==&4$44",
-"44444O,#48888468;==&4444",
-"44444O,#48888888;==&4444",
-"$44$4O,#48888888;==&4$44",
-"44444O,#&;;;;;;;+==&4444",
-"44444O,:=========>=&4444",
-"$44$4O============%&4$44",
-"44444-&&&&&&&&&&&&&>4444",
-"444444444444444444444444"
-};
+static char * uu_post_xpm[] = {
+"24 24 8 1",
+".     c None",
+"X     c #000000000000",
+"+     c #C2C2B9B99C9C",
+"@     c #919187876969",
+"#     c #868686868686",
+"%     c #4C4C4C4C4C4C",
+"&     c #E9E9EFEFE8E8",
+"*     c #8686ADAD7D7D",
+"X..X..X..X.XX..X..X..X..",
+"..........X.X...........",
+".........X...X..........",
+"X..X..X.XX..X.XX..X..X..",
+".......X.......X........",
+"......X.........X.......",
+"X..X+X@@@@@@@@@@@XX..X..",
+"....+@@@@@@@@@@@@@......",
+"....++XXXXXXXXXX@@......",
+"X..X++%&&&&&&&&X@@X..X..",
+"....++%&&&&&&&&X@@......",
+"....++%*&***&*&X@@......",
+"X..X++%&******&X@@X..X..",
+"....++%&&*&&&&&X@@......",
+"....++%&&*&**&&X@@......",
+"X..X++%&&*&**&&X@@X..X..",
+"....++%&&**&**&X@@......",
+"....++%&&&&&&*&X@@......",
+"X..X++%&&&&&&&&X@@X..X..",
+"....++%&&&&&&&&X@@......",
+"....++@%%%%%%%%%@@......",
+"X..X+@++++++++++@@X..X..",
+"....+++++++++++++@......",
+"........................"};
index a37c8ce..b8ed8f2 100644 (file)
@@ -1,3 +1,352 @@
+2002-01-04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-xmas.el (gnus-xmas-create-image): Convert pbm to xbm.
+       (gnus-xmas-create-image): Take pbm files.
+
+2002-01-03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-xmas.el (gnus-xmas-create-image): Take optional
+       parameters.
+       (gnus-xmas-put-image): Allow non-strings to be passed.
+
+       * gnus-ems.el (gnus-create-image): Take optional parameters.
+
+2002-01-02  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       Display picons in XEmacs without showing text.
+
+       * gnus-xmas.el (gnus-xmas-create-image): Don't use
+       mm-create-image-xemacs to create xbm glyph, because it deletes
+       temporary files.
+       (gnus-xmas-put-image): Use end-glyph. Make text invisible.
+       (gnus-xmas-remove-image): Make text visible, remove glyph.
+
+2002-01-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-delay.el (gnus-delay-send-queue): Renamed.
+
+       * gnus-art.el (gnus-ignored-headers): More headers,
+
+       * ietf-drums.el (ietf-drums-parse-addresses): Use `error' instead
+       of `scan-error', since XEmacs doesn't seem to support that. 
+
+2001-12-31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-summary-best-unread-article): Take a prefix
+       arg. 
+       (gnus-summary-best-unread-subject): Ditto.
+       (gnus-summary-best-unread-subject): No, don't.
+       (gnus-summary-better-unread-subject): New command.
+
+       * gnus-xmas.el (gnus-xmas-put-image): Insert the string itself. 
+
+       * lpath.el ((featurep 'xemacs)): fbind url function.
+
+       * gnus-xmas.el (gnus-xmas-article-display-xface): Use data, not
+       buffer. 
+       (gnus-xmas-remove-image): Implementation that does something. 
+       (gnus-xmas-article-display-xface): Mark images properly.
+
+       * gnus-art.el (gnus-mime-print-part): Use mm-temp-directory. 
+
+2001-12-31  Florian Weimer  <fw@deneb.enyo.de>
+
+       * gnus.el (gnus): Warn if trying to run Gnus un-byte-compiled. 
+
+2001-12-31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-group.el (gnus-group-line-format): Added %O to the default
+       value.
+
+       * gnus-util.el (gnus-text-with-property): The smallest point is
+       point-min. 
+
+       * smiley-ems.el (smiley-region): Return images.
+       (gnus-smiley-display): Allow toggling.
+       (smiley-region): Use text properties, not overlays.
+
+       * gnus-xmas.el (gnus-xmas-remove-image): New function, not
+       implemented yet.
+
+       * smiley-ems.el (smiley-update-cache): Check for valid types.
+
+       * gnus-art.el (gnus-with-article-buffer): New macro.
+
+       * gnus-picon.el (gnus-picon-transform-newsgroups): Keep the
+       strings as well as the glyphs.
+       (gnus-picon-transform-address): Ditto.
+       (gnus-picon-insert-glyph): Ditto.
+       (gnus-picon-transform-newsgroups): Toggle.
+       (gnus-picon-transform-address): Toggle.
+
+       * gnus-ems.el (gnus-remove-image): New function.
+       (gnus-put-image): Take an optional string.
+
+       * gnus-util.el (gnus-text-with-property): New function.
+
+       * gnus-art.el (gnus-delete-images): New function.
+
+       * gnus-ems.el (gnus-article-display-xface): Mark and store image. 
+
+       * gnus-art.el (gnus-article-wash-status-entry): Renamed.
+       (gnus-article-wash-status): Use it.
+       (gnus-signature-toggle): Clean up.
+       (gnus-add-wash-status): New function.
+       (gnus-delete-wash-status): New function.
+       (gnus-article-hide-text-type): Use them throughout.
+       (gnus-add-image): New function.
+
+       * gnus-ems.el (gnus-article-display-xface): Use new interface.
+
+       * gnus-xmas.el (gnus-xmas-article-display-xface): Use new
+       interface. 
+
+       * gnus-art.el (article-display-x-face): Cleaned up.
+
+       * rfc2047.el (rfc2047-field-value): New function.
+
+       * mail-parse.el (mail-header-field-value): New alias.
+
+       * gnus-art.el (gnus-mime-print-part): Fix typos.
+
+       * smiley-ems.el (gnus-smiley-file-types): New variable.
+       (smiley-update-cache): Use it.
+       (smiley-regexp-alist): Suffix-less smiley names.
+       (smiley-regexp-alist): Added more smileys.
+
+       * gnus-sum.el (gnus-print-buffer): Made into own function.
+       (gnus-summary-print-article): Use it.
+
+       * mailcap.el (mailcap-mime-info): Actually return the bit that we
+       looked for when REQUEST is a string.
+
+       * gnus-art.el (gnus-mime-button-commands): Add printing
+       keystroke. 
+       (gnus-mime-copy-part): Doc fix.
+       (gnus-mime-print-part): New command.
+
+2001-12-31  Simon Josefsson  <jas@extundo.com>
+
+       * imap.el (imap-parse-fetch): Notice empty flags responses.  From
+       Nic Ferrier <nferrier@tf1.tapsellferrier.co.uk>.
+
+2001-12-30  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-picon.el (gnus-treat-from-picon): Autoload.
+       (picon): Fix doc.
+
+       * gnus-win.el (gnus-window-to-buffer): gnus-picon-buffer-name no
+       longer exists. Remove those codes.
+       * gnus.el (gnus-use-picons): Ditto.
+
+2001-12-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-article-treat-fold-newsgroups): Don't
+       infloop. 
+
+       * gnus-sum.el (t): New `W D' map.
+
+       * gnus-art.el (gnus-treat-fold-newsgroups): New variable.
+       (gnus-article-treat-body-boundary): Clean up.
+       (gnus-body-boundary-face): Removed.
+       (gnus-article-goto-header): Moved here.
+       (gnus-article-goto-header): Allow better regexps.
+       (gnus-article-treat-fold-newsgroups): New command.
+
+       * gnus-sum.el (gnus-summary-move-article): We have to select an
+       article to give `gnus-read-move-group-name' an opportunity to
+       suggest an appropriate default.
+
+       * rfc2047.el (rfc2047-fold-line): New function.
+       (rfc2047-unfold-line): Ditto.
+       (rfc2047-fold-region): Don't fold just after the header name. 
+
+       * mail-parse.el (mail-header-fold-line): New alias.
+       (mail-header-unfold-line): Ditto.
+
+       * gnus-art.el (gnus-body-boundary-face): Renamed.
+       (gnus-article-treat-body-boundary): Use it.
+       (gnus-article-treat-body-boundary): Use an invisible header and a
+       line of underline characters.
+
+2001-12-30  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * ietf-drums.el (ietf-drums-parse-addresses): Recover from errors.
+
+       * gnus-picon.el (gnus-picon-transform-address): Skip bad addresses.
+       (gnus-picon-split-address): New function.
+       (gnus-picon-find-face): Use it.
+       (gnus-picon-transform-address): Use it. Set first to t for each
+       address.
+
+       * gnus-art.el (gnus-with-article-headers): Move to here. Define
+       the macro then use it.
+       (gnus-treatment-function-alist): Treat picons earlier.
+
+2001-12-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-body-separator-face): New variable.
+       (gnus-article-treat-body-boundary): Use a blank, colored line. 
+
+       * gnus-picon.el (gnus-picon-find-face): Look into misc/MISC as
+       well. 
+
+       * gnus-art.el (gnus-treat-body-boundary): New variable.
+       (gnus-article-treat-unfold-headers): Use helper macro.
+       (gnus-article-treat-body-boundary): New command.
+
+       * gnus.el (gnus-logo-color-style): Change the default color. 
+       (gnus-splash-face): Gray, gray.
+
+       * gnus-xmas.el (gnus-xmas-group-startup-message): Use general
+       colors.
+
+       * gnus.el (gnus-logo-color-alist): Moved here and renamed.
+       (gnus-logo-color-style): Ditto.
+       (gnus-logo-colors): Ditto.
+
+       * gnus-picon.el (gnus-picon-create-glyph): Cache glyphs.
+
+       * gnus-art.el (gnus-treat-newsgroups-picon): New variable. 
+
+       * gnus-picon.el (gnus-treat-newsgroups-picon): New function.
+       (gnus-picon-transform-newsgroups): New function.
+
+       * ietf-drums.el (ietf-drums-parse-addresses): Accept a nil
+       string. 
+
+       * gnus-picon.el (gnus-treat-mail-picon): Renamed.
+
+       * gnus-art.el (gnus-treat-cc-picon): New variable.
+       (gnus-treat-mail-picon): Renamed.
+
+       * gnus-picon.el: New implementation.
+       (gnus-picon-find-face): Renamed.
+       (gnus-treat-from-picon): Use it.
+       (gnus-picon-transform-address): Renamed.
+       (gnus-treat-from-picon): Use it.
+       (gnus-picon-create-glyph): Renamed.
+       (gnus-picon-transform-address): Use it.
+       (gnus-treat-cc-picon): New command.
+
+       * mm-decode.el (mm-create-image-xemacs): Separated out into
+       function.  
+       (mm-get-image): Use it.
+
+       * gnus-art.el (gnus-treat-display-picons): Simplify.
+       (gnus-treat-from-picon): Renamed.
+
+       * gnus-ems.el (gnus-create-image): New function.
+       (gnus-put-image): New function.
+
+       * gnus-art.el (gnus-article-treat-unfold-headers): Doc fix.
+       (gnus-with-article-headers): New macro.
+       (gnus-article-goto-header): New function.
+
+       * gnus-xmas.el (gnus-image-type-available-p): New function.
+
+       * gnus-ems.el (gnus-image-type-available-p): New function.
+
+2001-12-30  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnrss.el (nnrss-check-group): Find the correct tag, because
+       xml.el is changed.
+
+2001-12-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-article-treat-unfold-headers): Only fold when
+       lines are shorter than the window width.
+       (gnus-ignored-headers): More headers.
+
+2001-12-29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-treat-unfold-lines): New variable.
+       (gnus-treat-unfold-headers): Remamed.
+       (gnus-article-treat-unfold-headers): New command and keystroke. 
+
+       * rfc2047.el (rfc2047-encode-message-header): Clean up.
+
+       * gnus-int.el (gnus-open-server): Mark quit-ed server as denied. 
+
+2001-12-29  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * sha1-el.el (sha1-use-external): New variable.
+       (sha1-region): Use it.
+       (sha1-string): Ditto.
+
+       * dgnushack.el (dgnushack-compile): Compile gnus-picon for Emacs.
+       * gnus-picon.el: Less warnings when compile.
+
+2001-12-29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-picon.el (gnus-picons-news-directories): Removed obsolete
+       alias. 
+       (gnus-picons-database): Default to list.
+       (gnus-picons-lookup-internal): Use it.
+
+       * nnmail.el (nnmail-article-group): Default nnmail-split-methods
+       to "bogus".
+
+       * gnus-win.el (gnus-configure-windows-hook): New hook.
+
+2001-12-29  Sascha L\e,A|\e(Bdecke  <sascha@meta-x.de>
+
+       * gnus-win.el (gnus-configure-windows): Minimize tree buffer. 
+
+2001-12-29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-update-marks): Don't uncompress the seen
+       lists. 
+       (gnus-select-newsgroup): Don't append; push.
+       (gnus-adjust-marked-articles): Remove obsolete ranges from
+       `seen'. 
+       (gnus-update-marks): Clean up.
+       (gnus-select-newsgroup): Don't stomp gnus-newsgroup-seen.
+
+2001-12-29  Frank Schmitt  <usereplyto@Frank-Schmitt.net>
+
+       * gnus-sum.el (gnus-summary-limit-to-age): Allow negative days. 
+
+2001-12-29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-auto-select-subject): New variable.
+       (gnus-summary-best-unread-subject): New function.
+       (gnus-summary-best-unread-article): Use it.
+       (gnus-summary-first-unseen-subject): New function and command. 
+
+       * gnus-art.el (gnus-treatment-function-alist): Emphasize after
+       other treatments.
+
+       * gnus-util.el (gnus-put-overlay-excluding-newlines): New
+       function. 
+
+       * gnus-art.el (gnus-article-show-hidden-text): Remove the type
+       from the list of hidden types. 
+
+       * mm-view.el (mm-inline-text): Ditto.
+       (mm-inline-text): Ditto.
+       (mm-w3-prepare-buffer): Ditto.
+
+       * gnus-art.el (article-wash-html): Inhibit more remote fetching. 
+
+2001-12-29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-ignored-headers): Added more headers. 
+
+2001-12-29  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-srvr.el (gnus-browse-foreign-server): Compute the prefix
+       once. 
+
+2001-12-29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-srvr.el (gnus-server-browse-in-group-buffer): Doc fix. 
+
+2001-12-28  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-srvr.el (gnus-browse-foreign-server): Fix typo.  From
+       Jesper Harder <harder@ifa.au.dk>.
+
 2001-12-27  Simon Josefsson  <jas@extundo.com>
 
        * gnus-sum.el (gnus-select-newsgroup): Make
diff --git a/lisp/compface.el b/lisp/compface.el
new file mode 100644 (file)
index 0000000..185f949
--- /dev/null
@@ -0,0 +1,57 @@
+;;; compface.el --- functions for converting X-Face headers
+;; Copyright (C) 2002 Free Software Foundation, Inc.
+
+;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Keywords: news
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;;; Code:
+
+;;;###
+(defun uncompface (face)
+  "Convert FACE to pbm.
+Requires the external programs `uncompface', and `icontopbm'.  On a
+GNU/Linux system these might be in packages with names like `compface'
+or `faces-xface' and `netpbm' or `libgr-progs', for instance."
+  (with-temp-buffer
+    (insert face)
+    (and (eq 0 (apply 'call-process-region (point-min) (point-max)
+                     "uncompface"
+                     'delete '(t nil) nil))
+        (progn
+          (goto-char (point-min))
+          (insert "/* Width=48, Height=48 */\n")
+          ;; I just can't get "icontopbm" to work correctly on its
+          ;; own in XEmacs.  And Emacs doesn't understand un-raw pbm
+          ;; files.
+          (if (not (featurep 'xemacs))
+              (eq 0 (call-process-region (point-min) (point-max)
+                                         "icontopbm"
+                                         'delete '(t nil)))
+            (shell-command-on-region (point-min) (point-max)
+                                     "icontopbm | pnmnoraw"
+                                     (current-buffer) t)
+            t))
+        (buffer-string))))
+
+(provide 'compface)
+
+;;; compface.el ends here
index ef06c7a..5ae684b 100644 (file)
@@ -480,8 +480,7 @@ Try to re-configure with --with-addpath=FLIM_PATH and run make again.
             (message "No bbdb: %s %s (ignored)" code (locate-library "bbdb"))
             '("gnus-bbdb.el")))
          (unless (featurep 'xemacs)
-           '("gnus-xmas.el" "gnus-picon.el" "messagexmas.el"
-             "nnheaderxm.el" "smiley.el"))
+           '("gnus-xmas.el" "messagexmas.el" "nnheaderxm.el" "smiley.el"))
          (when (or (featurep 'xemacs) (<= emacs-major-version 20))
            '("smiley-ems.el"))
          (when (and (fboundp 'base64-decode-string)
index 33f14c9..bdab1d6 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-agent.el --- unplugged support for Semi-gnus
-;; Copyright (C) 1997, 1998, 1999, 2000, 2001
+;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002
 ;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -272,7 +272,7 @@ If this is `ask' the hook will query the user."
   "Jj" gnus-agent-toggle-plugged
   "Js" gnus-agent-fetch-session
   "JY" gnus-agent-synchronize-flags
-  "JS" gnus-group-send-drafts
+  "JS" gnus-group-send-queue
   "Ja" gnus-agent-add-group
   "Jr" gnus-agent-remove-group)
 
@@ -283,7 +283,7 @@ If this is `ask' the hook will query the user."
      '("Agent"
        ["Toggle plugged" gnus-agent-toggle-plugged t]
        ["List categories" gnus-enter-category-buffer t]
-       ["Send drafts" gnus-group-send-drafts gnus-plugged]
+       ["Send queue" gnus-group-send-queue gnus-plugged]
        ("Fetch"
        ["All" gnus-agent-fetch-session gnus-plugged]
        ["Group" gnus-agent-fetch-group gnus-plugged])))))
@@ -1770,7 +1770,7 @@ The following commands are available:
   (let ((init-file-user "")
        (gnus-always-read-dribble-file t))
     (gnus))
-  (gnus-group-send-drafts)
+  (gnus-group-send-queue)
   (gnus-agent-fetch-session))
 
 (provide 'gnus-agent)
index 9d89b0a..60768c3 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-art.el --- article mode commands for Semi-gnus
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
 ;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
     "^X-Abuse-Info:" "^X-From_:" "^X-Accept-Language:" "^Errors-To:"
     "^X-BeenThere:" "^X-Mailman-Version:" "^List-Help:" "^List-Post:"
     "^List-Subscribe:" "^List-Id:" "^List-Unsubscribe:" "^List-Archive:"
-     "^X-Content-length:" "^X-Posting-Agent:" "^Original-Received:")
+     "^X-Content-length:" "^X-Posting-Agent:" "^Original-Received:"
+     "^X-Request-PGP:" "^X-Fingerprint:" "^X-WRIEnvto:" "^X-WRIEnvfrom:"
+     "^X-Virus-Scanned:" "^X-Delivery-Agent:" "^Posted-Date:" "^X-Gateway:"
+     "^X-Local-Origin:" "^X-Local-Destination:" "^X-UserInfo1:")
   "*All headers that start with this regexp will be hidden.
 This variable can also be a list of regexps of headers to be ignored.
 If `gnus-visible-headers' is non-nil, this variable will be ignored."
@@ -234,15 +237,14 @@ regexp.  If it matches, the text in question is not a signature."
 (defcustom gnus-article-x-face-command
   (cond
    ((featurep 'xemacs)
-    (if (or (featurep 'xface)
-           (featurep 'xpm))
+    (if (or (gnus-image-type-available-p 'xface)
+           (gnus-image-type-available-p 'xpm))
        'gnus-xmas-article-display-xface
       "{ echo '/* Width=48, Height=48 */'; uncompface; } | icontopbm | ee -"))
    ((and (fboundp 'image-type-available-p)
         (module-installed-p 'x-face-e21))
     'x-face-decode-message-header)
-   ((and (fboundp 'image-type-available-p)
-        (image-type-available-p 'xbm))
+   ((gnus-image-type-available-p 'xbm)
     'gnus-article-display-xface)
    ((and window-system
         (module-installed-p 'x-face-mule))
@@ -1060,6 +1062,20 @@ See the manual for details."
   :group 'gnus-article-treat
   :type gnus-article-treat-custom)
 
+(defcustom gnus-treat-unfold-headers 'head
+  "Unfold folded header lines.
+Valid values are nil, t, `head', `last', an integer or a predicate.
+See the manual for details."
+  :group 'gnus-article-treat
+  :type gnus-article-treat-custom)
+
+(defcustom gnus-treat-fold-newsgroups 'head
+  "Fold the Newsgroups and Followup-To headers.
+Valid values are nil, t, `head', `last', an integer or a predicate.
+See the manual for details."
+  :group 'gnus-article-treat
+  :type gnus-article-treat-custom)
+
 (defcustom gnus-treat-overstrike t
   "Treat overstrike highlighting.
 Valid values are nil, t, `head', `last', an integer or a predicate.
@@ -1072,7 +1088,8 @@ See the manual for details."
   (and (or (and (fboundp 'image-type-available-p)
                (image-type-available-p 'xbm)
                (string-match "^0x" (shell-command-to-string "uncompface")))
-          (and (featurep 'xemacs) (featurep 'xface))
+          (and (featurep 'xemacs)
+               (featurep 'xface))
           (eq 'x-face-mule-gnus-article-display-x-face
               gnus-article-x-face-command))
        'head)
@@ -1102,13 +1119,47 @@ See the manual for details."
   :type gnus-article-treat-custom)
 (put 'gnus-treat-display-smileys 'highlight t)
 
-(defcustom gnus-treat-display-picons (if (featurep 'xemacs) 'head nil)
-  "Display picons.
+(defcustom gnus-treat-from-picon
+  (if (gnus-image-type-available-p 'xpm)
+      'head nil)
+  "Display picons in the From header.
+Valid values are nil, t, `head', `last', an integer or a predicate.
+See the manual for details."
+  :group 'gnus-article-treat
+  :type gnus-article-treat-head-custom)
+(put 'gnus-treat-from-picon 'highlight t)
+
+(defcustom gnus-treat-mail-picon
+  (if (gnus-image-type-available-p 'xpm)
+      'head nil)
+  "Display picons in To and Cc headers.
+Valid values are nil, t, `head', `last', an integer or a predicate.
+See the manual for details."
+  :group 'gnus-article-treat
+  :type gnus-article-treat-head-custom)
+(put 'gnus-treat-mail-picon 'highlight t)
+
+(defcustom gnus-treat-newsgroups-picon
+  (if (gnus-image-type-available-p 'xpm)
+      'head nil)
+  "Display picons in the Newsgroups and Followup-To headers.
 Valid values are nil, t, `head', `last', an integer or a predicate.
 See the manual for details."
   :group 'gnus-article-treat
   :type gnus-article-treat-head-custom)
-(put 'gnus-treat-display-picons 'highlight t)
+(put 'gnus-treat-newsgroups-picon 'highlight t)
+
+(defcustom gnus-treat-body-boundary
+  (if (or gnus-treat-newsgroups-picon
+         gnus-treat-mail-picon
+         gnus-treat-from-picon)
+      'head nil)
+  "Draw a boundary at the end of the headers.
+Valid values are nil, t, `head', `last', an integer or a predicate.
+See the manual for details."
+  :version "21.1"
+  :group 'gnus-article-treat
+  :type gnus-article-treat-custom)
 
 (defcustom gnus-treat-capitalize-sentences nil
   "Capitalize sentence-starting words.
@@ -1180,6 +1231,7 @@ It is a string, such as \"PGP\". If nil, ask user."
 (defvar article-goto-body-goes-to-point-min-p nil)
 (defvar gnus-article-wash-types nil)
 (defvar gnus-article-emphasis-alist nil)
+(defvar gnus-article-image-alist nil)
 
 (defvar gnus-article-mime-handle-alist-1 nil)
 (defvar gnus-treatment-function-alist
@@ -1192,7 +1244,6 @@ It is a string, such as \"PGP\". If nil, ask user."
     (gnus-treat-fill-article gnus-article-fill-cited-article)
     (gnus-treat-fill-long-lines gnus-article-fill-long-lines)
     (gnus-treat-strip-cr gnus-article-remove-cr)
-    (gnus-treat-display-xface gnus-article-display-x-face)
     (gnus-treat-date-ut gnus-article-date-ut)
     (gnus-treat-date-local gnus-article-date-local)
     (gnus-treat-date-english gnus-article-date-english)
@@ -1209,8 +1260,10 @@ It is a string, such as \"PGP\". If nil, ask user."
     (gnus-treat-leading-whitespace gnus-article-remove-leading-whitespace)
     (gnus-treat-strip-pgp gnus-article-hide-pgp)
     (gnus-treat-strip-pem gnus-article-hide-pem)
+    (gnus-treat-from-picon gnus-treat-from-picon)
+    (gnus-treat-mail-picon gnus-treat-mail-picon)
+    (gnus-treat-newsgroups-picon gnus-treat-newsgroups-picon)
     (gnus-treat-highlight-headers gnus-article-highlight-headers)
-    (gnus-treat-emphasize gnus-article-emphasize)
     (gnus-treat-highlight-citation gnus-article-highlight-citation)
     (gnus-treat-highlight-signature gnus-article-highlight-signature)
     (gnus-treat-strip-trailing-blank-lines
@@ -1220,13 +1273,17 @@ It is a string, such as \"PGP\". If nil, ask user."
     (gnus-treat-strip-multiple-blank-lines
      gnus-article-strip-multiple-blank-lines)
     (gnus-treat-overstrike gnus-article-treat-overstrike)
+    (gnus-treat-unfold-headers gnus-article-treat-unfold-headers)
+    (gnus-treat-fold-newsgroups gnus-article-treat-fold-newsgroups)
     (gnus-treat-buttonize-head gnus-article-add-buttons-to-head)
     (gnus-treat-display-smileys ,(if (or (featurep 'xemacs)
                                         (>= emacs-major-version 21))
                                     'gnus-smiley-display
                                   'gnus-article-smiley-display))
     (gnus-treat-capitalize-sentences gnus-article-capitalize-sentences)
-    (gnus-treat-display-picons gnus-article-display-picons)
+    (gnus-treat-emphasize gnus-article-emphasize)
+    (gnus-treat-display-xface gnus-article-display-x-face)
+    (gnus-treat-body-boundary gnus-article-treat-body-boundary)
     (gnus-treat-play-sounds gnus-earcon-display)))
 
 (defvar gnus-article-mime-handle-alist nil)
@@ -1254,6 +1311,34 @@ Initialized from `text-mode-syntax-table.")
 
 (defvar gnus-inhibit-hiding nil)
 
+;;; Macros for dealing with the article buffer.
+
+(defmacro gnus-with-article-headers (&rest forms)
+  `(save-excursion
+     (set-buffer gnus-article-buffer)
+     (save-restriction
+       (let ((buffer-read-only nil)
+            (inhibit-point-motion-hooks t)
+            (case-fold-search t))
+        (article-narrow-to-head)
+        ,@forms))))
+
+(put 'gnus-with-article-headers 'lisp-indent-function 0)
+(put 'gnus-with-article-headers 'edebug-form-spec '(body))
+
+(defmacro gnus-with-article-buffer (&rest forms)
+  `(save-excursion
+     (set-buffer gnus-article-buffer)
+     (let ((buffer-read-only nil))
+       ,@forms)))
+
+(put 'gnus-with-article-buffer 'lisp-indent-function 0)
+(put 'gnus-with-article-buffer 'edebug-form-spec '(body))
+
+(defun gnus-article-goto-header (header)
+  "Go to HEADER, which is a regular expression."
+  (re-search-forward (concat "^\\(" header "\\):") nil t))
+
 (defsubst gnus-article-hide-text (b e props)
   "Set text PROPS on the B to E region, extending `intangible' 1 past B."
   (gnus-add-text-properties-when 'article-type nil b e props)
@@ -1271,14 +1356,13 @@ Initialized from `text-mode-syntax-table.")
 
 (defun gnus-article-hide-text-type (b e type)
   "Hide text of TYPE between B and E."
-  (push type gnus-article-wash-types)
+  (gnus-add-wash-type type)
   (gnus-article-hide-text
    b e (cons 'article-type (cons type gnus-hidden-properties))))
 
 (defun gnus-article-unhide-text-type (b e type)
   "Unhide text of TYPE between B and E."
-  (setq gnus-article-wash-types
-       (delq type gnus-article-wash-types))
+  (gnus-delete-wash-type type)
   (remove-text-properties
    b e (cons 'article-type (cons type gnus-hidden-properties)))
   (when (memq 'intangible gnus-hidden-properties)
@@ -1387,15 +1471,14 @@ Initialized from `text-mode-syntax-table.")
            (when (setq beg (text-property-any
                             (point-min) (point-max) 'message-rank (+ 2 max)))
              ;; We delete or make invisible the unwanted headers.
-             (push 'headers gnus-article-wash-types)
+             (gnus-add-wash-type 'headers)
              (if delete
                  (progn
                    (add-text-properties
                     (point-min) (+ 5 (point-min))
                     '(article-type headers dummy-invisible t))
                    (delete-region beg (point-max)))
-               (gnus-article-hide-text-type beg (point-max) 'headers))))))))
-  )
+               (gnus-article-hide-text-type beg (point-max) 'headers)))))))))
 
 (defun article-hide-boring-headers (&optional arg)
   "Toggle hiding of headers that aren't very interesting.
@@ -1702,6 +1785,53 @@ MAP is an alist where the elements are on the form (\"from\" \"to\")."
              (put-text-property
               (point) end 'face 'underline)))))))))
 
+(defun gnus-article-treat-unfold-headers ()
+  "Unfold folded message headers.
+Only the headers that fit into the current window width will be
+unfolded."
+  (interactive)
+  (gnus-with-article-headers
+    (let (length)
+      (while (not (eobp))
+       (save-restriction
+         (mail-header-narrow-to-field)
+         (let ((header (buffer-substring (point-min) (point-max))))
+           (with-temp-buffer
+             (insert header)
+             (goto-char (point-min))
+             (while (re-search-forward "[\t ]*\n[\t ]+" nil t)
+               (replace-match " " t t)))
+           (setq length (- (point-max) (point-min) 1)))
+         (when (< length (window-width))
+           (while (re-search-forward "[\t ]*\n[\t ]+" nil t)
+             (replace-match " " t t)))
+         (goto-char (point-max)))))))
+
+(defun gnus-article-treat-fold-newsgroups ()
+  "Unfold folded message headers.
+Only the headers that fit into the current window width will be
+unfolded."
+  (interactive)
+  (gnus-with-article-headers
+    (while (gnus-article-goto-header "newsgroups\\|followup-to")
+      (save-restriction
+       (mail-header-narrow-to-field)
+       (while (search-forward "," nil t)
+         (replace-match ", " t t))
+       (mail-header-fold-field)
+       (goto-char (point-max))))))
+
+(defun gnus-article-treat-body-boundary ()
+  "Place a boundary line at the end of the headers."
+  (interactive)
+  (gnus-with-article-headers
+    (goto-char (point-max))
+    (let ((start (point)))
+    (insert "X-Boundary: ")
+    (gnus-add-text-properties start (point) '(invisible t intangible t))
+    (insert (make-string (1- (window-width)) ?-)
+           "\n"))))
+
 (defun article-fill-long-lines ()
   "Fill lines that are wider than the window width."
   (interactive)
@@ -1763,90 +1893,52 @@ MAP is an alist where the elements are on the form (\"from\" \"to\")."
 (defun article-display-x-face (&optional force)
   "Look for an X-Face header and display it if present."
   (interactive (list 'force))
-  (save-excursion
-    ;; Delete the old process, if any.
-    (when (process-status "article-x-face")
-      (delete-process "article-x-face"))
-    (let ((inhibit-point-motion-hooks t)
-         x-faces
-         (case-fold-search t)
-         from last)
-      (save-restriction
-       (article-narrow-to-head)
-;;     (when (and buffer-read-only ;; When type `W f'
-;;                (progn
-;;                  (goto-char (point-min))
-;;                  (not (re-search-forward "^X-Face:[\t ]*" nil t)))
-;;                (gnus-buffer-live-p gnus-original-article-buffer))
-;;       (with-current-buffer gnus-original-article-buffer
-;;         (save-restriction
-;;           (article-narrow-to-head)
-;;           (while (re-search-forward "^X-Face:" nil t)
-;;             (setq x-faces
-;;                   (concat
-;;                    (or x-faces "")
-;;                    (buffer-substring
-;;                     (match-beginning 0)
-;;                     (1- (re-search-forward
-;;                          "^\\($\\|[^ \t]\\)" nil t))))))))
-;;       (if x-faces
-;;           (let (point start bface eface buffer-read-only)
-;;             (goto-char (point-max))
-;;             (forward-line -1)
-;;             (setq bface (get-text-property (gnus-point-at-bol) 'face)
-;;                   eface (get-text-property (1- (gnus-point-at-eol)) 'face))
-;;             (goto-char (point-max))
-;;             (setq point (point))
-;;             (insert x-faces)
-;;             (goto-char point)
-;;             (while (looking-at "\\([^:]+\\): *")
-;;               (put-text-property (match-beginning 1) (1+ (match-end 1))
-;;                                  'face bface)
-;;               (setq start (match-end 0))
-;;               (forward-line 1)
-;;               (while (looking-at "[\t ]")
-;;                 (forward-line 1))
-;;               (put-text-property start (point)
-;;                                  'face eface)))))
-       (goto-char (point-min))
-       (setq from (message-fetch-field "from"))
-       (goto-char (point-min))
-       (while (and gnus-article-x-face-command
-                   (not last)
-                   (or force
-                       ;; Check whether this face is censored.
-                       (not gnus-article-x-face-too-ugly)
-                       (and gnus-article-x-face-too-ugly from
-                            (not (string-match gnus-article-x-face-too-ugly
-                                               from))))
-                   ;; Has to be present.
-                   (re-search-forward "^X-Face:[\t ]*" nil t))
-         ;; This used to try to do multiple faces (`while' instead of
-         ;; `when' above), but (a) sending multiple EOFs to xv doesn't
-         ;; work (b) it can crash some versions of Emacs (c) are
-         ;; multiple faces really something to encourage?
-         (when (stringp gnus-article-x-face-command)
-           (setq last t))
-         ;; We now have the area of the buffer where the X-Face is stored.
-         (save-excursion
-           (let ((beg (point))
-                 (end (1- (re-search-forward "^\\($\\|[^ \t]\\)" nil t)))
-                 buffer-read-only)
-             ;; We display the face.
-             (if (symbolp gnus-article-x-face-command)
-                 ;; The command is a lisp function, so we call it.
-                 (if (gnus-functionp gnus-article-x-face-command)
-                     (funcall gnus-article-x-face-command beg end)
-                   (error "%s is not a function" gnus-article-x-face-command))
-               ;; The command is a string, so we interpret the command
-               ;; as a, well, command, and fork it off.
-               (let ((process-connection-type nil))
-                 (process-kill-without-query
-                  (start-process
-                   "article-x-face" nil shell-file-name shell-command-switch
-                   gnus-article-x-face-command))
-                 (process-send-region "article-x-face" beg end)
-                 (process-send-eof "article-x-face"))))))))))
+  (gnus-with-article-headers
+   ;; Delete the old process, if any.
+   (when (process-status "article-x-face")
+     (delete-process "article-x-face"))
+   (if (memq 'xface gnus-article-wash-types)
+       ;; We have already displayed X-Faces, so we remove them
+       ;; instead.
+       (gnus-delete-images 'xface)
+     ;; Display X-Faces.
+     (let (x-faces from face)
+       (save-excursion
+        (set-buffer gnus-original-article-buffer)
+        (save-restriction
+          (mail-narrow-to-head)
+          (while (gnus-article-goto-header "x-face")
+            (push (mail-header-field-value) x-faces))
+          (setq from (message-fetch-field "from"))))
+       ;; Sending multiple EOFs to xv doesn't work, so we only do a
+       ;; single external face.
+       (when (stringp gnus-article-x-face-command)
+        (setq x-faces (list (car x-faces))))
+       (while (and (setq face (pop x-faces))
+                  gnus-article-x-face-command
+                  (or force
+                      ;; Check whether this face is censored.
+                      (not gnus-article-x-face-too-ugly)
+                      (and gnus-article-x-face-too-ugly from
+                           (not (string-match gnus-article-x-face-too-ugly
+                                              from)))))
+        ;; We display the face.
+        (if (symbolp gnus-article-x-face-command)
+            ;; The command is a lisp function, so we call it.
+            (if (gnus-functionp gnus-article-x-face-command)
+                (funcall gnus-article-x-face-command face)
+              (error "%s is not a function" gnus-article-x-face-command))
+          ;; The command is a string, so we interpret the command
+          ;; as a, well, command, and fork it off.
+          (let ((process-connection-type nil))
+            (process-kill-without-query
+             (start-process
+              "article-x-face" nil shell-file-name shell-command-switch
+              gnus-article-x-face-command))
+            (with-temp-buffer
+              (insert face)
+              (process-send-region "article-x-face" (point-min) (point-max)))
+            (process-send-eof "article-x-face"))))))))
 
 (defun article-decode-mime-words ()
   "Decode all MIME-encoded words in the article."
@@ -2040,7 +2132,9 @@ If READ-CHARSET, ask for a coding system."
          (narrow-to-region (point) (point-max))
          (mm-setup-w3)
          (let ((w3-strict-width (window-width))
-               (url-standalone-mode t))
+               (url-standalone-mode t)
+               (w3-honor-stylesheets nil)
+               (w3-delay-image-loads t))
            (condition-case var
                (w3-region (point-min) (point-max))
              (error))))))))
@@ -2078,7 +2172,7 @@ The `gnus-list-identifiers' variable specifies what to do."
        (article-goto-body)
        ;; Hide the "header".
        (when (re-search-forward "^-----BEGIN PGP SIGNED MESSAGE-----\n" nil t)
-         (push 'pgp gnus-article-wash-types)
+         (gnus-add-wash-type 'pgp)
          (delete-region (match-beginning 0) (match-end 0))
          ;; Remove armor headers (rfc2440 6.2)
          (delete-region (point) (or (re-search-forward "^[ \t]*\n" nil t)
@@ -2118,7 +2212,7 @@ always hide."
                    "\n-----BEGIN PRIVACY-ENHANCED MESSAGE-----\n"
                    nil t)
                   (setq end (1+ (match-beginning 0))))
-         (push 'pem gnus-article-wash-types)
+         (gnus-add-wash-type 'pem)
          (gnus-article-hide-text-type
           end
           (if (search-forward "\n\n" nil t)
@@ -2199,7 +2293,8 @@ always hide."
               (1+ button)
               (next-single-property-change (1+ button) 'mime-view-entity
                                            nil (point-max))
-              'signature))))))))
+              'signature)))))))
+  (gnus-set-mode-line 'article))
 
 (defun article-strip-headers-in-body ()
   "Strip offensive headers from bodies."
@@ -2391,7 +2486,8 @@ Originally it is hide instead of DUMMY."
      'article-type type
      (point-min) (point-max)
      (cons 'article-type (cons type
-                              gnus-hidden-properties)))))
+                              gnus-hidden-properties)))
+    (gnus-delete-wash-type type)))
 
 (defconst article-time-units
   `((year . ,(* 365.25 24 60 60))
@@ -2718,9 +2814,9 @@ This format is defined by the `gnus-article-time-format' variable."
               (match-beginning invisible) (match-end invisible) props)
              (gnus-article-unhide-text-type
               (match-beginning visible) (match-end visible) 'emphasis)
-             (gnus-put-text-property-excluding-newlines
+             (gnus-put-overlay-excluding-newlines
               (match-beginning visible) (match-end visible) 'face face)
-             (push 'emphasis gnus-article-wash-types)
+             (gnus-add-wash-type 'emphasis)
              (goto-char (match-end invisible)))))))))
 
 (defun gnus-article-setup-highlight-words (&optional highlight-words)
@@ -3133,15 +3229,15 @@ If variable `gnus-use-long-file-name' is non-nil, it is
         (setq afunc func
               gfunc (intern (format "gnus-%s" func))))
        (defalias gfunc
-        (if (fboundp afunc)
-            `(lambda (&optional interactive &rest args)
-               ,(documentation afunc t)
-               (interactive (list t))
-               (save-excursion
-                 (set-buffer gnus-article-buffer)
-                 (if interactive
-                     (call-interactively ',afunc)
-                   (apply ',afunc args))))))))
+        (when (fboundp afunc)
+          `(lambda (&optional interactive &rest args)
+             ,(documentation afunc t)
+             (interactive (list t))
+             (save-excursion
+               (set-buffer gnus-article-buffer)
+               (if interactive
+                   (call-interactively ',afunc)
+                 (apply ',afunc args))))))))
    '(article-hide-headers
      article-verify-x-pgp-sig
      article-verify-cancel-lock
@@ -3303,6 +3399,7 @@ commands:
   (make-local-variable 'gnus-article-decoded-p)
   (make-local-variable 'gnus-article-mime-handle-alist)
   (make-local-variable 'gnus-article-wash-types)
+  (make-local-variable 'gnus-article-image-alist)
   (make-local-variable 'gnus-article-charset)
   (make-local-variable 'gnus-article-ignored-charsets)
   (gnus-set-default-directory)
@@ -3611,7 +3708,8 @@ If ALL-HEADERS is non-nil, no headers are hidden."
       (gnus-article-mode))
     (setq buffer-read-only nil
          gnus-button-marker-list nil
-         gnus-article-wash-types nil)
+         gnus-article-wash-types nil
+         gnus-article-image-alist nil)
     (save-restriction
       (widen)
       (static-if (featurep 'xemacs)
@@ -3696,6 +3794,7 @@ value of the variable `gnus-show-mime' is non-nil."
     (gnus-mime-inline-part "i" "View As Text, In This Buffer")
     (gnus-mime-internalize-part "E" "View Internally")
     (gnus-mime-externalize-part "e" "View Externally")
+    (gnus-mime-print-part "p" "Print")
     (gnus-mime-pipe-part "|" "Pipe To Command...")
     (gnus-mime-action-on-part "." "Take action on the part")))
 
@@ -3881,7 +3980,7 @@ value of the variable `gnus-show-mime' is non-nil."
       (gnus-mm-display-part handle))))
 
 (defun gnus-mime-copy-part (&optional handle)
-  "Put the the MIME part under point into a new buffer."
+  "Put the MIME part under point into a new buffer."
   (interactive)
   (gnus-article-check-buffer)
   (let* ((handle (or handle (get-text-property (point) 'gnus-data)))
@@ -3905,6 +4004,31 @@ value of the variable `gnus-show-mime' is non-nil."
        (setq buffer-file-name nil))
       (goto-char (point-min)))))
 
+(defun gnus-mime-print-part (&optional handle)
+  "Print the MIME part under point."
+  (interactive)
+  (gnus-article-check-buffer)
+  (let* ((handle (or handle (get-text-property (point) 'gnus-data)))
+        (contents (and handle (mm-get-part handle)))
+        (file (make-temp-name (expand-file-name "mm." mm-tmp-directory)))
+        (printer (mailcap-mime-info (mm-handle-type handle) "print")))
+    (when contents
+       (if printer
+           (unwind-protect
+               (progn
+                 (with-temp-file file
+                   (insert contents))
+                 (call-process shell-file-name nil
+                               (generate-new-buffer " *mm*")
+                               nil
+                               shell-command-switch
+                               (mm-mailcap-command
+                                printer file (mm-handle-type handle))))
+             (delete-file file))
+         (with-temp-buffer
+           (insert contents)
+           (gnus-print-buffer))))))
+
 (defun gnus-mime-inline-part (&optional handle arg)
   "Insert the MIME part under point into the current buffer."
   (interactive (list nil current-prefix-arg))
@@ -4285,12 +4409,10 @@ If no internal viewer is available, use an external viewer."
     ;;;!!! No, w3 can display everything just fine.
     (gnus-mime-display-part (cadr handle)))
    ((equal (car handle) "multipart/signed")
-    (or (memq 'signed gnus-article-wash-types)
-       (push 'signed gnus-article-wash-types))
+    (gnus-add-wash-type 'signed)
     (gnus-mime-display-security handle))
    ((equal (car handle) "multipart/encrypted")
-    (or (memq 'encrypted gnus-article-wash-types)
-       (push 'encrypted gnus-article-wash-types))
+    (gnus-add-wash-type 'encrypted)
     (gnus-mime-display-security handle))
    ;; Other multiparts are handled like multipart/mixed.
    (t
@@ -4518,7 +4640,7 @@ representing the particular washing function, ON is the string to use
 in the article mode line when the washing function is active, and OFF
 is the string to use when it is inactive.")
 
-(defun gnus-gnus-article-wash-status-entry (key value)
+(defun gnus-article-wash-status-entry (key value)
   (let ((entry (assoc key gnus-article-wash-status-strings)))
     (if value (nth 1 entry) (nth 2 entry))))
 
@@ -4536,16 +4658,38 @@ is the string to use when it is inactive.")
          (signature (memq 'signature gnus-article-wash-types))
          (overstrike (memq 'overstrike gnus-article-wash-types))
          (emphasis (memq 'emphasis gnus-article-wash-types)))
-      (concat (gnus-gnus-article-wash-status-entry 'cite cite)
-             (gnus-gnus-article-wash-status-entry 'headers
-                                                  (or headers boring))
-             (gnus-gnus-article-wash-status-entry
-              'pgp (or pgp pem signed encrypted))
-             (gnus-gnus-article-wash-status-entry 'signature signature)
-             (gnus-gnus-article-wash-status-entry 'overstrike overstrike)
-             (gnus-gnus-article-wash-status-entry 'gnus-show-mime
-                                                  gnus-show-mime)
-             (gnus-gnus-article-wash-status-entry 'emphasis emphasis)))))
+      (concat
+       (gnus-article-wash-status-entry 'cite cite)
+       (gnus-article-wash-status-entry 'headers (or headers boring))
+       (gnus-article-wash-status-entry 'pgp (or pgp pem signed encrypted))
+       (gnus-article-wash-status-entry 'signature signature)
+       (gnus-article-wash-status-entry 'overstrike overstrike)
+       (gnus-article-wash-status-entry 'gnus-show-mime gnus-show-mime)
+       (gnus-article-wash-status-entry 'emphasis emphasis)))))
+
+(defun gnus-add-wash-type (type)
+  "Add a washing of TYPE to the current status."
+  (push type gnus-article-wash-types))
+
+(defun gnus-delete-wash-type (type)
+  "Add a washing of TYPE to the current status."
+  (setq gnus-article-wash-types (delq type gnus-article-wash-types)))
+
+(defun gnus-add-image (category image)
+  "Add IMAGE of CATEGORY to the list of displayed images."
+  (let ((entry (assq category gnus-article-image-alist)))
+    (unless entry
+      (setq entry (list category))
+      (push entry gnus-article-image-alist))
+    (nconc entry (list image))))
+
+(defun gnus-delete-images (category)
+  "Delete all images in CATEGORY."
+  (let ((entry (assq category gnus-article-image-alist)))
+    (dolist (image (cdr entry))
+      (gnus-remove-image image))
+    (setq gnus-article-image-alist (delq entry gnus-article-image-alist))
+    (gnus-delete-wash-type category)))
 
 (defalias 'gnus-article-hide-headers-if-wanted 'gnus-article-maybe-hide-headers)
 
@@ -5659,14 +5803,12 @@ specified by `gnus-button-alist'."
                                              nil (point-max))))
       (if (text-property-any end limit 'article-type 'signature)
          (progn
-           (setq gnus-article-wash-types
-                 (delq 'signature gnus-article-wash-types))
+           (gnus-delete-wash-type 'signature)
            (gnus-remove-text-properties-when
             'article-type 'signature end limit
             (cons 'article-type (cons 'signature
                                       gnus-hidden-properties))))
-       (or (memq 'signature gnus-article-wash-types)
-           (push 'signature gnus-article-wash-types))
+       (gnus-add-wash-type 'signature)
        (gnus-add-text-properties-when
         'article-type nil end limit
         (cons 'article-type (cons 'signature
index f888492..39c3592 100644 (file)
@@ -511,8 +511,7 @@ always hide."
                    (setq beg nil)
                  (setq end (point-marker))))))
          (when (and beg end)
-           (or (memq 'cite gnus-article-wash-types)
-               (push 'cite gnus-article-wash-types))
+           (gnus-add-wash-type 'cite)
            ;; We use markers for the end-points to facilitate later
            ;; wrapping and mangling of text.
            (setq beg (set-marker (make-marker) beg)
@@ -558,8 +557,7 @@ means show, nil means toggle."
             'article-type 'cite beg end
             (cons 'article-type (cons 'cite
                                       gnus-hidden-properties))))
-       (or (memq 'cite gnus-article-wash-types)
-           (push 'cite gnus-article-wash-types))
+       (gnus-add-wash-type 'cite)
        (gnus-add-text-properties-when
         'article-type nil beg end
         (cons 'article-type (cons 'cite
@@ -974,8 +972,7 @@ See also the documentation for `gnus-article-highlight-citation'."
                                       gnus-hidden-properties))
              ((assq number gnus-cite-attribution-alist))
              (t
-              (or (memq 'cite gnus-article-wash-types)
-                  (push 'cite gnus-article-wash-types))
+              (gnus-add-wash-type 'cite)
               (gnus-add-text-properties
                (point) (progn (forward-line 1) (point))
                (nconc (list 'article-type 'cite)
index c464e79..c7652da 100644 (file)
@@ -1,6 +1,6 @@
 ;;; gnus-delay.el --- Delayed posting of articles
 
-;; Copyright (C) 2001  Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2002  Free Software Foundation, Inc.
 
 ;; Author: Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
 ;; Keywords: mail, news, extensions
@@ -26,7 +26,7 @@
 
 ;;; Todo:
 
-;; * `gnus-delay-send-drafts' barfs when group does not exist.
+;; * `gnus-delay-send-queue' barfs when group does not exist.
 ;; * Integrate gnus-delay.el into the rest of Gnus automatically.  How
 ;;   should this be done?  Basically, we need to do what
 ;;   `gnus-delay-initialize' does.  But in which files?
@@ -138,7 +138,7 @@ DELAY is a string, giving the length of the time.  Possible values are:
   (message-do-actions message-postpone-actions))
 
 ;;;###autoload
-(defun gnus-delay-send-drafts ()
+(defun gnus-delay-send-queue ()
   "Send all the delayed messages that are due now."
   (interactive)
   (save-excursion
@@ -176,7 +176,7 @@ This tells Gnus to look for delayed messages after getting new news.
 The optional arg NO-KEYMAP is ignored.
 Checking delayed messages is skipped if optional arg NO-CHECK is non-nil."
   (unless no-check
-    (add-hook 'gnus-get-new-news-hook 'gnus-delay-send-drafts)))
+    (add-hook 'gnus-get-new-news-hook 'gnus-delay-send-queue)))
 
 (provide 'gnus-delay)
 
index 9fa69b5..b2fbed5 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-draft.el --- draft message support for Semi-gnus
-;; Copyright (C) 1997, 1998, 1999, 2000, 2001
+;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002
 ;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
   (gnus-uu-mark-buffer)
   (gnus-draft-send-message))
 
-(defun gnus-group-send-drafts ()
+(defun gnus-group-send-queue ()
   "Send all sendable articles from the queue group."
   (interactive)
   (gnus-activate-group "nndraft:queue")
index 010c325..083a3ba 100644 (file)
   "Non-nil means the compface program supports the -X option.
 That produces XBM output.")
 
-(defun gnus-article-display-xface (beg end &optional buffer)
-  "Display an XFace header from between BEG and END in BUFFER.
+(defun gnus-article-display-xface (data)
+  "Display the XFace header FACE in the current buffer.
 Requires support for images in your Emacs and the external programs
 `uncompface', and `icontopbm'.  On a GNU/Linux system these
 might be in packages with names like `compface' or `faces-xface' and
@@ -253,10 +253,6 @@ for XEmacs."
            (make-ring gnus-article-xface-ring-size)))
     (save-excursion
       (let* ((cur (current-buffer))
-            (data (if buffer
-                      (with-current-buffer buffer
-                        (buffer-substring beg end))
-                    (buffer-substring beg end)))
             (image (cdr-safe (assoc data (ring-elements
                                           gnus-article-xface-ring-internal))))
             default-enable-multibyte-characters)
@@ -299,8 +295,31 @@ for XEmacs."
          (re-search-forward "^From:" nil 'move)
          (while (get-text-property (point) 'display)
            (goto-char (next-single-property-change (point) 'display)))
+         (gnus-add-wash-type 'xface)
+         (gnus-add-image 'xface image)
          (insert-image image))))))
 
+;;; Image functions.
+
+(defun gnus-image-type-available-p (type)
+  (and (fboundp 'image-type-available-p)
+       (image-type-available-p type)))
+
+(defun gnus-create-image (file &optional type data-p &rest props)
+  (let ((face (plist-get props :face)))
+    (when face
+      (setq props (plist-put props :foreground (face-foreground face)))
+      (setq props (plist-put props :background (face-background face))))
+    (apply 'create-image file type data-p props)))
+
+(defun gnus-put-image (glyph &optional string)
+  (insert-image glyph string))
+
+(defun gnus-remove-image (image)
+  (dolist (position (gnus-text-with-property 'display))
+    (when (equal (get-text-property position 'display) image)
+      (put-text-property position (1+ position) 'display nil))))
+
 (defun-maybe assoc-ignore-case (key alist)
   "Like `assoc', but assumes KEY is a string and ignores case when comparing."
   (setq key (downcase key))
diff --git a/lisp/gnus-fun.el b/lisp/gnus-fun.el
new file mode 100644 (file)
index 0000000..34b6f66
--- /dev/null
@@ -0,0 +1,195 @@
+;;; gnus-fun.el --- various frivoluos extension functions to Gnus
+;; Copyright (C) 2002 Free Software Foundation, Inc.
+
+;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Keywords: news
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;;; Code:
+
+(eval-and-compile
+  (autoload 'uncompface "compface"))
+
+(defcustom gnus-x-face-directory (expand-file-name "x-faces" gnus-directory)
+  "*Directory where X-Face PBM files are stored."
+  :group 'gnus-fun
+  :type 'directory)
+
+(defcustom gnus-convert-pbm-to-x-face-command "pbmtoxbm %s | compface"
+  "Command for converting a PBM to an X-Face."
+  :group 'gnus-fun
+  :type 'string)
+
+(defcustom gnus-convert-image-to-x-face-command "giftopnm %s | ppmnorm 2>/dev/null | pnmscale -width 48 -height 48 | ppmtopgm | pgmtopbm | pbmtoxbm | compface"
+  "Command for converting a GIF to an X-Face."
+  :group 'gnus-fun
+  :type 'string)
+
+;;;###autoload
+(defun gnus-random-x-face ()
+  "Insert a random X-Face header from `gnus-x-face-directory'."
+  (interactive)
+  (when (file-exists-p gnus-x-face-directory)
+    (let* ((files (directory-files gnus-x-face-directory t "\\.pbm$"))
+          (file (nth (random (length files)) files)))
+      (when file
+       (shell-command-to-string
+        (format gnus-convert-pbm-to-x-face-command
+                (shell-quote-argument file)))))))
+
+;;;###autoload
+(defun gnus-x-face-from-file (file)
+  "Insert an X-Face header based on an image file."
+  (interactive "fImage file name:" )
+  (when (file-exists-p file)
+    (shell-command-to-string
+     (format gnus-convert-image-to-x-face-command
+            (shell-quote-argument file)))))
+
+(defun gnus-convert-image-to-gray-x-face (file depth)
+  (let* ((mapfile (make-temp-name (expand-file-name "gnus." mm-tmp-directory)))
+        (levels (expt 2 depth))
+        (step (/ 255 (1- levels)))
+        color-alist bits bits-list mask pixel x-faces)
+    (with-temp-file mapfile
+      (insert "P3\n")
+      (insert (format "%d 1\n" levels))
+      (insert "255\n")
+      (dotimes (i levels)
+       (insert (format "%d %d %d\n"
+                       (* step i) (* step i) (* step i)))
+       (push (cons (* step i) i) color-alist)))
+    (when (file-exists-p file)
+      (with-temp-buffer
+       (insert (shell-command-to-string
+                (format "giftopnm %s | ppmnorm 2>/dev/null | pnmscale -width 48 -height 48 | ppmquant -fs -map %s 2>/dev/null | ppmtopgm | pnmnoraw"
+                        (shell-quote-argument file)
+                        mapfile)))
+       (goto-char (point-min))
+       (forward-line 3)
+       (while (setq pixel (ignore-errors (read (current-buffer))))
+         (push (cdr (assq pixel color-alist)) bits-list))
+       (setq bits-list (nreverse bits-list))
+       (dotimes (bit-number depth)
+         (setq mask (expt 2 bit-number))
+         (with-temp-buffer
+           (insert "P1\n48 48\n")
+           (dolist (bits bits-list)
+             (insert (if (zerop (logand bits mask)) "0 " "1 ")))
+           (shell-command-on-region
+            (point-min) (point-max)
+            "pbmtoxbm | compface"
+            (current-buffer) t)
+           (push (buffer-string) x-faces))))
+      (dotimes (i (length x-faces))
+       (insert (if (zerop i) "X-Face:" (format "X-Face-%s:" i))
+               (nth i x-faces))))
+    (delete-file mapfile)))
+
+;;;###autoload
+(defun gnus-convert-gray-x-face-to-xpm (faces)
+  (let* ((depth (length faces))
+        (scale (/ 255 (1- (expt 2 depth))))
+        (ok-p t)
+        bit-list bit-lists pixels pixel)
+    (dolist (face faces)
+      (setq bit-list nil)
+      (with-temp-buffer
+       (insert (uncompface face))
+       (shell-command-on-region
+        (point-min) (point-max)
+        "pnmnoraw 2>/dev/null"
+        (current-buffer) t)
+       (goto-char (point-min))
+       (forward-line 2)
+       (while (not (eobp))
+         (cond
+          ((eq (following-char) ?0)
+           (push 0 bit-list))
+          ((eq (following-char) ?1)
+           (push 1 bit-list)))
+         (forward-char 1)))
+      (unless (= (length bit-list) (* 48 48))
+       (setq ok-p nil))
+      (push bit-list bit-lists))
+    (when ok-p
+      (dotimes (i (* 48 48))
+       (setq pixel 0)
+       (dotimes (plane depth)
+         (setq pixel (+ (* pixel 2) (nth i (nth plane bit-lists)))))
+       (push pixel pixels))
+      (with-temp-buffer
+       (insert "P2\n48 48\n255\n")
+       (dolist (pixel pixels)
+         (insert (number-to-string (* scale pixel)) " "))
+       (shell-command-on-region
+        (point-min) (point-max)
+        "ppmtoxpm 2>/dev/null"
+        (current-buffer) t)
+       (buffer-string)))))
+
+;;;###autoload
+(defun gnus-convert-gray-x-face-region (beg end)
+  "Convert the X-Faces in region to a PPM file."
+  (interactive "r")
+  (let ((input (buffer-substring beg end))
+       faces)
+    (with-temp-buffer
+      (insert input)
+      (goto-char (point-min))
+      (while (not (eobp))
+       (save-restriction
+         (mail-header-narrow-to-field)
+         (push (mail-header-field-value) faces)
+         (goto-char (point-max)))))
+    (gnus-convert-gray-x-face-to-xpm faces)))
+
+(defface gnus-x-face '((t (:foreground "black" :background "white")))
+  "Face to show X-Face.
+The colors from this face are used as the foreground and background
+colors of the displayed X-Faces."
+  :group 'gnus-article-headers)
+
+(defun gnus-display-x-face-in-from (data)
+  "Display the X-Face DATA in the From header."
+  (let ((default-enable-multibyte-characters nil)
+       pbm)
+    (when (or (gnus-image-type-available-p 'xface)
+             (and (gnus-image-type-available-p 'pbm)
+                  (setq pbm (uncompface data))))
+      (save-excursion
+       (save-restriction
+         (article-narrow-to-head)
+         (gnus-article-goto-header "from")
+         (gnus-add-image
+          'xface
+          (gnus-put-image
+           (if (gnus-image-type-available-p 'xface)
+               (gnus-create-image
+                (concat "X-Face: " data)
+                'xface t :ascent 'center :face 'gnus-x-face)
+             (gnus-create-image
+              pbm 'pbm t :ascent 'center :face 'gnus-x-face))))
+         (gnus-add-wash-type 'xface))))))
+
+(provide 'gnus-fun)
+
+;;; gnus-fun.el ends here
index e85bc8b..afb29cf 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-group.el --- group mode commands for Gnus
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
 ;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -141,7 +141,7 @@ list."
                         (function-item gnus-group-sort-by-rank)
                         (function :tag "other" nil))))
 
-(defcustom gnus-group-line-format "%M\%S\%p\%P\%5y: %(%g%)%l\n"
+(defcustom gnus-group-line-format "%M\%S\%p\%P\%5y: %(%g%)%l %O\n"
   "*Format of group lines.
 It works along the same lines as a normal formatting string,
 with some simple extensions.
@@ -886,9 +886,9 @@ simple manner.")
        ,@(if (featurep 'xemacs) '(t)
            '(:help "Get newly arrived articles"))
        ]
-       ["Send delayed articles" gnus-delay-send-drafts
+       ["Send queued messages" gnus-delay-send-queue
        ,@(if (featurep 'xemacs) '(t)
-           '(:help "Send all articles that are scheduled to be sent now"))
+           '(:help "Send all messages that are scheduled to be sent now"))
        ]
        ["Activate all groups" gnus-activate-all-groups t]
        ["Restart Gnus" gnus-group-restart t]
index d3fd3e0..2adb5c1 100644 (file)
@@ -184,9 +184,13 @@ If it is down, start it up (again)."
          nil)
       ;; Open the server.
       (let ((result
-            (funcall (gnus-get-function gnus-command-method 'open-server)
-                     (nth 1 gnus-command-method)
-                     (nthcdr 2 gnus-command-method))))
+            (condition-case ()
+                (funcall (gnus-get-function gnus-command-method 'open-server)
+                         (nth 1 gnus-command-method)
+                         (nthcdr 2 gnus-command-method))
+              (quit
+               (message "Quit trying to open server")
+               nil))))
        ;; If this hasn't been opened before, we add it to the list.
        (unless elem
          (setq elem (list gnus-command-method nil)
index ee15a12..1ddd05b 100644 (file)
@@ -734,9 +734,8 @@ this type is returned."
        ((or (null request) (equal request ""))
        (mailcap-unescape-mime-test (cdr (assq 'viewer viewer)) info))
        ((stringp request)
-       (if (or (eq request 'test) (eq request 'viewer))
-           (mailcap-unescape-mime-test
-            (cdr-safe (assoc request viewer)) info)))
+       (mailcap-unescape-mime-test
+        (cdr-safe (assoc request viewer)) info))
        ((eq request 'all)
        passed)
        (t
index fd97d06..a30b47d 100644 (file)
@@ -787,7 +787,7 @@ Please check your .emacs or .gnus.el to work nnspool fine.")
        (message "%s" (gnus-offline-gettext 'empting-spool-4)))
     ;; Send queued message by gnus-agent
     (message "%s" (gnus-offline-gettext 'empting-spool-5))
-    (gnus-group-send-drafts)
+    (gnus-group-send-queue)
     (message "%s" (gnus-offline-gettext 'empting-spool-6)))
   ;;
   (run-hooks 'gnus-offline-after-empting-spool-hook))
index fd62658..a483e58 100644 (file)
@@ -1,6 +1,6 @@
 ;;; gnus-picon.el --- displaying pretty icons in Gnus
 
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
 ;;      Free Software Foundation, Inc.
 
 ;; Author: Wes Hardaker <hardaker@ece.ucdavis.edu>
 
 ;;; Commentary:
 
+;; There are three picon types relevant to Gnus:
+;;
+;; Persons: person@subdomain.dom
+;;          users/dom/subdomain/person/face.gif
+;;          usenix/dom/subdomain/person/face.gif
+;;          misc/MISC/person/face.gif
+;; Domains: subdomain.dom
+;;          domain/dom/subdomain/unknown/face.gif
+;; Groups:  comp.lang.lisp
+;;          news/comp/lang/lisp/unknown/face.gif
+
 ;;; Code:
 
 (eval-when-compile (require 'cl))
 
 (require 'gnus)
-;; (require 'xpm)
-(require 'annotations)
 (require 'custom)
 (require 'gnus-art)
-(require 'gnus-win)
+(require 'mail-parse)
 
 ;;; User variables:
 
-(defgroup picons nil
-  "Show pictures of people, domains, and newsgroups (XEmacs).
-For this to work, you must switch on the `gnus-treat-display-picons'
-variable."
+(defgroup picon nil
+  "Show pictures of people, domains, and newsgroups."
   :group 'gnus-visual)
 
-(defcustom gnus-picons-display-where 'picons
-  "Where to display the group and article icons.
-Valid values are `article' and `picons'."
-  :type '(choice symbol string)
-  :group 'picons)
-
-(defcustom gnus-picons-has-modeline-p t
-  "*Whether the picons window should have a modeline.
-This is only useful if `gnus-picons-display-where' is `picons'."
-  :type 'boolean
-  :group 'picons)
-
-(defcustom gnus-picons-database "/usr/local/faces"
+(defcustom gnus-picon-databases '("/usr/lib/picon" "/usr/local/faces")
   "*Defines the location of the faces database.
 For information on obtaining this database of pretty pictures, please
 see http://www.cs.indiana.edu/picons/ftp/index.html"
   :type 'directory
-  :group 'picons)
+  :group 'picon)
 
-(defcustom gnus-picons-news-directories '("news")
+(defcustom gnus-picon-news-directories '("news")
   "*List of directories to search for newsgroups faces."
   :type '(repeat string)
-  :group 'picons)
-(define-obsolete-variable-alias 'gnus-picons-news-directory
-  'gnus-picons-news-directories)
+  :group 'picon)
 
-(defcustom gnus-picons-user-directories '("local" "users" "usenix" "misc")
+(defcustom gnus-picon-user-directories '("users" "usenix" "local" "misc")
   "*List of directories to search for user faces."
   :type '(repeat string)
-  :group 'picons)
+  :group 'picon)
 
-(defcustom gnus-picons-domain-directories '("domains")
+(defcustom gnus-picon-domain-directories '("domains")
   "*List of directories to search for domain faces.
 Some people may want to add \"unknown\" to this list."
   :type '(repeat string)
-  :group 'picons)
-
-(defcustom gnus-picons-refresh-before-display nil
-  "*If non-nil, display the article buffer before computing the picons."
-  :type 'boolean
-  :group 'picons)
-
-(defcustom gnus-picons-group-excluded-groups nil
-  "*If this regexp matches the group name, group picons will be disabled."
-  :type 'regexp
-  :group 'picons)
-
-(defcustom gnus-picons-display-as-address t
-  "*If t display textual email addresses along with pictures."
-  :type 'boolean
-  :group 'picons)
-
-(defcustom gnus-picons-file-suffixes
-  (when (featurep 'x)
-    (let ((types (list "xbm")))
-      (when (featurep 'gif)
+  :group 'picon)
+
+(defcustom gnus-picon-file-types
+  (let ((types (list "xbm")))
+    (if (gnus-image-type-available-p 'gif)
        (setq types (cons "gif" types)))
-      (when (featurep 'xpm)
+    (if (gnus-image-type-available-p 'xpm)
        (setq types (cons "xpm" types)))
-      types))
+    types)
   "*List of suffixes on picon file names to try."
   :type '(repeat string)
-  :group 'picons)
-
-(defcustom gnus-picons-display-article-move-p nil
-  "*Whether to move point to first empty line when displaying picons.
-This has only an effect if `gnus-picons-display-where' has value `article'."
-  :type 'boolean
-  :group 'picons)
-
-(defcustom gnus-picons-clear-cache-on-shutdown t
-  "*Whether to clear the picons cache when exiting gnus.
-Gnus caches every picons it finds while it is running.  This saves
-some time in the search process but eats some memory.  If this
-variable is set to nil, Gnus will never clear the cache itself; you
-will have to manually call `gnus-picons-clear-cache' to clear it.
-Otherwise the cache will be cleared every time you exit Gnus."
-  :type 'boolean
-  :group 'picons)
-
-(defcustom gnus-picons-piconsearch-url nil
-  "*The url to query for picons.  Setting this to nil will disable it.
-The only publicly available address currently known is
-http://www.cs.indiana.edu:800/piconsearch.  If you know of any other,
-please tell me so that we can list it."
-  :type '(choice (const :tag "Disable" :value nil)
-                (const :tag "www.cs.indiana.edu"
-                       :value "http://www.cs.indiana.edu:800/piconsearch")
-                (string))
-  :group 'picons)
-
-(defface gnus-picons-xbm-face '((t (:foreground "black" :background "white")))
-  "Face to show xbm picons in."
-  :group 'picons)
-
-(defface gnus-picons-face '((t (:foreground "black" :background "white")))
-  "Face to show picons in."
-  :group 'picons)
-
-(defcustom gnus-picons-setup-hook nil
-  "Hook run in Picons buffers."
-  :group 'picons
-  :type 'hook)
+  :group 'picon)
 
-;;; Internal variables:
+(defface gnus-picon-xbm-face '((t (:foreground "black" :background "white")))
+  "Face to show xbm picon in."
+  :group 'picon)
 
-(defvar gnus-picons-setup-p nil)
-(defvar gnus-picons-processes-alist nil
-  "Picons processes currently running and their environment.")
-(defvar gnus-picons-glyph-alist nil
-  "Picons glyphs cache.
-List of pairs (KEY . GLYPH) where KEY is either a filename or an URL.")
-(defvar gnus-picons-url-alist nil
-  "Picons file names cache.
-List of pairs (KEY . NAME) where KEY is (USER HOST DBS) and NAME is an URL.")
+(defface gnus-picon-face '((t (:foreground "black" :background "white")))
+  "Face to show picon in."
+  :group 'picon)
 
-(defvar gnus-picons-jobs-alist nil
-  "List of jobs that still need be done.
-This is a list of (SYM-ANN TAG ARGS...) where SYM-ANN three annotations list,
-TAG is one of `picon' or `search' indicating that the job should query a
-picon or do a search for picons file names, and ARGS is some additionnal
-arguments necessary for the job.")
+;;; Internal variables:
 
-(defvar gnus-picons-job-already-running nil
-  "Lock to ensure only one stream of http requests is running.")
+(defvar gnus-picon-setup-p nil)
+(defvar gnus-picon-glyph-alist nil
+  "Picon glyphs cache.
+List of pairs (KEY . GLYPH) where KEY is either a filename or an URL.")
 
 ;;; Functions:
 
-(defun gnus-picons-remove-all ()
-  "Removes all picons from the Gnus display(s)."
+(defsubst gnus-picon-split-address (address)
+  (setq address (split-string address "@"))
+  (if (stringp (cadr address))
+      (cons (car address) (split-string (cadr address) "\\."))
+    (if (stringp (car address))
+       (split-string (car address) "\\."))))
+
+(defun gnus-picon-find-face (address directories &optional exact)
+  (let* ((databases gnus-picon-databases)
+        (address (gnus-picon-split-address address))
+        (user (pop address))
+        database directory found instance base)
+    (while (and (not found)
+               (setq database (pop databases)))
+      (while (and (not found)
+                 (setq directory (pop directories)))
+       (setq base (expand-file-name directory database))
+       ;; Kludge to search misc/MISC for users.
+       (when (string= directory "misc")
+         (setq address '("MISC")))
+       (while (and (not found)
+                   address)
+         (setq found (gnus-picon-find-image
+                      (concat base "/" (mapconcat 'identity
+                                                  (reverse address)
+                                                  "/")
+                              "/" user "/")))
+         (if exact
+             (setq address nil)
+           (pop address)))))
+    found))
+
+(defun gnus-picon-find-image (directory)
+  (let ((types gnus-picon-file-types)
+       found type file)
+    (while (and (not found)
+               (setq type (pop types)))
+      (setq found (file-exists-p (setq file (concat directory "face." type)))))
+    (if found
+       file
+      nil)))
+
+(defun gnus-picon-insert-glyph (glyph category)
+  "Insert GLYPH into the buffer.
+GLYPH can be either a glyph or a string."
+  (if (stringp glyph)
+      (insert glyph)
+    (gnus-add-wash-type category)
+    (gnus-add-image category (car glyph))
+    (gnus-put-image (car glyph) (cdr glyph))))
+
+(defun gnus-picon-create-glyph (file)
+  (or (cdr (assoc file gnus-picon-glyph-alist))
+      (cdar (push (cons file (gnus-create-image file))
+                 gnus-picon-glyph-alist))))
+
+;;; Functions that does picon transformations:
+
+(defun gnus-picon-transform-address (header category)
+  (gnus-with-article-headers
+    (let ((addresses
+          (mail-header-parse-addresses (mail-fetch-field header)))
+         first spec file)
+      (dolist (address addresses)
+       (setq address (car address)
+             first t)
+       (when (and (stringp address)
+                  (setq spec (gnus-picon-split-address address)))
+         (when (setq file (gnus-picon-find-face
+                           address gnus-picon-user-directories))
+           (setcar spec (cons (gnus-picon-create-glyph file)
+                              (car spec))))
+         (dotimes (i (1- (length spec)))
+           (when (setq file (gnus-picon-find-face
+                             (concat "unknown@"
+                                     (mapconcat
+                                      'identity (nthcdr (1+ i) spec) "."))
+                             gnus-picon-domain-directories t))
+             (setcar (nthcdr (1+ i) spec)
+                     (cons (gnus-picon-create-glyph file)
+                           (nth (1+ i) spec)))))
+         
+         (gnus-article-goto-header header)
+         (mail-header-narrow-to-field)
+         (when (search-forward address nil t)
+           (delete-region (match-beginning 0) (match-end 0))
+           (while spec
+             (gnus-picon-insert-glyph (pop spec) category)
+             (when spec
+               (if (not first)
+                   (insert ".")
+                 (insert "@")
+                 (setq first nil))))))))))
+
+(defun gnus-picon-transform-newsgroups (header)
   (interactive)
-  (map-extents (function (lambda (ext unused) (delete-annotation ext) nil))
-              nil nil nil nil nil 'gnus-picon)
-  (setq gnus-picons-jobs-alist '())
-  ;; notify running job that it may have been preempted
-  (if (and (listp gnus-picons-job-already-running)
-          gnus-picons-job-already-running)
-      (setq gnus-picons-job-already-running t)))
-
-(defun gnus-get-buffer-name (variable)
-  "Returns the buffer name associated with the contents of a variable."
-  (let ((buf (gnus-get-buffer-create
-             (gnus-window-to-buffer-helper
-              (cdr (assq variable gnus-window-to-buffer))))))
-    (and buf
-        (buffer-name buf))))
-
-(defun gnus-picons-buffer-name ()
-  (cond ((or (stringp gnus-picons-display-where)
-            (bufferp gnus-picons-display-where))
-        gnus-picons-display-where)
-       ((eq gnus-picons-display-where 'picons)
-        (if gnus-single-article-buffer
-            "*Picons*"
-          (concat "*Picons " gnus-newsgroup-name "*")))
-       (t
-        (gnus-get-buffer-name gnus-picons-display-where))))
-
-(defun gnus-picons-kill-buffer ()
-  (let ((buf (get-buffer (gnus-picons-buffer-name))))
-    (when (and (buffer-live-p buf)
-              (string-match "Picons" (buffer-name buf)))
-      (kill-buffer buf))))
-
-(defun gnus-picons-setup-buffer ()
-  (let ((name (gnus-picons-buffer-name)))
-    (save-excursion
-      (if (and (get-buffer name)
-              (with-current-buffer name
-                gnus-picons-setup-p))
-         (set-buffer name)
-       (set-buffer (gnus-get-buffer-create name))
-       (buffer-disable-undo)
-       (setq buffer-read-only t)
-       (run-hooks 'gnus-picons-setup-hook)
-       (set (make-local-variable 'gnus-picons-setup-p) t)
-       (add-hook 'gnus-summary-prepare-exit-hook 'gnus-picons-kill-buffer))
-      (current-buffer))))
-
-(defun gnus-picons-set-buffer ()
-  (set-buffer (gnus-picons-setup-buffer))
-  (goto-char (point-min))
-  (if (and (eq gnus-picons-display-where 'article)
-          gnus-picons-display-article-move-p)
-      (if (search-forward "\n\n" nil t)
-         (forward-line -1)
-       (goto-char (point-max)))
-    (setq buffer-read-only t)
-    (unless gnus-picons-has-modeline-p
-      (set-specifier has-modeline-p
-                    (list (list (current-buffer)
-                                (cons nil gnus-picons-has-modeline-p)))))))
-
-(defun gnus-picons-prepare-for-annotations ()
-  "Prepare picons buffer for putting annotations."
-  ;; let drawing catch up
-  (when gnus-picons-refresh-before-display
-    (sit-for 0))
-  (gnus-picons-set-buffer)
-  (gnus-picons-remove-all))
-
-(defun gnus-picons-make-annotation (&rest args)
-  (let ((annot (apply 'make-annotation args)))
-    (set-extent-property annot 'gnus-picon t)
-    (set-extent-property annot 'duplicable t)
-    annot))
-
-(defun gnus-article-display-picons ()
-  "Display faces for an author and her domain in gnus-picons-display-where."
+  (gnus-with-article-headers
+    (let ((groups
+          (sort
+           (message-tokenize-header (mail-fetch-field header))
+           (lambda (g1 g2) (> (length g1) (length g2)))))
+         spec file)
+      (dolist (group groups)
+       (setq spec (nreverse (split-string group "[.]")))
+       (dotimes (i (length spec))
+         (when (setq file (gnus-picon-find-face
+                           (concat "unknown@"
+                                   (mapconcat
+                                    'identity (nthcdr i spec) "."))
+                           gnus-picon-news-directories t))
+           (setcar (nthcdr i spec)
+                   (cons (gnus-picon-create-glyph file)
+                         (nth i spec)))))
+       
+       (gnus-article-goto-header header)
+       (mail-header-narrow-to-field)
+       (when (search-forward group nil t)
+         (delete-region (match-beginning 0) (match-end 0))
+         (setq spec (nreverse spec))
+         (while spec
+           (gnus-picon-insert-glyph (pop spec) 'newsgroups-picon)
+           (when spec
+             (insert "."))))))))
+
+;;; Commands:
+
+;;;###autoload
+(defun gnus-treat-from-picon ()
+  "Display picons in the From header.
+If picons are already displayed, remove them."
   (interactive)
-  (let (from at-idx)
-    (when (and (featurep 'xpm)
-              (or (not (fboundp 'device-type)) (equal (device-type) 'x))
-              (setq from (mail-fetch-field "from"))
-              (setq from (downcase (or (cadr
-                                        (funcall gnus-extract-address-components
-                                                 from))
-                                       "")))
-              (or (setq at-idx (string-match "@" from))
-                  (setq at-idx (length from))))
-      (save-excursion
-       (let ((username (downcase (substring from 0 at-idx)))
-             (addrs (if (eq at-idx (length from))
-                        (if gnus-local-domain
-                            (message-tokenize-header gnus-local-domain "."))
-                      (message-tokenize-header (substring from (1+ at-idx))
-                                               "."))))
-         (gnus-picons-prepare-for-annotations)
-         (gnus-group-display-picons)
-         (unless gnus-picons-display-article-move-p
-           (let ((buffer-read-only nil)
-                 (case-fold-search t))
-             (when (re-search-forward "^From *: *" nil t)
-               (when (search-forward from (gnus-point-at-eol) t)
-                 (gnus-put-text-property
-                  (match-beginning 0) (match-end 0)
-                  'invisible t)))))
-         (if (null gnus-picons-piconsearch-url)
-             (progn
-               (gnus-picons-display-pairs (gnus-picons-lookup-pairs
-                                           addrs
-                                           gnus-picons-domain-directories)
-                                          gnus-picons-display-as-address
-                                          "." t)
-               (if (and gnus-picons-display-as-address addrs)
-                   (gnus-picons-make-annotation
-                    [string :data "@"] nil 'text nil nil nil t))
-               (gnus-picons-display-picon-or-name
-                (gnus-picons-lookup-user username addrs)
-                username t))
-           (push (list 'gnus-article-annotations 'search username addrs
-                       gnus-picons-domain-directories t (point-marker))
-                 gnus-picons-jobs-alist)
-           (gnus-picons-next-job)))))))
-
-(defun gnus-group-display-picons ()
-  "Display icons for the group in the `gnus-picons-display-where' buffer."
+  (gnus-with-article-buffer
+    (if (memq 'from-picon gnus-article-wash-types)
+       (gnus-delete-images 'from-picon)
+      (gnus-picon-transform-address "from" 'from-picon))))
+
+;;;###autoload
+(defun gnus-treat-mail-picon ()
+  "Display picons in the Cc and To headers.
+If picons are already displayed, remove them."
   (interactive)
-  (when (and (featurep 'xpm)
-            (or (not (fboundp 'device-type)) (equal (device-type) 'x))
-            (or (null gnus-picons-group-excluded-groups)
-                (not (string-match gnus-picons-group-excluded-groups
-                                   gnus-newsgroup-name))))
-    (let* ((newsgroups (mail-fetch-field "newsgroups"))
-          (groups
-           (if (or gnus-picons-display-article-move-p
-                   (not newsgroups))
-               (list (gnus-group-real-name gnus-newsgroup-name))
-             (split-string newsgroups ",")))
-          group)
-      (save-excursion
-       (gnus-picons-prepare-for-annotations)
-       (while (setq group (pop groups))
-         (unless gnus-picons-display-article-move-p
-           (let ((buffer-read-only nil)
-                 (case-fold-search t))
-             (goto-char (point-min))
-             (if (and (re-search-forward "^Newsgroups *: *" nil t)
-                      (search-forward group (gnus-point-at-eol) t))
-                 (gnus-put-text-property
-                  (match-beginning 0) (match-end 0)
-                  'invisible t)
-               (let ((article-goto-body-goes-to-point-min-p nil))
-                 (article-goto-body))
-               (unless (bobp)
-                 (backward-char 1)))))
-         (if (null gnus-picons-piconsearch-url)
-             (gnus-picons-display-pairs
-              (gnus-picons-lookup-pairs
-               (reverse (split-string group "\\."))
-               gnus-picons-news-directories)
-              t ".")
-           (push (list 'gnus-group-annotations 'search nil
-                       (split-string group "\\.")
-                       (if (listp gnus-picons-news-directories)
-                           gnus-picons-news-directories
-                         (list gnus-picons-news-directories))
-                       nil (point-marker))
-                 gnus-picons-jobs-alist)
-           (gnus-picons-next-job))
-
-         (add-hook 'gnus-summary-exit-hook 'gnus-picons-remove-all))))))
-
-(defun gnus-picons-lookup-internal (addrs dir)
-  (setq dir (expand-file-name dir gnus-picons-database))
-  (gnus-picons-try-face (dolist (part (reverse addrs) dir)
-                         (setq dir (expand-file-name part dir)))))
-
-(defun gnus-picons-lookup (addrs dirs)
-  "Lookup the picon for ADDRS in databases DIRS.
-Returns the picon filename or nil if none found."
-  (let (result)
-    (while (and dirs (null result))
-      (setq result (gnus-picons-lookup-internal addrs (pop dirs))))
-    result))
-
-(defun gnus-picons-lookup-user-internal (user domains)
-  (let ((dirs gnus-picons-user-directories)
-       domains-tmp dir picon)
-    (while (and dirs (null picon))
-      (setq domains-tmp domains
-           dir (pop dirs))
-      (while (and domains-tmp
-                 (null (setq picon (gnus-picons-lookup-internal
-                                    (cons user domains-tmp) dir))))
-       (pop domains-tmp))
-      ;; Also make a try in MISC subdir
-      (unless picon
-       (setq picon (gnus-picons-lookup-internal (list user "MISC") dir))))
-    picon))
-
-(defun gnus-picons-lookup-user (user domains)
-  "Lookup the picon for USER at DOMAINS.
-USER is a string containing a name.
-DOMAINS is a list of strings from the fully qualified domain name."
-  (or (gnus-picons-lookup-user-internal user domains)
-      (gnus-picons-lookup-user-internal "unknown" domains)))
-
-(defun gnus-picons-lookup-pairs (domains directories)
-  "Lookup picons for DOMAINS and all its parents in DIRECTORIES.
-Returns a list of PAIRS whose CAR is the picon filename or nil if
-none, and whose CDR is the corresponding element of DOMAINS."
-  (let (picons)
-    (setq directories (if (listp directories)
-                         directories
-                       (list directories)))
-    (while domains
-      (push (list (gnus-picons-lookup (cons "unknown" domains) directories)
-                 (pop domains))
-           picons))
-    picons))
-
-(defun gnus-picons-display-picon-or-name (picon name &optional right-p)
-  (cond (picon (gnus-picons-display-glyph picon name right-p))
-       (gnus-picons-display-as-address (list (gnus-picons-make-annotation
-                                              (vector 'string :data name)
-                                              nil 'text
-                                              nil nil nil right-p)))))
-
-(defun gnus-picons-display-pairs (pairs &optional bar-p dot-p right-p)
-  "Display picons in list PAIRS."
-  (let ((domain-p (and gnus-picons-display-as-address dot-p))
-       pair picons)
-    (when (and bar-p domain-p right-p
-              gnus-picons-display-article-move-p)
-      (setq picons (gnus-picons-display-glyph
-                   (let ((gnus-picons-file-suffixes '("xbm")))
-                     (gnus-picons-try-face
-                      gnus-xmas-glyph-directory "bar."))
-                   nil right-p)))
-    (while (setq pair (pop pairs))
-      (setq picons (nconc picons
-                         (gnus-picons-display-picon-or-name
-                          (car pair) (cadr pair) right-p)
-                         (if (and domain-p pairs)
-                             (list (gnus-picons-make-annotation
-                                    (vector 'string :data dot-p)
-                                    nil 'text nil nil nil right-p))))))
-    picons))
-
-(defun gnus-picons-try-face (dir &optional filebase)
-  (let* ((dir (file-name-as-directory dir))
-        (filebase (or filebase "face."))
-        (key (concat dir filebase))
-        (glyph (cdr (assoc key gnus-picons-glyph-alist)))
-        (suffixes gnus-picons-file-suffixes)
-        f suf)
-    (while (setq suf (pop suffixes))
-      (when (file-exists-p (setq f (expand-file-name
-                                   (concat filebase suf)
-                                   dir)))
-       (setq suffixes nil
-             glyph (make-glyph f))
-       (if (equal suf "xbm")
-           (set-glyph-face glyph 'gnus-picons-xbm-face)
-         (set-glyph-face glyph 'gnus-picons-face))
-       (push (cons key glyph) gnus-picons-glyph-alist)))
-    glyph))
-
-(defun gnus-picons-display-glyph (glyph &optional part rightp)
-  (set-glyph-baseline glyph 70)
-  (let ((new (gnus-picons-make-annotation
-             glyph (point) 'text nil nil nil rightp)))
-    (when (and part gnus-picons-display-as-address)
-      (set-annotation-data
-       new (cons new (make-glyph (vector 'string :data part))))
-      (set-annotation-action new 'gnus-picons-action-toggle))
-    (nconc
-     (list new)
-     (if (and (eq major-mode 'gnus-article-mode)
-             (not gnus-picons-display-as-address)
-             (not part))
-        (list (gnus-picons-make-annotation [string :data " "] (point)
-                                           'text nil nil nil rightp))))))
-
-(defun gnus-picons-action-toggle (data)
-  "Toggle annotation."
-  (interactive "e")
-  (let* ((annot (car data))
-        (glyph (annotation-glyph annot)))
-    (set-annotation-glyph annot (cdr data))
-    (set-annotation-data annot (cons annot glyph))))
-
-(defun gnus-picons-clear-cache ()
-  "Clear the picons cache."
+  (gnus-with-article-buffer
+    (if (memq 'mail-picon gnus-article-wash-types)
+       (gnus-delete-images 'mail-picon)
+      (gnus-picon-transform-address "cc" 'mail-picon)
+      (gnus-picon-transform-address "to" 'mail-picon))))
+
+;;;###autoload
+(defun gnus-treat-newsgroups-picon ()
+  "Display picons in the Newsgroups and Followup-To headers.
+If picons are already displayed, remove them."
   (interactive)
-  (setq gnus-picons-glyph-alist nil
-       gnus-picons-url-alist nil))
-
-(gnus-add-shutdown 'gnus-picons-close 'gnus)
-
-(defun gnus-picons-close ()
-  "Shut down the picons."
-  (if gnus-picons-clear-cache-on-shutdown
-      (gnus-picons-clear-cache)))
-
-;;; Query a remote DB.  This requires some stuff from w3 !
-
-(eval-and-compile
-  (ignore-errors
-    (require 'url)
-    (require 'w3-forms)))
-
-(defun gnus-picons-url-retrieve (url fn arg)
-  (let ((old-asynch (default-value 'url-be-asynchronous))
-       (url-working-buffer (generate-new-buffer " *picons*"))
-       (url-package-name "Gnus")
-       (url-package-version gnus-version-number)
-       url-request-method)
-    (setq-default url-be-asynchronous t)
-    (save-excursion
-      (set-buffer url-working-buffer)
-      (setq url-be-asynchronous t
-           url-current-callback-data arg
-           url-current-callback-func fn)
-      (url-retrieve url t))
-    (setq-default url-be-asynchronous old-asynch)))
-
-(defun gnus-picons-make-glyph (type)
-  "Make a TYPE glyph using current buffer as data.  Handles xbm nicely."
-  (cond ((null type) nil)
-       ((eq type 'xbm) (let ((fname (make-temp-name "/tmp/picon")))
-                         (write-region (point-min) (point-max) fname
-                                       nil 'quiet)
-                         (prog1 (make-glyph (vector 'xbm :file fname))
-                           (delete-file fname))))
-       (t (make-glyph (vector type :data (buffer-string))))))
-
-;;; Parsing of piconsearch result page.
-
-;; Assumes:
-;; 1 - each value field has the form: "<strong>key</strong> = <kbd>value</kbd>"
-;; 2 - a "<p>" separates the keywords from the results
-;; 3 - every results begins by the path within the database at the beginning
-;;     of the line in raw text.
-;; 3b - and the href following it is the preferred image type.
-
-;; if 1 or 2 is not met, it will probably cause an error.  The other
-;; will go undetected
-
-(defun gnus-picons-parse-value (name)
-  (goto-char (point-min))
-  (if (re-search-forward (concat "<strong>"
-                                (regexp-quote name)
-                                "</strong> *= *<kbd> *\\([^ <][^<]*\\) *</kbd>")
-                        nil t)
-      (buffer-substring (match-beginning 1) (match-end 1))))
-
-(defun gnus-picons-parse-filenames ()
-  ;; returns an alist of ((USER ADDRS DB) . URL)
-  (let ((case-fold-search t)
-       (user (gnus-picons-parse-value "user"))
-       (host (gnus-picons-parse-value "host"))
-       (dbs (message-tokenize-header (gnus-picons-parse-value "db") " "))
-       start-re cur-db cur-host cur-user types res)
-    ;; now point will be somewhere in the header.  Find beginning of
-    ;; entries
-    (when (and user host dbs)
-      (setq start-re
-           (concat
-            ;; dbs
-            "^\\(" (mapconcat 'regexp-quote dbs "\\|") "\\)/"
-            ;; host
-            "\\(\\(" (mapconcat 'regexp-quote
-                                (message-tokenize-header host ".") "/\\|")
-            "/\\|MISC/\\)*\\)"
-            ;; user
-            "\\(" (regexp-quote user) "\\|unknown\\)/"
-            "face\\."))
-      (re-search-forward "<p>[ \t\n]*")
-      (while (re-search-forward start-re nil t)
-       (setq cur-db (buffer-substring (match-beginning 1) (match-end 1))
-             cur-host (buffer-substring (match-beginning 2) (match-end 2))
-             cur-user (buffer-substring (match-beginning 4) (match-end 4))
-             cur-host (nreverse (message-tokenize-header cur-host "/")))
-       ;; XXX - KLUDGE: there is a blank picon in news/MISC/unknown
-       (unless (and (string-equal cur-db "news")
-                    (string-equal cur-user "unknown")
-                    (equal cur-host '("MISC")))
-         ;; ok now we have found an entry (USER HOST DB), find the
-         ;; corresponding picon URL
-         (save-restriction
-           ;; restrict region to this entry
-           (narrow-to-region (point) (search-forward "<br>"))
-           (goto-char (point-min))
-           (setq types gnus-picons-file-suffixes)
-           (while (and types
-                       (not (re-search-forward
-                             (concat "<a[ \t\n]+href=\"\\([^\"]*\\."
-                                     (regexp-quote (car types)) "\\)\"")
-                             nil t)))
-             (pop types))
-           (push (cons (list cur-user cur-host cur-db)
-                       (buffer-substring (match-beginning 1) (match-end 1)))
-                 res))))
-      (nreverse res))))
-
-;;; picon network display functions :
-
-(defun gnus-picons-network-display-internal (sym-ann glyph part right-p marker)
-  (let ((buf (marker-buffer marker))
-       (pos (marker-position marker)))
-    (if (and buf pos)
-       (save-excursion
-         (set-buffer buf)
-         (goto-char pos)
-         (gnus-picons-display-picon-or-name glyph part right-p))))
-  (gnus-picons-next-job-internal))
-
-(defun gnus-picons-network-display-callback (url part sym-ann right-p marker)
-  (let ((glyph (gnus-picons-make-glyph (cdr (assoc url-current-mime-type
-                                                  w3-image-mappings)))))
-    (kill-buffer (current-buffer))
-    (push (cons url glyph) gnus-picons-glyph-alist)
-    ;; only do the job if it has not been preempted.
-    (if (equal gnus-picons-job-already-running
-              (list sym-ann 'picon url part right-p marker))
-       (gnus-picons-network-display-internal
-        sym-ann glyph part right-p marker)
-      (gnus-picons-next-job-internal))))
-
-(defun gnus-picons-network-display (url part sym-ann right-p marker)
-  (let ((cache (assoc url gnus-picons-glyph-alist)))
-    (if (or cache (null url))
-       (gnus-picons-network-display-internal
-        sym-ann (cdr cache) part right-p marker)
-      (gnus-picons-url-retrieve url 'gnus-picons-network-display-callback
-                               (list url part sym-ann right-p marker)))))
-
-;;; search job functions
-
-(defun gnus-picons-display-bar-p ()
-  (if (eq gnus-picons-display-where 'article)
-      gnus-picons-display-article-move-p
-    gnus-picons-display-as-address))
-
-(defun gnus-picons-network-search-internal (user addrs dbs sym-ann right-p
-                                                marker &optional fnames)
-  (let (curkey dom pfx url dbs-tmp cache new-jobs)
-    ;; First do the domain search
-    (dolist (part (if right-p
-                     (reverse addrs)
-                   addrs))
-      (setq pfx (nconc (list part) pfx)
-           dom (cond ((and dom right-p) (concat part "." dom))
-                     (dom (concat dom "." part))
-                     (t part))
-           curkey (list "unknown" dom dbs))
-      (when (null (setq cache (assoc curkey gnus-picons-url-alist)))
-       ;; This one is not yet in the cache, create a new entry
-       ;; Search for an entry
-       (setq dbs-tmp dbs
-             url nil)
-       (while (and dbs-tmp (null url))
-         (setq url (or (cdr (assoc (list "unknown" pfx (car dbs-tmp)) fnames))
-                       (and (eq dom part)
-                            ;; This is the first component.  Try the
-                            ;; catch-all MISC component
-                            (cdr (assoc (list "unknown"
-                                              '("MISC")
-                                              (car dbs-tmp))
-                                        fnames)))))
-         (pop dbs-tmp))
-       (push (setq cache (cons curkey url)) gnus-picons-url-alist))
-      ;; Put this glyph in the job list
-      (if (and (not (eq dom part)) gnus-picons-display-as-address)
-         (push (list sym-ann "." right-p marker) new-jobs))
-      (push (list sym-ann 'picon (cdr cache) part right-p marker) new-jobs))
-    ;; next, the user search
-    (when user
-      (setq curkey (list user dom gnus-picons-user-directories))
-      (if (null (setq cache (assoc curkey gnus-picons-url-alist)))
-         (let ((users (list user "unknown"))
-               dirs usr domains-tmp dir picon)
-           (while (and users (null picon))
-             (setq dirs gnus-picons-user-directories
-                   usr (pop users))
-             (while (and dirs (null picon))
-               (setq domains-tmp addrs
-                     dir (pop dirs))
-               (while (and domains-tmp
-                           (null (setq picon (assoc (list usr domains-tmp dir)
-                                                    fnames))))
-                 (pop domains-tmp))
-               (unless picon
-                 (setq picon (assoc (list usr '("MISC") dir) fnames)))))
-           (push (setq cache (cons curkey (cdr picon)))
-                 gnus-picons-url-alist)))
-      (if (and gnus-picons-display-as-address new-jobs)
-         (push (list sym-ann "@" right-p marker) new-jobs))
-      (push (list sym-ann 'picon (cdr cache) user right-p marker) new-jobs))
-    (if (and (gnus-picons-display-bar-p) (not right-p))
-       (push (list sym-ann 'bar right-p marker) new-jobs))
-    ;; only put the jobs in the queue if this job has not been preempted.
-    (if (equal gnus-picons-job-already-running
-              (list sym-ann 'search user addrs dbs right-p marker))
-       (setq gnus-picons-jobs-alist
-             (nconc (if (and (gnus-picons-display-bar-p) right-p)
-                        (list (list sym-ann 'bar right-p marker)))
-                    (nreverse new-jobs)
-                    gnus-picons-jobs-alist)))
-    (gnus-picons-next-job-internal)))
-
-(defun gnus-picons-network-search-callback (user addrs dbs sym-ann right-p
-                                                marker)
-  (gnus-picons-network-search-internal
-   user addrs dbs sym-ann right-p marker
-   (prog1
-       (gnus-picons-parse-filenames)
-     (kill-buffer (current-buffer)))))
-
-;; Initiate a query on the picon database
-(defun gnus-picons-network-search (user addrs dbs sym-ann right-p marker)
-  (let* ((host (mapconcat 'identity addrs "."))
-        (key (list (or user "unknown") host (if user
-                                                gnus-picons-user-directories
-                                              dbs)))
-        (cache (assoc key gnus-picons-url-alist)))
-    (if (null cache)
-       (gnus-picons-url-retrieve
-        (concat gnus-picons-piconsearch-url
-                "?user=" (w3-form-encode-xwfu (or user "unknown"))
-                "&host=" (w3-form-encode-xwfu host)
-                "&db=" (mapconcat 'w3-form-encode-xwfu
-                                  (if user
-                                      (append dbs
-                                              gnus-picons-user-directories)
-                                    dbs)
-                                  "+"))
-        'gnus-picons-network-search-callback
-        (list user addrs dbs sym-ann right-p marker))
-      (gnus-picons-network-search-internal
-       user addrs dbs sym-ann right-p marker))))
-
-;;; Main jobs dispatcher function
-
-(defun gnus-picons-next-job-internal ()
-  (when (setq gnus-picons-job-already-running (pop gnus-picons-jobs-alist))
-    (let* ((job gnus-picons-job-already-running)
-          (sym-ann (pop job))
-          (tag (pop job)))
-      (when tag
-       (cond
-        ((stringp tag);; (SYM-ANN "..." RIGHT-P MARKER)
-         (gnus-picons-network-display-internal
-          sym-ann nil tag (pop job) (pop job)))
-        ((eq 'bar tag);; (SYM-ANN 'bar RIGHT-P MARKER)
-         (gnus-picons-network-display-internal
-          sym-ann
-          (let ((gnus-picons-file-suffixes '("xbm")))
-            (gnus-picons-try-face
-             gnus-xmas-glyph-directory "bar."))
-          nil (pop job) (pop job)))
-        ((eq 'search tag);; (SYM-ANN 'search USER ADDRS DBS RIGHT-P MARKER)
-         (gnus-picons-network-search
-          (pop job) (pop job) (pop job) sym-ann (pop job) (pop job)))
-        ((eq 'picon tag);; (SYM-ANN 'picon URL PART RIGHT-P MARKER)
-         (gnus-picons-network-display
-          (pop job) (pop job) sym-ann (pop job) (pop job)))
-        (t
-         (setq gnus-picons-job-already-running nil)
-         (error "Unknown picon job tag %s" tag)))))))
-
-(defun gnus-picons-next-job ()
-  "Start processing the job queue if it is not in progress."
-  (unless gnus-picons-job-already-running
-    (gnus-picons-next-job-internal)))
+  (gnus-with-article-buffer
+    (if (memq 'newsgroups-picon gnus-article-wash-types)
+       (gnus-delete-images 'newsgroups-picon)
+      (gnus-picon-transform-newsgroups "newsgroups")
+      (gnus-picon-transform-newsgroups "followup-to"))))
 
 (provide 'gnus-picon)
 
index ae9a9be..15b6fb9 100644 (file)
@@ -839,6 +839,13 @@ Two predefined functions are available:
 (defun gnus-tree-close (group)
   (gnus-kill-buffer gnus-tree-buffer))
 
+(defun gnus-tree-perhaps-minimize ()
+  (when (and gnus-tree-minimize-window
+            (get-buffer gnus-tree-buffer))
+    (save-excursion
+      (set-buffer gnus-tree-buffer)
+      (gnus-tree-minimize))))
+
 (defun gnus-highlight-selected-tree (article)
   "Highlight the selected article in the tree."
   (let ((buf (current-buffer))
index e5179a6..e49c9fe 100644 (file)
@@ -65,7 +65,8 @@ The following specs are understood:
   :type 'string)
 
 (defcustom gnus-server-browse-in-group-buffer nil
-  "Whether browse server in group buffer."
+  "Whether server browsing should take place in the group buffer.
+If nil, a faster, but more primitive, buffer is used instead."
   :group 'gnus-server-visual
   :type 'string)
 
@@ -713,7 +714,7 @@ The following commands are available:
                          groups)))
            (gnus-configure-windows 'group)
            (funcall gnus-group-prepare-function
-                    gnus-level-killed 'ignore 1 'ingore))
+                    gnus-level-killed 'ignore 1 'ignore))
        (gnus-get-buffer-create gnus-browse-buffer)
        (when gnus-carpal
          (gnus-carpal-setup-buffer 'browse))
@@ -726,7 +727,9 @@ The following commands are available:
              (list
               (format
                "Gnus: %%b {%s:%s}" (car method) (cadr method))))
-       (let ((buffer-read-only nil) charset)
+       (let ((buffer-read-only nil) charset
+             (prefix (let ((gnus-select-method orig-select-method))
+                       (gnus-group-prefixed-name "" method))))
          (while groups
            (setq group (car groups))
            (setq charset (gnus-group-name-charset method (car group)))
@@ -735,11 +738,7 @@ The following commands are available:
             (prog1 (1+ (point))
               (insert
                (format "%c%7d: %s\n"
-                       (let ((level
-                              (let ((gnus-select-method orig-select-method))
-                                (gnus-group-level
-                                 (gnus-group-prefixed-name (car group)
-                                                           method)))))
+                       (let ((level (gnus-group-level (concat prefix (car group)))))
                          (cond
                           ((<= level gnus-level-subscribed) ? )
                           ((<= level gnus-level-unsubscribed) ?U)
index e0d0e12..66b3528 100644 (file)
@@ -38,8 +38,6 @@
 (require 'gnus-int)
 (require 'gnus-undo)
 (require 'gnus-util)
-;; Recursive :-(.
-;; (require 'gnus-art)
 (require 'nnoo)
 (require 'mime-view)
 
@@ -291,25 +289,30 @@ equal will be included."
   :type 'boolean)
 
 (defcustom gnus-auto-select-first t
-  "*If nil, don't select the first unread article when entering a group.
-If this variable is `best', select the highest-scored unread article
-in the group.  If t, select the first unread article.
-
-This variable can also be a function to place point on a likely
-subject line.  Useful values include `gnus-summary-first-unread-subject',
-`gnus-summary-first-unread-article' and
-`gnus-summary-best-unread-article'.
-
-If you want to prevent automatic selection of the first unread article
-in some newsgroups, set the variable to nil in
-`gnus-select-group-hook'."
+  "*If non-nil, select the article under point.
+Which article this is is controlled by the `gnus-auto-select-subject'
+variable.
+
+If you want to prevent automatic selection of articles in some
+newsgroups, set the variable to nil in `gnus-select-group-hook'."
   :group 'gnus-group-select
   :type '(choice (const :tag "none" nil)
-                (const best)
-                (sexp :menu-tag "first" t)
-                (function-item gnus-summary-first-unread-subject)
-                (function-item gnus-summary-first-unread-article)
-                (function-item gnus-summary-best-unread-article)))
+                (sexp :menu-tag "first" t)))
+
+(defcustom gnus-auto-select-subject 'unread
+  "*Says what subject to place under point when entering a group.
+
+This variable can either be the symbols `first' (place point on the
+first subject), `unread' (place point on the subject line of the first
+unread article), `best' (place point on the subject line of the
+higest-scored article), `unseen' (place point on the subject line of
+the first unseen article), or a function to be called to place point on
+some subject line.."
+  :group 'gnus-group-select
+  :type '(choice (const best)
+                (const unread)
+                (const first)
+                (const unseen)))
 
 (defcustom gnus-dont-select-after-jump-to-other-group nil
   "If non-nil, don't select the first unread article after entering the
@@ -1739,6 +1742,8 @@ increase the score of each group you read."
     "r" gnus-summary-caesar-message
     "t" gnus-article-toggle-headers
     "g" gnus-summary-toggle-smiley
+    "u" gnus-article-treat-unfold-headers
+    "n" gnus-article-treat-fold-newsgroups
     "v" gnus-summary-verbose-headers
     "m" gnus-summary-toggle-mime
     "a" gnus-article-strip-headers-in-body ;; mnemonic: wash archive
@@ -1764,6 +1769,13 @@ increase the score of each group you read."
     "c" gnus-article-highlight-citation
     "s" gnus-article-highlight-signature)
 
+  (gnus-define-keys (gnus-summary-wash-display-map "D" gnus-summary-wash-map)
+    "x" gnus-article-display-x-face
+    "s" gnus-summary-toggle-smiley
+    "f" gnus-treat-from-picon
+    "m" gnus-treat-mail-picon
+    "n" gnus-treat-newsgroups-picon)
+
   (gnus-define-keys (gnus-summary-wash-time-map "T" gnus-summary-wash-map)
     "z" gnus-article-date-ut
     "u" gnus-article-date-ut
@@ -1892,6 +1904,12 @@ increase the score of each group you read."
              ["Original" gnus-article-date-original t]
              ["Lapsed" gnus-article-date-lapsed t]
              ["User-defined" gnus-article-date-user t])
+            ("Display"
+             ["Toggle smiley" gnus-summary-toggle-smiley t]
+             ["Show X-Face" gnus-article-display-x-face t]
+             ["Show picons in From" gnus-treat-from-picon t]
+             ["Show picons in mail headers" gnus-treat-mail-picon t]
+             ["Show picons in news headers" gnus-treat-newsgroups-picon t])
             ("Washing"
              ("Remove Blanks"
               ["Leading" gnus-article-strip-leading-blank-lines t]
@@ -1910,7 +1928,6 @@ increase the score of each group you read."
              ["Fill long lines" gnus-article-fill-long-lines t]
              ["Capitalize sentences" gnus-article-capitalize-sentences t]
              ["CR" gnus-article-remove-cr t]
-             ["Show X-Face" gnus-article-display-x-face t]
              ["Rot 13" gnus-summary-caesar-message
               ,@(if (featurep 'xemacs) '(t)
                   '(:help "\"Caesar rotate\" article by 13"))]
@@ -1921,7 +1938,8 @@ increase the score of each group you read."
              ["Toggle MIME" gnus-summary-toggle-mime t]
              ["Verbose header" gnus-summary-verbose-headers t]
              ["Toggle header" gnus-summary-toggle-header t]
-             ["Toggle smiley" gnus-summary-toggle-smiley t]
+             ["Unfold headers" gnus-article-treat-unfold-headers t]
+             ["Fold newsgroups" gnus-article-treat-fold-newsgroups t]
              ["Verify X-PGP-Sig" gnus-article-verify-x-pgp-sig t]
              ["HZ" gnus-article-decode-HZ t])
             ("Output"
@@ -2094,7 +2112,7 @@ increase the score of each group you read."
        ["Set expirable mark" gnus-summary-mark-as-expirable t]
        ["Set bookmark" gnus-summary-set-bookmark t]
        ["Remove bookmark" gnus-summary-remove-bookmark t])
-       ("Mark Limit"
+       ("Limit to"
        ["Marks..." gnus-summary-limit-to-marks t]
        ["Subject..." gnus-summary-limit-to-subject t]
        ["Author..." gnus-summary-limit-to-author t]
@@ -2692,9 +2710,6 @@ marks of articles."
 
 ;; Saving hidden threads.
 
-(put 'gnus-save-hidden-threads 'lisp-indent-function 0)
-(put 'gnus-save-hidden-threads 'edebug-form-spec '(body))
-
 (defmacro gnus-save-hidden-threads (&rest forms)
   "Save hidden threads, eval FORMS, and restore the hidden threads."
   (let ((config (make-symbol "config")))
@@ -2703,6 +2718,8 @@ marks of articles."
           (save-excursion
             ,@forms)
         (gnus-restore-hidden-threads-configuration ,config)))))
+(put 'gnus-save-hidden-threads 'lisp-indent-function 0)
+(put 'gnus-save-hidden-threads 'edebug-form-spec '(body))
 
 (defun gnus-data-compute-positions ()
   "Compute the positions of all articles."
@@ -3275,6 +3292,7 @@ If SHOW-ALL is non-nil, already read articles are also listed."
             (gnus-summary-hide-all-threads))
        (when kill-buffer
          (gnus-kill-or-deaden-summary kill-buffer))
+       (gnus-summary-auto-select-subject)
        ;; Show first unread article if requested.
        (if (and (not no-article)
                 (not no-display)
@@ -3282,16 +3300,8 @@ If SHOW-ALL is non-nil, already read articles are also listed."
                 gnus-auto-select-first)
            (progn
              (gnus-configure-windows 'summary)
-             (cond
-              ((eq gnus-auto-select-first 'best)
-               (gnus-summary-best-unread-article))
-              ((eq gnus-auto-select-first t)
-               (gnus-summary-first-unread-article))
-              ((gnus-functionp gnus-auto-select-first)
-               (funcall gnus-auto-select-first))))
-         ;; Don't select any articles, just move point to the first
-         ;; article in the group.
-         (goto-char (point-min))
+             (gnus-summary-goto-article (gnus-summary-article-number)))
+         ;; Don't select any articles.
          (gnus-summary-position-point)
          (gnus-configure-windows 'summary 'force)
          (gnus-set-mode-line 'summary))
@@ -3308,6 +3318,22 @@ If SHOW-ALL is non-nil, already read articles are also listed."
        (gnus-run-hooks 'gnus-summary-prepared-hook)
        t)))))
 
+(defun gnus-summary-auto-select-subject ()
+  "Select the subject line on initial group entry."
+  (goto-char (point-min))
+  (cond
+   ((eq gnus-auto-select-subject 'best)
+    (gnus-summary-best-unread-subject))
+   ((eq gnus-auto-select-subject 'unread)
+    (gnus-summary-first-unread-subject))
+   ((eq gnus-auto-select-subject 'unseen)
+    (gnus-summary-first-unseen-subject))
+   ((eq gnus-auto-select-subject 'first)
+    ;; Do nothing.
+    )
+   ((gnus-functionp gnus-auto-select-subject)
+    (funcall gnus-auto-select-subject))))
+
 (defun gnus-summary-prepare ()
   "Generate the summary buffer."
   (interactive)
@@ -4677,14 +4703,13 @@ If SELECT-ARTICLES, only select those articles from GROUP."
            (gnus-set-sorted-intersection
             gnus-newsgroup-unreads fetched-articles))
 
-      (let ((marks (assq 'seen (gnus-info-marks info))))
-       ;; The `seen' marks are treated specially.
-       (if (setq gnus-newsgroup-seen (cdr marks))
-           (dolist (article gnus-newsgroup-articles)
-             (unless (gnus-member-of-range article gnus-newsgroup-seen)
-               (setq gnus-newsgroup-unseen
-                     (append gnus-newsgroup-unseen (list article)))))
-         (setq gnus-newsgroup-unseen gnus-newsgroup-articles)))
+      ;; The `seen' marks are treated specially.
+      (if (not gnus-newsgroup-seen)
+         (setq gnus-newsgroup-unseen gnus-newsgroup-articles)
+       (dolist (article gnus-newsgroup-articles)
+         (unless (gnus-member-of-range article gnus-newsgroup-seen)
+           (push article gnus-newsgroup-unseen)))
+       (setq gnus-newsgroup-unseen (nreverse gnus-newsgroup-unseen)))
 
       ;; Removed marked articles that do not exist.
       (gnus-update-missing-marks
@@ -4927,9 +4952,18 @@ If SELECT-ARTICLES, only select those articles from GROUP."
                    (< (car article) min)
                    (> (car article) max))
            (set var (delq article (symbol-value var))))))
+       ;; Adjust ranges (sloppily).
        ((eq mark-type 'range)
        (cond
-        ((eq mark 'seen))))))))
+        ((eq mark 'seen)
+         (setq articles (cdr marks))
+         (while (and articles
+                     (or (and (consp (car articles))
+                              (> min (cdar articles)))
+                         (and (numberp (car articles))
+                              (> min (car articles)))))
+           (pop articles))
+         (set var articles))))))))
 
 (defun gnus-update-missing-marks (missing)
   "Go through the list of MISSING articles and remove them from the mark lists."
@@ -4976,11 +5010,7 @@ If SELECT-ARTICLES, only select those articles from GROUP."
              (setq list (cdr all)))))
 
        (when (eq (cdr type) 'seen)
-         (setq list
-               (if list
-                   (gnus-range-add (gnus-uncompress-sequence list) 
-                                   gnus-newsgroup-unseen)
-                 (gnus-compress-sequence gnus-newsgroup-articles))))
+         (setq list (gnus-range-add list gnus-newsgroup-unseen)))
 
        (when (eq (gnus-article-mark-to-type (cdr type)) 'list)
          (setq list (gnus-compress-sequence (set symbol (sort list '<)) t)))
@@ -6313,7 +6343,7 @@ If prefix argument NO-ARTICLE is non-nil, no article is selected initially."
 
 ;; Walking around summary lines.
 
-(defun gnus-summary-first-subject (&optional unread undownloaded)
+(defun gnus-summary-first-subject (&optional unread undownloaded unseen)
   "Go to the first unread subject.
 If UNREAD is non-nil, go to the first unread article.
 Returns the article selected or nil if there are no unread articles."
@@ -6339,6 +6369,8 @@ Returns the article selected or nil if there are no unread articles."
                      (and (not (and undownloaded
                                     (eq gnus-undownloaded-mark
                                         (gnus-data-mark (car data)))))
+                          (not (and unseen
+                                    (memq (car data) gnus-newsgroup-unseen)))
                           (not (gnus-data-unread-p (car data)))))
            (setq data (cdr data)))
          (when data
@@ -6778,6 +6810,16 @@ Return nil if there are no unread articles."
        (gnus-summary-first-subject t))
     (gnus-summary-position-point)))
 
+(defun gnus-summary-first-unseen-subject ()
+  "Place the point on the subject line of the first unseen article.
+Return nil if there are no unseen articles."
+  (interactive)
+  (prog1
+      (when (gnus-summary-first-subject t t t)
+       (gnus-summary-show-thread)
+       (gnus-summary-first-subject t t t))
+    (gnus-summary-position-point)))
+
 (defun gnus-summary-first-article ()
   "Select the first article.
 Return nil if there are no articles."
@@ -6789,8 +6831,20 @@ Return nil if there are no articles."
        (gnus-summary-display-article (gnus-summary-article-number)))
     (gnus-summary-position-point)))
 
-(defun gnus-summary-best-unread-article ()
-  "Select the unread article with the highest score."
+(defun gnus-summary-best-unread-article (&optional arg)
+  "Select the unread article with the highest score.
+If given a prefix argument, select the next unread article that has a
+score higher than the default score."
+  (interactive "P")
+  (let ((article (if arg
+                    (gnus-summary-better-unread-subject)
+                  (gnus-summary-best-unread-subject))))
+    (if article
+       (gnus-summary-goto-article article)
+      (error "No unread articles"))))
+
+(defun gnus-summary-best-unread-subject ()
+  "Select the unread subject with the highest score."
   (interactive)
   (let ((best -1000000)
        (data gnus-newsgroup-data)
@@ -6803,11 +6857,25 @@ Return nil if there are no articles."
           (setq best score
                 article (gnus-data-number (car data))))
       (setq data (cdr data)))
-    (prog1
-       (if article
-           (gnus-summary-goto-article article)
-         (error "No unread articles"))
-      (gnus-summary-position-point))))
+    (when article
+      (gnus-summary-goto-subject article))
+    (gnus-summary-position-point)
+    article))
+
+(defun gnus-summary-better-unread-subject ()
+  "Select the first unread subject that has a score over the default score."
+  (interactive)
+  (let ((data gnus-newsgroup-data)
+       article score)
+    (while (and (setq article (gnus-data-number (car data)))
+               (or (gnus-data-read-p (car data))
+                   (not (> (gnus-summary-article-score article)
+                           gnus-summary-default-score))))
+      (setq data (cdr data)))
+    (when article
+      (gnus-summary-goto-subject article))
+    (gnus-summary-position-point)
+    article))
 
 (defun gnus-summary-last-subject ()
   "Go to the last displayed subject line in the group."
@@ -6930,7 +6998,12 @@ articles that are younger than AGE days."
        (when (> (length days) 0)
         (setq days (read days)))
        (if (numberp days)
-          (setq days-got t)
+          (progn 
+            (setq days-got t)
+            (if (< days 0)
+                (progn 
+                  (setq younger (not younger))
+                  (setq days (* days -1)))))
         (message "Please enter a number.")
         (sleep-for 1)))
      (list days younger)))
@@ -7988,42 +8061,45 @@ to save in."
   (dolist (article (gnus-summary-work-articles n))
     (gnus-summary-select-article nil nil 'pseudo article)
     (gnus-eval-in-buffer-window gnus-article-buffer
-      (let ((buffer (generate-new-buffer " *print*")))
-       (unwind-protect
-           (progn
-             (copy-to-buffer buffer (point-min) (point-max))
-             (set-buffer buffer)
-             (gnus-article-delete-invisible-text)
-             (when (gnus-visual-p 'article-highlight 'highlight)
-               ;; Copy-to-buffer doesn't copy overlay.  So redo
-               ;; highlight.
-               (let ((gnus-article-buffer buffer))
-                 (gnus-article-highlight-citation t)
-                 (gnus-article-highlight-signature)))
-             (let ((ps-left-header
-                    (list
-                     (concat "("
-                             (gnus-summary-print-truncate-and-quote
-                              (mail-header-subject gnus-current-headers)
-                              66) ")")
-                     (concat "("
-                             (gnus-summary-print-truncate-and-quote
-                              (mail-header-from gnus-current-headers)
-                              45) ")")))
-                   (ps-right-header
-                    (list
-                     "/pagenumberstring load"
-                     (concat "("
-                             (mail-header-date gnus-current-headers) ")"))))
-               (gnus-run-hooks 'gnus-ps-print-hook)
-               (save-excursion
-                 (if window-system
-                     (ps-spool-buffer-with-faces)
-                   (ps-spool-buffer)))))
-         (kill-buffer buffer))))
+      (gnus-print-buffer))
     (gnus-summary-remove-process-mark article))
   (ps-despool filename))
 
+(defun gnus-print-buffer ()
+  (let ((buffer (generate-new-buffer " *print*")))
+    (unwind-protect
+       (progn
+         (copy-to-buffer buffer (point-min) (point-max))
+         (set-buffer buffer)
+         (gnus-article-delete-invisible-text)
+         (when (gnus-visual-p 'article-highlight 'highlight)
+           ;; Copy-to-buffer doesn't copy overlay.  So redo
+           ;; highlight.
+           (let ((gnus-article-buffer buffer))
+             (gnus-article-highlight-citation t)
+             (gnus-article-highlight-signature)))
+         (let ((ps-left-header
+                (list
+                 (concat "("
+                         (gnus-summary-print-truncate-and-quote
+                          (mail-header-subject gnus-current-headers)
+                          66) ")")
+                 (concat "("
+                         (gnus-summary-print-truncate-and-quote
+                          (mail-header-from gnus-current-headers)
+                          45) ")")))
+               (ps-right-header
+                (list
+                 "/pagenumberstring load"
+                 (concat "("
+                         (mail-header-date gnus-current-headers) ")"))))
+           (gnus-run-hooks 'gnus-ps-print-hook)
+           (save-excursion
+             (if window-system
+                 (ps-spool-buffer-with-faces)
+               (ps-spool-buffer)))))
+      (kill-buffer buffer))))
+
 (defun gnus-summary-show-article (&optional arg)
   "Force redisplaying of the current article.
 If ARG (the prefix) is a number, show the article with the charset
@@ -8144,8 +8220,7 @@ If ARG is a negative number, hide the unwanted header lines."
          (if  hidden
              (let ((gnus-treat-hide-headers nil)
                    (gnus-treat-hide-boring-headers nil))
-               (setq gnus-article-wash-types
-                     (delq 'headers gnus-article-wash-types))
+               (gnus-delete-wash-type 'headers)
                (gnus-treat-article 'head))
            (gnus-treat-article 'head)))
        (gnus-set-mode-line 'article)))))
@@ -8236,6 +8311,11 @@ ACTION can be either `move' (the default), `crosspost' or `copy'."
        art-group to-method new-xref article to-groups)
     (unless (assq action names)
       (error "Unknown action %s" action))
+    ;; We have to select an article to give
+    ;; `gnus-read-move-group-name' an opportunity to suggest an
+    ;; appropriate default.
+    (unless (gnus-buffer-live-p gnus-original-article-buffer)
+      (gnus-summary-select-article nil nil nil (car articles)))
     ;; Read the newsgroup name.
     (when (and (not to-newsgroup)
               (not select-method))
index 99958a8..53072f2 100644 (file)
@@ -165,6 +165,7 @@ with some simple extensions.
                          (mapcar 'list (gnus-topic-list))
                          nil t)))
   (dolist (topic (gnus-current-topics topic))
+    (gnus-topic-goto-topic topic)
     (gnus-topic-fold t))
   (gnus-topic-goto-topic topic))
 
index 718fe72..a332aa3 100644 (file)
        (delete-char 1))
       (goto-char (next-single-property-change (point) prop nil (point-max))))))
 
+(defun gnus-text-with-property (prop)
+  "Return a list of all points where the text has PROP."
+  (let ((points nil)
+       (point (point-min)))
+    (save-excursion
+      (while (< point (point-max))
+       (when (get-text-property point prop)
+         (push point points))
+       (incf point)))
+    (nreverse points)))
+
 (require 'nnheader)
 (defun gnus-newsgroup-directory-form (newsgroup)
   "Make hierarchical directory name from NEWSGROUP name."
@@ -695,6 +706,19 @@ Bind `print-quoted' and `print-readably' to t while printing."
          (setq beg (point)))
        (gnus-put-text-property beg (point) prop val)))))
 
+(defsubst gnus-put-overlay-excluding-newlines (beg end prop val)
+  "The same as `put-text-property', but don't put this prop on any newlines in the region."
+  (save-match-data
+    (save-excursion
+      (save-restriction
+       (goto-char beg)
+       (while (re-search-forward gnus-emphasize-whitespace-regexp end 'move)
+         (gnus-overlay-put
+          (gnus-make-overlay beg (match-beginning 0))
+          prop val)
+         (setq beg (point)))
+       (gnus-overlay-put (gnus-make-overlay beg (point)) prop val)))))
+
 (defun gnus-put-text-property-excluding-characters-with-faces (beg end
                                                                   prop val)
   "The same as `put-text-property', but don't put props on characters with the `gnus-face' property."
index 4be92e7..a53dc26 100644 (file)
@@ -34,7 +34,7 @@
 (require 'product)
 (provide 'gnus-vers)
 
-(defconst gnus-revision-number "09"
+(defconst gnus-revision-number "10"
   "Revision number for this version of gnus.")
 
 ;; Product information of this gnus.
index 43c7972..9d5188b 100644 (file)
@@ -76,17 +76,6 @@ used to display Gnus windows."
               (if gnus-carpal '(summary-carpal 4))))
     (article
      (cond
-      ((and gnus-use-picons
-           (eq gnus-picons-display-where 'picons))
-       '(frame 1.0
-              (vertical 1.0
-                        (summary 0.25 point)
-                        (if gnus-carpal '(summary-carpal 4))
-                        (article 1.0))
-              (vertical ((height . 5) (width . 15)
-                         (user-position . t)
-                         (left . -1) (top . 1))
-                        (picons 1.0))))
       (gnus-use-trees
        '(vertical 1.0
                  (summary 0.25 point)
@@ -198,7 +187,6 @@ See the Gnus manual for an explanation of the syntax used.")
     (mail . gnus-message-buffer)
     (post-news . gnus-message-buffer)
     (faq . gnus-faq-buffer)
-    (picons . gnus-picons-buffer-name)
     (tree . gnus-tree-buffer)
     (score-trace . "*Score Trace*")
     (split-trace . "*Split Trace*")
@@ -208,6 +196,11 @@ See the Gnus manual for an explanation of the syntax used.")
     (draft . gnus-draft-buffer))
   "Mapping from short symbols to buffer names or buffer variables.")
 
+(defcustom gnus-configure-windows-hook nil
+  "*A hook called when configuring windows."
+  :group 'gnus-windowns
+  :type 'hook)
+
 ;;; Internal variables.
 
 (defvar gnus-current-window-configuration nil
@@ -458,7 +451,7 @@ See the Gnus manual for an explanation of the syntax used.")
                      ;; This is not a `frame' split, so we ignore the
                      ;; other frames.
                      (delete-other-windows)
-                   ;; This is a `frame' split, so we delete all windows
+                 ;; This is a `frame' split, so we delete all windows
                    ;; on all frames.
                    (gnus-delete-windows-in-gnusey-frames))
                ;; Just remove some windows.
@@ -473,6 +466,7 @@ See the Gnus manual for an explanation of the syntax used.")
              (switch-to-buffer nntp-server-buffer)
            (set-buffer nntp-server-buffer))
          (gnus-configure-frame split)
+         (run-hooks 'gnus-configure-windows-hook)
          (when gnus-window-frame-focus
            (select-frame (window-frame gnus-window-frame-focus))))))))
 
index 775f54b..022b936 100644 (file)
@@ -51,37 +51,6 @@ automatically."
     (error "Can't find glyph directory. \
 Possibly the `etc' directory has not been installed.")))
 
-;;(format "%02x%02x%02x" 114 66 20) "724214"
-
-(defvar gnus-xmas-logo-color-alist
-  '((flame "#cc3300" "#ff2200")
-    (pine "#c0cc93" "#f8ffb8")
-    (moss "#a1cc93" "#d2ffb8")
-    (irish "#04cc90" "#05ff97")
-    (sky "#049acc" "#05deff")
-    (tin "#6886cc" "#82b6ff")
-    (velvet "#7c68cc" "#8c82ff")
-    (grape "#b264cc" "#cf7df")
-    (labia "#cc64c2" "#fd7dff")
-    (berry "#cc6485" "#ff7db5")
-    (dino "#724214" "#1e3f03")
-    (neutral "#b4b4b4" "#878787")
-    (september "#bf9900" "#ffcc00"))
-  "Color alist used for the Gnus logo.")
-
-(defcustom gnus-xmas-logo-color-style 'dino
-  "*Color styles used for the Gnus logo."
-  :type '(choice (const flame) (const pine) (const moss)
-                (const irish) (const sky) (const tin)
-                (const velvet) (const grape) (const labia)
-                (const berry) (const neutral) (const september)
-                (const dino))
-  :group 'gnus-xmas)
-
-(defvar gnus-xmas-logo-colors
-  (cdr (assq gnus-xmas-logo-color-style gnus-xmas-logo-color-alist))
-  "Colors used for the Gnus logo.")
-
 ;;; Internal variables.
 
 ;; Don't warn about these undefined variables.
@@ -420,7 +389,7 @@ call it with the value of the `gnus-data' text property."
   (defalias 'gnus-put-text-property 'gnus-xmas-put-text-property)
   (defalias 'gnus-deactivate-mark 'ignore)
   (defalias 'gnus-window-edges 'window-pixel-edges)
-
+  
   (if (and (<= emacs-major-version 19)
           (< emacs-minor-version 14))
       (defalias 'gnus-set-text-properties 'gnus-xmas-set-text-properties))
@@ -465,6 +434,10 @@ call it with the value of the `gnus-data' text property."
   (defalias 'gnus-region-active-p 'region-active-p)
   (defalias 'gnus-annotation-in-region-p 'gnus-xmas-annotation-in-region-p)
   (defalias 'gnus-mime-button-menu 'gnus-xmas-mime-button-menu)
+  (defalias 'gnus-image-type-available-p 'gnus-xmas-image-type-available-p)
+  (defalias 'gnus-put-image 'gnus-xmas-put-image)
+  (defalias 'gnus-create-image 'gnus-xmas-create-image)
+  (defalias 'gnus-remove-image 'gnus-xmas-remove-image)
 
   ;; These ones are not defcutom'ed, sometimes not even defvar'ed. They
   ;; probably should. If that is done, the code below should then be moved
@@ -550,8 +523,8 @@ the resulting string may be narrower than END-COLUMN.
                          `[xpm
                            :file ,logo-xpm
                            :color-symbols
-                           (("thing" . ,(car gnus-xmas-logo-colors))
-                            ("shadow" . ,(cadr gnus-xmas-logo-colors))
+                           (("thing" . ,(car gnus-logo-colors))
+                            ("shadow" . ,(cadr gnus-logo-colors))
                             ("background" . ,(face-background 'default)))])
                         ((featurep 'xbm)
                          `[xbm :file ,logo-xbm])
@@ -752,23 +725,19 @@ XEmacs compatibility workaround."
   "Face to show X face"
   :group 'gnus-xmas)
 
-(defun gnus-xmas-article-display-xface (beg end &optional buffer)
-  "Display any XFace headers in BUFFER."
+(defun gnus-xmas-article-display-xface (data)
+  "Display the XFace in DATA."
   (save-excursion
     (let ((xface-glyph
           (cond
            ((featurep 'xface)
             (make-glyph (vector 'xface :data
-                                (concat "X-Face: "
-                                        (if buffer
-                                            (with-current-buffer buffer
-                                              (buffer-substring beg end))
-                                          (buffer-substring beg end))))))
+                                (concat "X-Face: " data))))
            ((featurep 'xpm)
-            (let ((cur (or buffer (current-buffer))))
+            (let ((cur (current-buffer)))
               (save-excursion
                 (gnus-set-work-buffer)
-                (insert-buffer-substring cur beg end)
+                (insert data)
                 (let ((coding-system-for-read 'binary)
                       (coding-system-for-write 'binary))
                   (gnus-xmas-call-region "uncompface")
@@ -779,15 +748,13 @@ XEmacs compatibility workaround."
                   (make-glyph
                    (vector 'xpm :data (buffer-string)))))))
            (t
-            (make-glyph [nothing]))))
-         (ext (make-extent (progn
-                             (goto-char (point-min))
-                             (re-search-forward "^From:" nil t)
-                             (point))
-                           (1+ (point)))))
-      (set-glyph-face xface-glyph 'gnus-x-face)
-      (set-extent-begin-glyph ext xface-glyph)
-      (set-extent-property ext 'duplicable t))))
+            (make-glyph [nothing])))))
+      ;;(set-glyph-face xface-glyph 'gnus-x-face)
+
+      (gnus-article-goto-header "from")
+      (gnus-put-image xface-glyph " ")
+      (gnus-add-wash-type 'xface)
+      (gnus-add-image 'xface xface-glyph))))
 
 (defvar gnus-xmas-modeline-left-extent
   (let ((ext (copy-extent modeline-buffer-id-left-extent)))
@@ -928,6 +895,66 @@ XEmacs compatibility workaround."
   (gnus-xmas-menu-add mailing-list
     gnus-mailing-list-menu))
 
+(defun gnus-xmas-image-type-available-p (type)
+  (featurep type))
+
+(defun gnus-xmas-create-image (file &optional type data-p &rest props)
+  (let ((type (if type
+                 (symbol-name type)
+               (car (last (split-string file "[.]")))))
+       (face (plist-get props :face))
+       glyph)
+    (when (equal type "pbm")
+      (with-temp-buffer
+       (if data-p
+           (insert file)
+         (insert-file-contents file))
+       (shell-command-on-region (point-min) (point-max)
+                                "ppmtoxpm 2>/dev/null" t)
+       (setq file (buffer-string)
+             type "xpm"
+             data-p t)))
+    (setq glyph
+         (if (equal type "xbm")
+             (make-glyph (list (cons 'x file)))
+           (with-temp-buffer
+             (if data-p
+                 (insert file)
+               (insert-file-contents file))
+             (make-glyph
+              (vector
+               (or (intern type)
+                   (mm-image-type-from-buffer))
+               :data (buffer-string))))))
+    (when face
+      (set-glyph-face glyph face))
+    glyph))
+
+(defun gnus-xmas-put-image (glyph &optional string)
+  "Insert STRING, but display GLYPH.
+Warning: Don't insert text immediately after the image."
+  (let ((begin (point))
+       extent)
+    (if string
+       (insert string)
+      (setq begin (1- begin)))
+    (setq extent (make-extent begin (point)))
+    (set-extent-property extent 'gnus-image t)
+    (set-extent-property extent 'duplicable t)
+    (if string
+       (set-extent-property extent 'invisible t))
+    (set-extent-property extent 'end-glyph glyph))
+  glyph)
+
+(defun gnus-xmas-remove-image (image)
+  (map-extents
+   (lambda (ext unused)
+     (when (equal (extent-end-glyph ext) image)
+       (set-extent-property ext 'invisible nil)
+       (set-extent-property ext 'end-glyph nil))
+     nil)
+   nil nil nil nil nil 'gnus-image))
+
 (provide 'gnus-xmas)
 
 ;;; gnus-xmas.el ends here
index 89b2d7a..90b88d5 100644 (file)
@@ -1,6 +1,6 @@
 ;;; gnus.el --- a newsreader for GNU Emacs
-;; Copyright (C) 1987, 1988, 1989, 1990, 1993, 1994, 1995, 1996, 2001,
-;;        1997, 1998, 2000, 2001 Free Software Foundation, Inc.
+;; Copyright (C) 1987, 1988, 1989, 1990, 1993, 1994, 1995, 1996, 
+;;        1997, 1998, 2000, 2001, 2002 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -751,10 +751,10 @@ be set in `.emacs' instead."
 (defface gnus-splash-face
   '((((class color)
       (background dark))
-     (:foreground "Brown"))
+     (:foreground "#888888"))
     (((class color)
       (background light))
-     (:foreground "Brown"))
+     (:foreground "#888888"))
     (t
      ()))
   "Face for the splash screen.")
@@ -785,6 +785,38 @@ be set in `.emacs' instead."
 
 (defvar gnus-simple-splash nil)
 
+;;(format "%02x%02x%02x" 114 66 20) "724214"
+
+(defvar gnus-logo-color-alist
+  '((flame "#cc3300" "#ff2200")
+    (pine "#c0cc93" "#f8ffb8")
+    (moss "#a1cc93" "#d2ffb8")
+    (irish "#04cc90" "#05ff97")
+    (sky "#049acc" "#05deff")
+    (tin "#6886cc" "#82b6ff")
+    (velvet "#7c68cc" "#8c82ff")
+    (grape "#b264cc" "#cf7df")
+    (labia "#cc64c2" "#fd7dff")
+    (berry "#cc6485" "#ff7db5")
+    (dino "#724214" "#1e3f03")
+    (oort "#cccccc" "#888888")
+    (neutral "#b4b4b4" "#878787")
+    (september "#bf9900" "#ffcc00"))
+  "Color alist used for the Gnus logo.")
+
+(defcustom gnus-logo-color-style 'oort
+  "*Color styles used for the Gnus logo."
+  :type '(choice (const flame) (const pine) (const moss)
+                (const irish) (const sky) (const tin)
+                (const velvet) (const grape) (const labia)
+                (const berry) (const neutral) (const september)
+                (const dino))
+  :group 'gnus-xmas)
+
+(defvar gnus-logo-colors
+  (cdr (assq gnus-logo-color-style gnus-logo-color-alist))
+  "Colors used for the Gnus logo.")
+
 (defun gnus-group-startup-message (&optional x y)
   "Insert startup message in current buffer."
   ;; Insert the message.
@@ -796,9 +828,10 @@ be set in `.emacs' instead."
                (fg (face-foreground 'gnus-splash-face))
                (image (find-image
                        `((:type xpm :file "gnus.xpm"
-                                :color-symbols (("thing" . "#724214")
-                                                ("shadow" . "#1e3f03")
-                                                ("background" . ,bg)))
+                                :color-symbols
+                                (("thing" . ,(car gnus-logo-colors))
+                                 ("shadow" . ,(cadr gnus-logo-colors))
+                                 ("background" . ,bg)))
                          (:type pbm :file "gnus.pbm"
                                 ;; Account for the pbm's blackground.
                                 :background ,bg :foreground ,fg)
@@ -1354,11 +1387,6 @@ articles.  This is not a good idea."
   :group 'gnus-meta
   :type 'boolean)
 
-(defcustom gnus-use-picons nil
-  "*If non-nil, display picons in a frame of their own."
-  :group 'gnus-meta
-  :type 'boolean)
-
 (defcustom gnus-summary-prepare-exit-hook
   '(gnus-summary-expire-articles)
   "*A hook called when preparing to exit from the summary buffer.
@@ -2089,9 +2117,7 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.")
       gnus-summary-followup-to-mail-with-original gnus-bug
       gnus-summary-wide-reply-with-original gnus-summary-post-forward
       gnus-summary-digest-mail-forward gnus-summary-digest-post-forward)
-     ("gnus-picon" :interactive t gnus-article-display-picons
-      gnus-group-display-picons)
-     ("gnus-picon" gnus-picons-buffer-name)
+     ("gnus-picon" :interactive t gnus-treat-from-picon)
      ("gnus-gl" bbb-login bbb-logout bbb-grouplens-group-p
       gnus-grouplens-mode)
      ("smiley" :interactive t gnus-smiley-display)
@@ -2168,7 +2194,7 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.")
       gnus-unplugged gnus-agentize gnus-agent-batch)
      ("gnus-vm" :interactive t gnus-summary-save-in-vm
       gnus-summary-save-article-vm)
-     ("gnus-draft" :interactive t gnus-draft-mode gnus-group-send-drafts)
+     ("gnus-draft" :interactive t gnus-draft-mode gnus-group-send-queue)
      ("gnus-mlspl" gnus-group-split gnus-group-split-fancy)
      ("gnus-mlspl" :interactive t gnus-group-split-setup
       gnus-group-split-update))))
@@ -3360,6 +3386,9 @@ If ARG is non-nil and a positive number, Gnus will use that as the
 startup level. If ARG is non-nil and not a positive number, Gnus will
 prompt the user for the name of an NNTP server to use."
   (interactive "P")
+  (unless (byte-code-function-p (symbol-function 'gnus))
+    (message "You should byte-compile Gnus")
+    (sit-for 2))
   (gnus-1 arg dont-connect slave))
 
 ;; Allow redefinition of Gnus functions.
index b39decb..e1b19a9 100644 (file)
@@ -1,5 +1,5 @@
 ;;; ietf-drums.el --- Functions for parsing RFC822bis headers
-;; Copyright (C) 1998, 1999, 2000
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002
 ;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 
 (defun ietf-drums-parse-addresses (string)
   "Parse STRING and return a list of MAILBOX / DISPLAY-NAME pairs."
-  (with-temp-buffer
-    (ietf-drums-init string)
-    (let ((beg (point))
-         pairs c)
-      (while (not (eobp))
-       (setq c (char-after))
-       (cond
-        ((memq c '(?\" ?< ?\())
-         (forward-sexp 1))
-        ((eq c ?,)
-         (push (ietf-drums-parse-address (buffer-substring beg (point)))
-               pairs)
-         (forward-char 1)
-         (setq beg (point)))
-        (t
-         (forward-char 1))))
-      (push (ietf-drums-parse-address (buffer-substring beg (point)))
-           pairs)
-      (nreverse pairs))))
+  (if (null string)
+      nil
+    (with-temp-buffer
+      (ietf-drums-init string)
+      (let ((beg (point))
+           pairs c address)
+       (while (not (eobp))
+         (setq c (char-after))
+         (cond
+          ((memq c '(?\" ?< ?\())
+           (condition-case nil
+               (forward-sexp 1)
+             (error
+              (skip-chars-forward "^,"))))
+          ((eq c ?,)
+           (setq address
+                 (condition-case nil
+                     (ietf-drums-parse-address 
+                      (buffer-substring beg (point)))
+                   (error nil)))
+           (if address (push address pairs))
+           (forward-char 1)
+           (setq beg (point)))
+          (t
+           (forward-char 1))))
+       (setq address
+             (condition-case nil
+                 (ietf-drums-parse-address 
+                  (buffer-substring beg (point)))
+               (error nil)))
+       (if address (push address pairs))
+       (nreverse pairs)))))
 
 (defun ietf-drums-unfold-fws ()
   "Unfold folding white space in the current buffer."
index 618889f..519690c 100644 (file)
@@ -2187,7 +2187,7 @@ Return nil if no complete line has arrived."
 (defun imap-parse-fetch (response)
   (when (eq (char-after) ?\()
     (let (uid flags envelope internaldate rfc822 rfc822header rfc822text
-             rfc822size body bodydetail bodystructure)
+             rfc822size body bodydetail bodystructure flags-empty)
       (while (not (eq (char-after) ?\)))
        (imap-forward)
        (let ((token (read (current-buffer))))
@@ -2195,7 +2195,9 @@ Return nil if no complete line has arrived."
          (cond ((eq token 'UID)
                 (setq uid (ignore-errors (read (current-buffer)))))
                ((eq token 'FLAGS)
-                (setq flags (imap-parse-flag-list)))
+                (setq flags (imap-parse-flag-list))
+                (if (not flags)
+                    (setq flags-empty 't)))
                ((eq token 'ENVELOPE)
                 (setq envelope (imap-parse-envelope)))
                ((eq token 'INTERNALDATE)
@@ -2224,7 +2226,7 @@ Return nil if no complete line has arrived."
       (when uid
        (setq imap-current-message uid)
        (imap-message-put uid 'UID uid)
-       (and flags (imap-message-put uid 'FLAGS flags))
+       (and (or flags flags-empty) (imap-message-put uid 'FLAGS flags))
        (and envelope (imap-message-put uid 'ENVELOPE envelope))
        (and internaldate (imap-message-put uid 'INTERNALDATE internaldate))
        (and rfc822 (imap-message-put uid 'RFC822 rfc822))
index a50cfd7..625622d 100644 (file)
@@ -80,7 +80,7 @@
                     url-retrieve w3-form-encode-xwfu window-at
                     window-edges x-color-values x-popup-menu browse-url
                     frame-char-height frame-char-width
-                    xml-parse-region))
+                    url-generic-parse-url xml-parse-region))
       (maybe-bind '(buffer-display-table
                    buffer-file-coding-system font-lock-defaults
                    global-face-data gnus-article-x-face-too-ugly
index 95a3359..a5de09b 100644 (file)
 (defalias 'mail-narrow-to-head 'ietf-drums-narrow-to-header)
 (defalias 'mail-quote-string 'ietf-drums-quote-string)
 
+(defalias 'mail-header-fold-field 'rfc2047-fold-field)
+(defalias 'mail-header-unfold-field 'rfc2047-unfold-field)
 (defalias 'mail-header-narrow-to-field 'rfc2047-narrow-to-field)
+(defalias 'mail-header-field-value 'rfc2047-field-value)
+
 (defalias 'mail-encode-encoded-word-region 'rfc2047-encode-region)
 (defalias 'mail-encode-encoded-word-buffer 'rfc2047-encode-message-header)
 (defalias 'mail-encode-encoded-word-string 'rfc2047-encode-string)
index 67f5cd4..c5cfd07 100644 (file)
@@ -2990,7 +2990,8 @@ It should typically alter the sending method in some way or other."
                       (setq success (funcall (caddr elem) arg)))
              (setq sent t)))))
       (unless
-         (or sent (not success)
+         (or sent
+             (not success)
              (let ((fcc (message-fetch-field "Fcc"))
                    (gcc (message-fetch-field "Gcc")))
                (when (or fcc gcc)
index a963a21..4b401e8 100644 (file)
@@ -1115,30 +1115,33 @@ be determined."
                                        (or (mm-image-type-from-buffer)
                                            (intern type))
                                        'data-p)
-                       (cond
-                        ((equal type "xbm")
-                         ;; xbm images require special handling, since
-                         ;; the only way to create glyphs from these
-                         ;; (without a ton of work) is to write them
-                         ;; out to a file, and then create a file
-                         ;; specifier.
-                         (let ((file (make-temp-name
-                                      (expand-file-name "emm.xbm"
-                                                        mm-tmp-directory))))
-                           (unwind-protect
-                               (progn
-                                 (write-region (point-min) (point-max) file)
-                                 (make-glyph (list (cons 'x file))))
-                             (ignore-errors
-                               (delete-file file)))))
-                        (t
-                         (make-glyph
-                          (vector
-                           (or (mm-image-type-from-buffer)
-                               (intern type))
-                           :data (buffer-string))))))))
+                       (mm-create-image-xemacs type))))
            (mm-handle-set-cache handle spec))))))
 
+(defun mm-create-image-xemacs (type)
+  (cond
+   ((equal type "xbm")
+    ;; xbm images require special handling, since
+    ;; the only way to create glyphs from these
+    ;; (without a ton of work) is to write them
+    ;; out to a file, and then create a file
+    ;; specifier.
+    (let ((file (make-temp-name
+                (expand-file-name "emm.xbm"
+                                  mm-tmp-directory))))
+      (unwind-protect
+         (progn
+           (write-region (point-min) (point-max) file)
+           (make-glyph (list (cons 'x file))))
+       (ignore-errors
+         (delete-file file)))))
+   (t
+    (make-glyph
+     (vector
+      (or (mm-image-type-from-buffer)
+         (intern type))
+      :data (buffer-string))))))
+
 (defun mm-image-fit-p (handle)
   "Say whether the image in HANDLE will fit the current window."
   (let ((image (mm-get-image handle)))
index 5d4d3fc..af5386f 100644 (file)
@@ -40,6 +40,7 @@
 ;;;
 ;;; Functions for displaying various formats inline
 ;;;
+
 (defun mm-inline-image-emacs (handle)
   (let ((b (point-marker))
        buffer-read-only)
@@ -89,6 +90,8 @@
       (setq text (mm-get-part handle))
       (let ((b (point))
            (url-standalone-mode t)
+           (w3-honor-stylesheets nil)
+           (w3-delay-image-loads t)
            (url-current-object
             (url-generic-parse-url (format "cid:%s" (mm-handle-id handle))))
            (width (window-width))
                      ;; Don't let w3 set the global version of
                      ;; this variable.
                      (fill-column fill-column)
+                     (w3-honor-stylesheets nil)
+                     (w3-delay-image-loads t)
                      (url-standalone-mode t))
                  (condition-case var
                      (w3-region (point-min) (point-max))
 
 (defun mm-w3-prepare-buffer ()
   (require 'w3)
-  (let ((url-standalone-mode t))
+  (let ((url-standalone-mode t)
+       (w3-honor-stylesheets nil)
+       (w3-delay-image-loads t))
     (w3-prepare-buffer)))
 
 (defun mm-view-message ()
index 848e772..d659d11 100644 (file)
@@ -76,8 +76,7 @@
   "Various mail options."
   :group 'nnmail)
 
-(defcustom nnmail-split-methods
-  '(("mail.misc" ""))
+(defcustom nnmail-split-methods '(("mail.misc" ""))
   "*Incoming mail will be split according to this variable.
 
 If you'd like, for instance, one mail group for mail from the
@@ -976,7 +975,7 @@ FUNC will be called with the buffer narrowed to each mail."
 (defun nnmail-article-group (func &optional trace)
   "Look at the headers and return an alist of groups that match.
 FUNC will be called with the group name to determine the article number."
-  (let ((methods nnmail-split-methods)
+  (let ((methods (or nnmail-split-methods '(("bogus" ""))))
        (obuf (current-buffer))
        (beg (point-min))
        end group-art method grp)
index d6808fe..3196d54 100644 (file)
@@ -491,8 +491,9 @@ To use the description in headers, put this name into `nnmail-extra-headers'.")
       (error
        (nnheader-message 1 "Error in group %s: %s" group (cadr err))))
     (while (and xml (not (assq 'item xml)))
-      (unless (listp (car (setq xml (cddar xml))))
-       (setq xml nil)))
+      (setq xml (cddar xml))
+      (while (not (listp (car xml)))
+       (setq xml (cdr xml))))
     (dolist (item (nreverse xml))
       (when (and (listp item)
                 (eq 'item (car item))
index fe63a60..9e308a7 100644 (file)
@@ -116,6 +116,14 @@ Valid encodings are nil, `Q' and `B'.")
        (point-max))))
   (goto-char (point-min)))
 
+(defun rfc2047-field-value ()
+  "Return the value of the field at point."
+  (save-excursion
+    (save-restriction
+      (rfc2047-narrow-to-field)
+      (re-search-forward ":[ \t\n]*" nil t)
+      (buffer-substring (point) (point-max)))))
+
 (defun rfc2047-encode-message-header ()
   "Encode the message header according to `rfc2047-header-encoding-alist'.
 Should be called narrowed to the head of the message."
@@ -136,14 +144,17 @@ Should be called narrowed to the head of the message."
                      ;; Is message-posting-charset a coding system?
                      (mm-encode-coding-region
                       (point-min) (point-max)
-                      (car message-posting-charset)))
+                      (car message-posting-charset))
+                   nil)
                ;; No encoding necessary, but folding is nice
-               (rfc2047-fold-region (save-excursion
-                                      (goto-char (point-min))
-                                      (skip-chars-forward "^:")
-                                      (and (looking-at ": ")
-                                           (forward-char 2))
-                                      (point)) (point-max)))
+               (rfc2047-fold-region
+                (save-excursion
+                  (goto-char (point-min))
+                  (skip-chars-forward "^:")
+                  (when (looking-at ": ")
+                    (forward-char 2))
+                  (point))
+                (point-max)))
            ;; We found something that may perhaps be encoded.
            (setq method nil
                  alist rfc2047-header-encoding-alist)
@@ -335,6 +346,13 @@ The buffer may be narrowed."
        (insert "?=")
        (forward-line 1)))))
 
+(defun rfc2047-fold-field ()
+  "Fold the current line."
+  (save-excursion
+    (save-restriction
+      (rfc2047-narrow-to-field)
+      (rfc2047-fold-region (point-min) (point-max)))))
+
 (defun rfc2047-fold-region (b e)
   "Fold long lines in region B to E."
   (save-restriction
@@ -342,11 +360,13 @@ The buffer may be narrowed."
     (goto-char (point-min))
     (let ((break nil)
          (qword-break nil)
+         (first t)
          (bol (save-restriction
                 (widen)
                 (gnus-point-at-bol))))
       (while (not (eobp))
-       (when (and (or break qword-break) (> (- (point) bol) 76))
+       (when (and (or break qword-break)
+                  (> (- (point) bol) 76))
          (goto-char (or break qword-break))
          (setq break nil
                qword-break nil)
@@ -356,7 +376,8 @@ The buffer may be narrowed."
          (setq bol (1- (point)))
          ;; Don't break before the first non-LWSP characters.
          (skip-chars-forward " \t")
-         (unless (eobp) (forward-char 1)))
+         (unless (eobp)
+           (forward-char 1)))
        (cond
         ((eq (char-after) ?\n)
          (forward-char 1)
@@ -370,7 +391,10 @@ The buffer may be narrowed."
          (forward-char 1))
         ((memq (char-after) '(?  ?\t))
          (skip-chars-forward " \t")
-         (setq break (1- (point))))
+         (if first
+             ;; Don't break just after the header name.
+             (setq first nil)
+           (setq break (1- (point)))))
         ((not break)
          (if (not (looking-at "=\\?[^=]"))
              (if (eq (char-after) ?=)
@@ -380,7 +404,8 @@ The buffer may be narrowed."
            (skip-chars-forward "^ \t\n\r")))
         (t
          (skip-chars-forward "^ \t\n\r"))))
-      (when (and (or break qword-break) (> (- (point) bol) 76))
+      (when (and (or break qword-break)
+                (> (- (point) bol) 76))
        (goto-char (or break qword-break))
        (setq break nil
              qword-break nil)
@@ -390,7 +415,15 @@ The buffer may be narrowed."
        (setq bol (1- (point)))
        ;; Don't break before the first non-LWSP characters.
        (skip-chars-forward " \t")
-       (unless (eobp) (forward-char 1))))))
+       (unless (eobp)
+         (forward-char 1))))))
+
+(defun rfc2047-unfold-field ()
+  "Fold the current line."
+  (save-excursion
+    (save-restriction
+      (rfc2047-narrow-to-field)
+      (rfc2047-unfold-region (point-min) (point-max)))))
 
 (defun rfc2047-unfold-region (b e)
   "Unfold lines in region B to E."
index 15c1f5a..6bd25c6 100644 (file)
@@ -54,6 +54,8 @@
 
 (require 'hex-util)
 
+(autoload 'executable-find "executable")
+
 ;;;
 ;;; external SHA1 function.
 ;;;
@@ -69,6 +71,11 @@ If this variable is set to nil, use internal function only.")
   "*Name of program to compute SHA1.
 It must be a string \(program name\) or list of strings \(name and its args\).")
 
+(defvar sha1-use-external
+  (exec-installed-p (car sha1-program))
+  "*Use external sha1 program.
+If this variable is set to nil, use internal function only.")
+
 (defun sha1-string-external (string)
   ;; `with-temp-buffer' is new in v20, so we do not use it.
   (save-excursion
@@ -396,13 +403,15 @@ It must be a string \(program name\) or list of strings \(name and its args\).")
 ;;;
 
 (defun sha1-region (beg end)
-  (if (and sha1-maximum-internal-length
+  (if (and sha1-use-external
+          sha1-maximum-internal-length
           (> (abs (- end beg)) sha1-maximum-internal-length))
       (sha1-region-external beg end)
     (sha1-region-internal beg end)))
 
 (defun sha1-string (string)
-  (if (and sha1-maximum-internal-length
+  (if (and sha1-use-external
+          sha1-maximum-internal-length
           (> (length string) sha1-maximum-internal-length))
       (sha1-string-external string)
     (sha1-string-internal string)))
index 9b4020b..459299f 100644 (file)
 
 ;; The XEmacs version has a baroque, if not rococo, set of these.
 (defcustom smiley-regexp-alist
-  '(("\\(:-?)\\)\\W" 1 "smile.pbm")
-    ("\\(;-?)\\)\\W" 1 "blink.pbm")
-    ("\\(:-[/\\]\\)\\W" 1 "wry.pbm")
-    ("\\(:-(\\)\\W" 1 "sad.pbm")
-    ("\\(:-{\\)\\W" 1 "frown.pbm"))
+  '(("\\(:-?)\\)\\W" 1 "smile")
+    ("\\(;-?)\\)\\W" 1 "blink")
+    ("\\(:-]\\)\\W" 1 "forced")
+    ("\\(8-)\\)\\W" 1 "braindamaged")
+    ("\\(:-|\\)\\W" 1 "indifferent")
+    ("\\(:-[/\\]\\)\\W" 1 "wry")
+    ("\\(:-(\\)\\W" 1 "sad")
+    ("\\(:-{\\)\\W" 1 "frown"))
   "*A list of regexps to map smilies to images.
 The elements are (REGEXP MATCH FILE), where MATCH is the submatch in
 regexp to replace with IMAGE.  IMAGE is the name of a PBM file in
@@ -68,21 +71,36 @@ regexp to replace with IMAGE.  IMAGE is the name of a PBM file in
   :initialize 'custom-initialize-default
   :group 'smiley)
 
+(defcustom gnus-smiley-file-types
+  (let ((types (list "pbm")))
+    (when (gnus-image-type-available-p 'xpm)
+      (push "xpm" types))
+    types)
+  "*List of suffixes on picon file names to try."
+  :type '(repeat string)
+  :group 'smiley)
+
 (defvar smiley-cached-regexp-alist nil)
 
 (defun smiley-update-cache ()
   (dolist (elt (if (symbolp smiley-regexp-alist)
                   (symbol-value smiley-regexp-alist)
                 smiley-regexp-alist))
-    (let* ((data-directory smiley-data-directory)
-          (image (find-image (list (list :type 
-                                         (image-type-from-file-header 
-                                          (nth 2 elt)) 
-                                         :file (nth 2 elt)
-                                         :ascent 'center)))))
-      (if image
-         (push (list (car elt) (cadr elt) image)
-               smiley-cached-regexp-alist)))))
+    (let ((types gnus-smiley-file-types)
+         file type)
+      (while (and (not file)
+                 (setq type (pop types)))
+       (unless (file-exists-p
+                (setq file (expand-file-name (concat (nth 2 elt) "." type)
+                                             smiley-data-directory)))
+         (setq file nil)))
+      (when type
+       (let ((image (find-image (list (list :type (intern type) 
+                                            :file file
+                                            :ascent 'center)))))
+         (when image
+           (push (list (car elt) (cadr elt) image)
+                 smiley-cached-regexp-alist)))))))
 
 (defvar smiley-active nil
   "Non-nil means smilies in the buffer will be displayed.")
@@ -96,7 +114,8 @@ regexp to replace with IMAGE.  IMAGE is the name of a PBM file in
     map))
 
 (defun smiley-region (start end)
-  "Replace in the region `smiley-regexp-alist' matches with corresponding images."
+  "Replace in the region `smiley-regexp-alist' matches with corresponding images.
+A list of images is returned."
   (interactive "r")
   (when (and (fboundp 'display-graphic-p)
             (display-graphic-p))
@@ -106,25 +125,25 @@ regexp to replace with IMAGE.  IMAGE is the name of a PBM file in
            (overlays-in start end))
     (unless smiley-cached-regexp-alist
       (smiley-update-cache))
+    (setq smiley-active t)
     (save-excursion
       (let ((beg (or start (point-min)))
-           group overlay image)
+           group overlay image images)
        (dolist (entry smiley-cached-regexp-alist)
          (setq group (nth 1 entry)
                image (nth 2 entry))
          (goto-char beg)
          (while (re-search-forward (car entry) end t)
            (when image
-             (setq overlay (make-overlay (match-beginning group)
-                                         (match-end group)))
-             (overlay-put overlay
-                          'display `(when smiley-active ,@image))
-             (overlay-put overlay 'mouse-face 'highlight)
-             (overlay-put overlay 'smiley t)
-             (overlay-put overlay
-                          'help-echo "mouse-2: toggle smilies in buffer")
-             (overlay-put overlay 'keymap smiley-mouse-map))))))
-    (setq smiley-active t)))
+             (push image images)
+             (add-text-properties
+              (match-beginning group) (match-end group)
+              `(display ,image
+                        mouse-face highlight
+                        smiley t
+                        help-echo "mouse-2: toggle smilies in buffer"
+                        keymap smiley-mouse-map)))))
+       images))))
 
 (defun smiley-toggle-buffer (&optional arg)
   "Toggle displaying smiley faces.
@@ -149,11 +168,18 @@ With arg, turn displaying on if and only if arg is positive."
   "Display textual emoticaons (\"smilies\") as small graphical icons.
 With arg, turn displaying on if and only if arg is positive."
   (interactive "P")
-  (save-excursion
-    (article-goto-body)
-    (smiley-region (point) (point-max))
-    (if (and (numberp arg) (<= arg 0))
-       (smiley-toggle-buffer arg))))
+  (gnus-with-article-buffer
+    (if (memq 'smiley gnus-article-wash-types)
+       (gnus-delete-images 'smiley)
+      (article-goto-body)
+      (let ((images (smiley-region (point) (point-max))))
+       (when images
+         (gnus-add-wash-type 'smiley)
+         (dolist (image images)
+           (gnus-add-image 'smiley image))))
+      (when (and (numberp arg)
+                (<= arg 0))
+       (smiley-toggle-buffer arg)))))
 
 (provide 'smiley)
 
index 3dab217..de3983b 100644 (file)
@@ -1,3 +1,35 @@
+2002-01-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Choosing Commands): Addition.
+
+2001-12-31  Rui Zhu  <sprache@iname.com>
+
+       * emacs-mime.texi (Customization): Typo fix.
+
+2001-12-31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Article Display): Addition.
+
+       * emacs-mime.texi (Interface Functions): Addition.
+
+       * gnus.texi (Using MIME): Addition.
+
+2001-12-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (X-Face): Made into own node.
+       (Article Display): New.
+
+       * emacs-mime.texi (Interface Functions): Addition.
+
+       * message.texi (Message Headers): Addition.
+
+2001-12-29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * emacs-mime.texi (Customization): Added example.
+
+       * gnus.texi (Selecting a Group): Addition.
+       (Tree Display): Addition.
+
 2001-12-26  Florian Weimer  <fw@deneb.enyo.de>
 
        * gnus.texi (Using GPG): Remove obsolete reference to gpg-2comp.
index e115311..16ed3f8 100644 (file)
@@ -240,7 +240,20 @@ at the beginning of the narrowed buffer.
 
 @item mail-header-narrow-to-field
 @findex mail-header-narrow-to-field
-Narrow the buffer to the header under point.
+Narrow the buffer to the header under point.  Understands continuation
+headers. 
+
+@item mail-header-fold-field
+@findex mail-header-fold-field
+Fold the header under point.
+
+@item mail-header-unfold-field
+@findex mail-header-unfold-field
+Unfold the header under point.
+
+@item mail-header-field-value
+@findex mail-header-field-value
+Return the value of the field under point.
 
 @item mail-encode-encoded-word-region
 @findex mail-encode-encoded-word-region
@@ -1021,10 +1034,13 @@ last possible part of a message, as that is supposed to be the richest.
 However, users may prefer other types instead, and this list says what
 types are most unwanted.  If, for instance, @samp{text/html} parts are
 very unwanted, and @samp{text/richtech} parts are somewhat unwanted,
-then the value of this variable should be set to:
+you could say something like:
 
 @lisp
-("text/html" "text/richtext")
+(setq mm-discouraged-alternatives
+      '("text/html" "text/richtext")
+      mm-automatic-display
+      (remove "text/html" mm-automatic-display))
 @end lisp
 
 @item mm-inline-large-images-p
@@ -1037,7 +1053,7 @@ library will display it externally (e.g. with @samp{ImageMagick} or
 makes the library display all inline images as inline, regardless of
 their size.
 
-@item mm-inline-override-p
+@item mm-inline-override-type
 @code{mm-inlined-types} may include regular expressions, for example to
 specify that all @samp{text/.*} parts be displayed inline.  If a user
 prefers to have a type that matches such a regular expression be treated
index a01598a..9258aa6 100644 (file)
@@ -927,8 +927,7 @@ Various
 * NoCeM::                       Spam \e$B$dB>$NB@$j$d$9$$?);v$rHr$1$kJ}K!\e(B
 * Undo::                        \e$B$$$/$D$+$NF0:n$O85$KLa$9;v$,$G$-$k\e(B
 * Moderation::                  \e$B$"$J$?$,%b%G%l!<%?!<$@$C$?$i$I$&$9$k$+\e(B
-* XEmacs Enhancements::         XEmacs \e$B$G$O$b$C$H3($d$=$NB>$N$b$N$,B8:_\e(B
-                                \e$B$9$k\e(B
+* Image Enhancements::          \e$B:G?7$N\e(B Emacs/XEmacs \e$B$O3($rI=<($G$-$k\e(B
 * Fuzzy Matching::              \e$BBg$-$JLJLS$C$F2?\e(B?
 * Thwarting Email Spam::        \e$BM>7W$J>&6HE*EE;R%a!<%k$rHr$1$kJ}K!\e(B
 * Various Various::             \e$BK\Ev$K$$$m$$$m$J$b$N\e(B
@@ -2187,40 +2186,32 @@ Gnus \e$B$O\e(B @code{gnus-user-format-function-}@samp{X} \e$B4X?t$r8F$S=P$7$^$9!#$
 
 @vindex gnus-select-group-hook
 @vindex gnus-auto-select-first
-@code{gnus-auto-select-first} \e$B$O!"\e(B@kbd{SPACE} \e$B%3%^%s%I$G%0%k!<%W$KF~$C$?\e(B
-\e$B$H$-$K!"<+F0E*$K5-;v$rA*Br$9$k$+$I$&$+$r@)8f$7$^$9!#\e(B
+\e$B$b$7\e(B @code{gnus-auto-select-first} \e$B$,Hs\e(B-@code{nil} \e$B$@$C$?$i!"\e(B
+@kbd{SPACE} \e$B%3%^%s%I$G%0%k!<%W$KF~$C$?$H$-$K<+F0E*$K5-;v$rA*Br$7$^$9!#$I\e(B
+\e$B$N5-;v$,A*Br$5$l$k$+$O!"JQ?t\e(B @code{gnus-auto-select-subject} \e$B$G@)8f$5$l\e(B
+\e$B$^$9!#$3$NJQ?t$K@_Dj$G$-$kM-8z$JCM$O\e(B:
 
 @table @code
-@item nil
-\e$B%0%k!<%W$KF~$C$?$H$-$K$I$N5-;v$bA*Br$7$J$$!#$?$@35N,%P%C%U%!$rI=<($9$k$@\e(B
-\e$B$1!#\e(B
+@item unread
+\e$B:G=i$NL$FI5-;v$NI=Bj$N9T$K%]%$%s%H$r0\F0$5$;$^$9!#\e(B
 
-@item t
-\e$B%0%k!<%W$KF~$C$?$H$-$K!":G=i$NL$FI5-;v$rA*Br$9$k!#\e(B
+@item first
+\e$B:G=i$N5-;v$NI=Bj$N9T$K%]%$%s%H$r0\F0$5$;$^$9!#\e(B
+
+@item unseen
+\e$B$^$@FI$^$l$?$3$H$,L5$$:G=i$N5-;v$NI=Bj$N9T$K%]%$%s%H$r0\F0$5$;$^$9!#\e(B
 
 @item best
-\e$B%0%k!<%W$KF~$C$?$H$-$K!"$=$N%0%k!<%W$G:G$b9b$$%9%3%"$N5-;v$rA*Br$9$k!#\e(B
+\e$B%9%3%"$,:G$b9b$$L$FI5-;v$NI=Bj$N9T$K%]%$%s%H$r0\F0$5$;$^$9!#\e(B
 @end table
 
-\e$B$3$NJQ?t$O4X?t$G$"$k$3$H$b$G$-$^$9!#$=$N>l9g$O!"$=$N4X?t$OI=Bj$N9T$K%]%$\e(B
-\e$B%s%H$r0\F0$5$;$k$+!"$$$/$D$+$N5-;v$rA*Br$9$k$+$NN>J}$+!"8e<T$r$9$k$?$a$K\e(B
-\e$B8F$P$l$^$9!#JXMx$J4X?t$O\e(B:
-
-@table @code
-@item gnus-summary-first-unread-subject
-\e$B:G=i$NL$FI5-;v$NI=Bj9T$K%]%$%s%H$rCV$-$^$9$,!"5-;v$rA*Br$7$^$;$s!#\e(B
-
-@item gnus-summary-first-unread-article
-\e$B:G=i$NL$FI5-;v$rA*Br$7$^$9!#\e(B
-
-@item gnus-summary-best-unraed-article
-\e$B:G9b%9%3%"$NL$FI5-;v$rA*Br$7$^$9!#\e(B
-@end table
+\e$B$3$NJQ?t$O4X?t$G$"$k$3$H$b$G$-$^$9!#$=$N>l9g!"$=$N4X?t$OI=Bj$N9T$K%]%$%s\e(B
+\e$B%H$r0\F0$5$;$k$?$a$K8F$P$l$^$9!#\e(B
 
 \e$B$b$7$"$k%0%k!<%W$G<+F05-;vA*Br$r$d$a$?$$$N$G$"$l$P\e(B (\e$BNc$($P$G$C$+$$5-;v$N\e(B
-\e$B$"$k%P%$%J%j%0%k!<%W$G$O!"$H$+\e(B)\e$B!"%0%k!<%W$,A*Br$5$l$?$H$-$K8F$S=P$5$l$k\e(B
-@code{gnus-select-group-hook} \e$B$NCf$G$3$NJQ?t$r\e(B @code{nil} \e$B$K@_Dj$9$k$3$H\e(B
-\e$B$,$G$-$^$9!#\e(B
+\e$B$"$k%P%$%J%j%0%k!<%W$G$O!"$H$+\e(B)\e$B!"%0%k!<%W$,A*Br$5$l$?$H$-$K8F$S=P$5$l\e(B
+\e$B$k\e(B @code{gnus-select-group-hook} \e$B$NCf$GJQ\e(B
+\e$B?t\e(B @code{gnus-auto-select-first} \e$B$r\e(B @code{nil} \e$B$K@_Dj$9$k$3$H$,$G$-$^$9!#\e(B
 
 @node Subscription Commands
 @section \e$B9XFI@)8f%3%^%s%I\e(B
@@ -4777,7 +4768,10 @@ Summary Buffer} \e$B$r;2>H$7$F2<$5$$!#\e(B
 @kindex G b (\e$B35N,\e(B)
 @kindex , (\e$B35N,\e(B)
 @findex gnus-summary-best-unread-article
-\e$B:G9b%9%3%"$N5-;v$K0\F0$7$^$9\e(B (@code{gnus-summary-best-unread-article})\e$B!#\e(B
+\e$B:G9b%9%3%"$NL$FI5-;v$K0\F0$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-best-unread-article})\e$B!#$b$7@\F,0z?t$,M?$($i$l$?$J\e(B
+\e$B$i$P!"%G%#%U%)%k%H$N%9%3%"$h$jBg$-$$%9%3%"$r;}$D:G=i$NL$FI5-;v$K0\F0$7$^\e(B
+\e$B$9!#\e(B
 
 @item G l
 @itemx l
@@ -5298,22 +5292,22 @@ Gnus \e$B$O!"<h$j>C$9$H$-$K!X8=:_!Y$NA*BrJ}K!$r;H$$$^$9!#I8=`$NEj9FJ}K!$r;H\e(B
 
 \e$B$"$J$?$,?7Ce%K%e!<%9$r<hF@$7$h$&$H$9$k$H$-$O$$$D$b!"\e(Bgnus \e$B$OAw?.$9$k4|8B\e(B
 \e$B$KC#$7$?5-;v$r$=$N%0%k!<%W$GC5$7$F!"$=$l$i$rAw?.$7$^$9!#$3$l$K$O4X\e(B
-\e$B?t\e(B @code{gnus-delay-send-drafts} \e$B$,;H$o$l$^$9!#%G%#%U%)%k%H$G$O$3$N4X?t\e(B
+\e$B?t\e(B @code{gnus-delay-send-queue} \e$B$,;H$o$l$^$9!#%G%#%U%)%k%H$G$O$3$N4X?t\e(B
 \e$B$O\e(B @code{gnus-get-new-news-hook} \e$B$KDI2C$5$l$^$9$,!"$b$A$m$s$"$J$?$O$3$l\e(B
 \e$B$rJQ99$9$k$3$H$,$G$-$^$9!#$*$=$i$/$"$J$?$O!"%I%i%U%H$NAw?.$K%G!<%b%s$r;H\e(B
 \e$B$$$?$$$H;W$&$N$G$O$J$$$G$7$g$&$+\e(B? \e$B$=$l$K$O!"%G!<%b%s$K4X\e(B
-\e$B?t\e(B @code{gnus-delay-send-drafts} \e$B$r<B9T$;$h!"$H8@$&$@$1$GNI$$$N$G$9!#\e(B
+\e$B?t\e(B @code{gnus-delay-send-queue} \e$B$r<B9T$;$h!"$H8@$&$@$1$GNI$$$N$G$9!#\e(B
 
 @table @code
 @item gnus-delay-initialize
 @findex gnus-delay-initialize
 \e$B%G%#%U%)%k%H$G$O!"$3$N4X?t$O\e(B Message \e$B%b!<%I$K$*$1$k\e(B @kbd{C-c C-j} \e$B%-!<$N\e(B
 \e$B%P%$%s%I$H!"\e(B
-@code{gnus-delay-send-drafts} \e$B$N\e(B @code{gnus-get-new-news-hook} \e$B$X$NDI2C\e(B
-\e$B$r9T$J$$$^$9!#$G$9$,!"$3$l$O\e(B @code{no-keymap} \e$B$H\e(B @code{no-check} \e$B$NFs$D\e(B
-\e$B$N%*%W%7%g%s0z?t$r<u$1IU$1$^$9!#$b$7\e(B @code{no-keymap} \e$B$,Hs\e(Bnil \e$B$@$C$?\e(B
+@code{gnus-delay-send-queue} \e$B$N\e(B @code{gnus-get-new-news-hook} \e$B$X$NDI2C$r\e(B
+\e$B9T$J$$$^$9!#$G$9$,!"$3$l$O\e(B @code{no-keymap} \e$B$H\e(B @code{no-check} \e$B$NFs$D$N\e(B
+\e$B%*%W%7%g%s0z?t$r<u$1IU$1$^$9!#$b$7\e(B @code{no-keymap} \e$B$,Hs\e(Bnil \e$B$@$C$?\e(B
 \e$B$i\e(B @kbd{C-c C-j} \e$B%-!<$N%P%$%s%I$r9T$J$$$^$;$s!#$b$7\e(B @code{no-check} \e$B$,Hs\e(B
-nill \e$B$@$C$?$i\e(B @code{gnus-get-new-news-hook} \e$B$OJQ99$5$l$^$;$s!#\e(B
+nil \e$B$@$C$?$i\e(B @code{gnus-get-new-news-hook} \e$B$OJQ99$5$l$^$;$s!#\e(B
 
 \e$BNc$($P\e(B @code{(gnus-delay-initialize nil t)} \e$B$O!"%-!<%^%C%W$OJQ99$9$k\e(B
 \e$B$,\e(B @code{gnus-get-new-news-hook} \e$B$OJQ99$7$J$$$3$H$r0UL#$7$^$9!#$"$J$?$O\e(B
@@ -7439,6 +7433,7 @@ Gnus \e$B$O%U%!%$%k$r1\Mw$9$k$N$r7hDj$9$k$N$K\e(B@dfn{\e$B5,B'JQ?t\e(B}\e$B$rMQ$$$^$9
 * Article Buttons::             URL \e$B$d\e(B Message-ID \e$B$d\e(B \e$B%"%I%l%9$J$I$r%/%j%C\e(B
                                 \e$B%/$9$k\e(B
 * Article Date::                \e$B$0$:$0$:8@$&$J!"@$3&;~$@\e(B!
+* Article Display::             X-Face, Picons, Smileys \e$B$rI=<($9$k\e(B
 * Article Signature::           \e$B=pL>$C$F2?\e(B?
 * Article Miscellania::         \e$BB>$N$$$m$$$m$J$b$N\e(B
 @end menu
@@ -7912,38 +7907,6 @@ HZ \e$B$^$?$O\e(B HZP \e$B$r=hM}$7$^$9!#\e(BHZ (\e$B$^$?$O\e(B HZP) \e$B$OCf9q8l$N5-;v$
 @c has been done.
 @c If a prefix is given, a charset will be asked for.
 
-@item W f
-@kindex W f (\e$B35N,\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
-@iflatex
-\include{xface}
-@end iflatex
-@end iftex
-@c @anchor{X-Face}
-\e$B$9$Y$F$N\e(B X-Face \e$BMs$rC5$7$FI=<($7$^$9\e(B(@code{gnus-article-display-x-face})\e$B!#\e(B
-\e$B$3$NL?Na$OJQ?t\e(B @code{gnus-article-x-face-command} \e$B$K$h$C$FM?$($i$l$?4X?t\e(B
-\e$B$K$h$C$F<B9T$5$l$^$9!#$3$NJQ?t$,J8;zNs$J$i$P!"$3$NJ8;zNs$,%5%V%7%'%k$G<B\e(B
-\e$B9T$5$l$^$9!#4X?t$J$i$P!"$3$N4X?t$,4i$r0z?t$H$7$F8F$P$l$^$9!#$b\e(B
-\e$B$7\e(B @code{gnus-article-x-face-too-ugly} (\e$B$3$l$O@55,I=8=$G\e(B
-\e$B$9\e(B) \e$B$,\e(B @code{From} \e$BMs$K9gCW$9$l$P!"4i$OI=<($5$l$^$;$s!#\e(BEmacs \e$B$G$N%G%#%U%)\e(B
-\e$B%k%H$NF0:n$O\e(B @code{display} \e$B%W%m%0%i\e(B
-\e$B%`\e(B @footnote{@code{display} \e$B$O\e(B ImageMagick \e$B%Q%C%1!<%8$K4^$^$l$F$$$^$9!#\e(B
-@code{uncompface} \e$B$H\e(B @code{icontopbm} \e$B$NN>%W%m%0%i%`$K$D$$$F$O!"\e(B
-`compface' \e$B$d\e(B GNU/Linux \e$B%7%9%F%`$K$*$1$k\e(B `faces-xface' \e$B$N$h$&$J%Q%C%1!<\e(B
-\e$B%8$rC5$7$F2<$5$$!#\e(B} \e$B$r%U%)!<%/$7$F8+$h$&$H$7$^$9!#\e(BXEmacs \e$B$G$N%G%#%U%)%k\e(B
-\e$B%H$NF0:n$O\e(B @code{From} \e$BMs$NA0$K4i$rI=<($7$^$9!#\e(B(XEmacs \e$B$,\e(B X-Face \e$B5!G=IU\e(B
-\e$B$-$G%3%s%Q%$%k$5$l$F$$$k$HNI$$$G$7$g$&!=!=$=$l$OI=<($r>/$7Aa$/$7$^$9!#$b\e(B
-\e$B$7:,K\E*\e(B X-Face \e$B5!G=$,$J$$$N$G$"$l$P!"\e(Bgnus \e$B$O\e(B @code{pbmplus} \e$B$d$=$NCg4V\e(B
-\e$B$N30It%W%m%0%i%`$r;H$C$F\e(B @code{X-Face} \e$BMs$rJQ49$7$h$&$H;n$_$^$9!#\e(B) \e$B$3$N\e(B
-\e$B4X?t$rI=<(%U%C%/$KF~$l$?$$$N$G$"$l$P!"$*$=$i$/$=$l$O:G8e$K$J$k$Y$-$G$7$g\e(B
-\e$B$&!#\e(B(\e$BCm\e(B: \e$BJQ?t\e(B/\e$B4X?tL>$K$O\e(B @code{xface} \e$B$G$O$J$/\e(B @code{x-face} \e$B$,;H$o$l$^\e(B
-\e$B$9!#\e(B)
-
 @item W b
 @kindex W b (\e$B35N,\e(B)
 @findex gnus-article-add-buttons
@@ -7974,6 +7937,18 @@ HZ \e$B$^$?$O\e(B HZP \e$B$r=hM}$7$^$9!#\e(BHZ (\e$B$^$?$O\e(B HZP) \e$B$OCf9q8l$N5-;v$
 @c Verify a signed (PGP, PGP/MIME or S/MIME) message
 @c (@code{gnus-summary-force-verify-and-decrypt}).
 
+@item W u
+@kindex W u (\e$B35N,\e(B)
+@findex gnus-article-treat-unfold-headers
+\e$B@^$jJV$5$l$?%X%C%@!<9T$r0l9T$K$7$^\e(B
+\e$B$9\e(B (@code{gnus-article-treat-unfold-headers})\e$B!#\e(B
+
+@item W n
+@kindex W n (\e$B35N,\e(B)
+@findex gnus-article-treat-fold-newsgroups
+@code{Newsgroups} \e$B$H\e(B @code{Followup-To} \e$B%X%C%@!<$r@^$jJV$7$^\e(B
+\e$B$9\e(B (@code{gnus-article-treat-fold-newsgroups})\e$B!#\e(B
+
 @item W W H
 @kindex W W H (\e$B35N,\e(B)
 @findex gnus-article-strip-headers-from-body
@@ -8187,6 +8162,58 @@ 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
 \e$B<+F0E*$K9%$`=q<0$GF|IU$rI=<($9$kJ}K!$O\e(B @xref{Customizing Articles} \e$B$r;2\e(B
 \e$B>H$7$F2<$5$$!#\e(B
 
+@node Article Display
+@subsection Article Display
+@cindex picons
+@cindex x-face
+@cindex smileys
+
+\e$B$3$l$i$N%3%^%s%I$O!"$$$m$s$J<h$k$KB-$i$J$$%.%_%C%/\e(B (gimmicks) \e$B$NI=<($r!"\e(B
+\e$B$=$l$i$r%5%]!<%H$7$F$$$k\e(B Emacs \e$B$N5-;v%P%C%U%!$KDI2C$7$^$9!#\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
+
+\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$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
+
+@table @kbd
+@item W D x
+@kindex W D x (\e$B35N,\e(B)
+@findex gnus-article-display-x-face
+@code{X-Face} \e$B$r\e(B @code{From} \e$B%X%C%@!<$KI=<($7$^\e(B
+\e$B$9\e(B (@code{gnus-article-display-x-face})\e$B!#\e(B
+
+@item W D s
+@kindex W D s (\e$B35N,\e(B)
+@findex gnus-article-toggle-smiley
+\e$B%9%^%$%j!<$NI=<($r%H%0%k$7$^$9\e(B (@code{gnus-article-toggle-smiley})\e$B!#\e(B
+
+@item W D f
+@kindex W D f (\e$B35N,\e(B)
+@findex gnus-treat-from-picon
+@code{From} \e$B%X%C%@!<$r\e(B Picon \e$B2=$7$^$9\e(B (@code{gnus-treat-from-picon})\e$B!#\e(B
+
+@item W D m
+@kindex W D m (\e$B35N,\e(B)
+@findex gnus-treat-mail-picon
+\e$B$9$Y$F$N%a!<%k%X%C%@!<\e(B (\e$B$9$J$o$A\e(B @code{Cc}\e$B!"\e(B@code{To}) \e$B$r\e(B Picon \e$B2=$7$^\e(B
+\e$B$9\e(B (@code{gnus-treat-mail-picon})\e$B!#\e(B
+
+@item W D n
+@kindex W D n (\e$B35N,\e(B)
+@findex gnus-treat-newsgroups-picon
+\e$B$9$Y$F$N%K%e!<%9%X%C%@!<\e(B (\e$B$9$J$o\e(B
+\e$B$A\e(B @code{Newsgroups} \e$B$H\e(B @code{Followup-To}) \e$B$r\e(B Picon \e$B2=$7$^\e(B
+\e$B$9\e(B (@code{gnus-treat-from-picon})\e$B!#\e(B
+@end table
+
 @node Article Signature
 @subsection \e$B5-;v$N=pL>\e(B
 @cindex signatures
@@ -8615,6 +8642,13 @@ Line Formatting})\e$B!#%G%#%U%)%k%H$O\e(B @samp{Gnus: %%b %S %Z} \e$B$G$9!#;HMQ2DG=
 \e$B$=$NNY$KI=<($5$l$F$$$k$9$Y$F$N%&%#%s%I%&$NBg$-$5$rJQ99$9$k;v$KCm0U$7$F$/\e(B
 \e$B$@$5$$!#\e(B
 
+\e$B0J2<$N%U%C%/$rDI2C$7$F!"$$$D$G$bLZ%&%#%s%I%&$r:G>.2=$7$F$bNI$$$G$7$g$&!#\e(B
+
+@lisp
+(add-hook 'gnus-configure-windows-hook
+          'gnus-tree-perhaps-minimize)
+@end lisp
+
 @item gnus-generate-tree-function
 @vindex gnus-generate-tree-function
 @findex gnus-generate-horizontal-tree
@@ -9644,6 +9678,12 @@ 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,
 @item gnus-treat-strip-trailing-blank-lines (t, last, integer)
 @item gnus-treat-translate
 @item gnus-treat-x-pgp-sig (head)
+@item gnus-treat-from-picon (head)
+@item gnus-treat-mail-picon (head)
+@item gnus-treat-newsgroups-picon (head)
+@item gnus-treat-unfold-headers (head)
+@item gnus-treat-fold-newsgroups (head)
+@item gnus-treat-body-boundary (head)
 @item gnus-treat-decode-article-as-default-mime-charset
 @end table
 
@@ -15700,9 +15740,9 @@ $ emacs -batch -l ~/.gnus.el -f gnus-agent-batch-fetch
 
 @item J S
 @kindex J S (\e$B%(!<%8%'%s%H\e(B \e$B%0%k!<%W\e(B)
-@findex gnus-group-send-drafts
-\e$B2<=q$-%0%k!<%W$K$"$kAw?.2DG=$J%a%C%;!<%8$rA4$FAw?.$9\e(B
-\e$B$k\e(B (@code{gnus-group-send-drafts})\e$B!#\e(B@xref{Drafts}.
+@findex gnus-group-send-queue
+\e$B2<=q$-\e(B (queue) \e$B%0%k!<%W$K$"$kAw?.2DG=$J%a%C%;!<%8$rA4$FAw?.$9\e(B
+\e$B$k\e(B (@code{gnus-group-send-queue})\e$B!#\e(B@xref{Drafts}\e$B!#\e(B
 
 @item J a
 @kindex J a (\e$B%(!<%8%'%s%H\e(B \e$B%0%k!<%W\e(B)
@@ -17846,8 +17886,7 @@ Gnus \e$B$O0lF|$K0l2s%9%3%"$rIeGT$5$;$h$&$H$7$^$9!#Nc$($P!"$b$7\e(B gnus \e$B$r;MF|
 * NoCeM::                       Spam \e$B$dB>$NB@$j$d$9$$?);v$rHr$1$kJ}K!\e(B
 * Undo::                        \e$B$$$/$D$+$NF0:n$O85$KLa$9;v$,$G$-$k\e(B
 * Moderation::                  \e$B$"$J$?$,%b%G%l!<%?!<$@$C$?$i$I$&$9$k$+\e(B
-* XEmacs Enhancements::         XEmacs \e$B$G$O$b$C$H3($d$=$NB>$N$b$N$,B8:_\e(B
-                                \e$B$9$k\e(B
+* Image Enhancements::          \e$B:G?7$N\e(B Emacs/XEmacs \e$B$O3($rI=<($G$-$k\e(B
 * Fuzzy Matching::              \e$BBg$-$JLJLS$C$F2?\e(B?
 * Thwarting Email Spam::        \e$BM>7W$J>&6HE*EE;R%a!<%k$rHr$1$kJ}K!\e(B
 * Various Various::             \e$BK\Ev$K$$$m$$$m$J$b$N\e(B
@@ -19019,19 +19058,18 @@ Gnus \e$B$O!"MxMQ<T$,2?$r$9$k$+$r21$($F$*$-!"$=$NMxMQ<T$NF0:n$N5U$r9T$J$&F0\e(B
       "^nnml:rec.zoofle$\\|^rec.zoofle$")
 @end lisp
 
-@node XEmacs Enhancements
-@section XEmacs \e$B3HD%\e(B
-@cindex XEmacs
+@node Image Enhancements
+@section \e$B2hA|$N3HD%\e(B
 
-XEmacs \e$B$O3($d$=$NB>$N$b$N$rI=<($9$k$3$H$,$G$-$k$N$G!"\e(Bgnus \e$B$O$3$l$rMxMQ$9\e(B
-\e$B$k$3$H$K$7$^$9!#\e(B
+XEmacs\e$B!"$=$l$K\e(B Emacs 21 \e$B$O3($d$=$NB>$N$b$N$rI=<($9$k$3$H$,$G$-$k$N$G!"\e(B
+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
-* Smileys::                     \e$BI=<($5$l$k$Y$/@8$^$l$?9,$;$=$&$J4i$rI=<(\e(B
-                                \e$B$9$kJ}K!\e(B
-* Toolbar::                     \e$B%/%j%C%/1n\e(B
-* XVarious::                    \e$B$=$NB>$N\e(B XEmacs \e$B$G\e(B Gnus \e$B$JJQ?t\e(B
+* Picons::     \e$B$"$J$?$,FI$s$G$$$k$b$N$N3($rI=<($9$kJ}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
+* Toolbar::    \e$B%/%j%C%/1n\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
@@ -19093,6 +19131,10 @@ Steve Kinzler \e$B$N\e(B picon \e$B8!:w%(%s%8%s$r;H$&$3$H$,$G$-$^$9!#\e(B
 \e$B$@$5$$!#\e(BGnus \e$B$O\e(B picons \e$B$,\e(B @code{gnus-picons-database} \e$B$G<($5$l$k>l=j$K%$\e(B
 \e$B%s%9%H!<%k$7$F$"$k$b$N$H4|BT$7$^$9!#\e(B
 
+\e$B$b$7$"$J$?$,\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
+
 @node Picon Requirements
 @subsubsection Picon \e$B$NF0:n>r7o\e(B
 
@@ -19364,6 +19406,53 @@ Gnus \e$B$r=*N;$9$k$H$-$K\e(B picon \e$B%-%c%C%7%e$r>C$75n$k$+$I$&$+!#\e(BGnus \e$B$O
 \e$B%^%&%9$G6/D4I=<($7$?$H$-$N4i!#\e(B
 @end table
 
+@node X-Face
+@subsection X-Face
+@cindex x-face
+
+@code{X-Face} \e$B%X%C%@!<$O!"%a%C%;!<%8$NCx<T$rI=$o$9$3$H$K$J$C$F$$$k\e(B 48\e$B!_\e(B
+48 \e$B2hAG$NGr9u$N3($rIA$-$^$9!#$3$l$O?J2=$7B3$1$k$"$^$?$N%a!<%k$H%K%e!<%9\e(B
+\e$B%j!<%@!<$K$h$C$F%5%]!<%H$5$l$k$G$7$g$&!#\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
+@iflatex
+\include{xface}
+@end iflatex
+@end iftex
+@c @anchor{X-Face}
+
+@code{X-Face} \e$B%X%C%@!<$NI|9f$K$O!"\e(BEmacs \e$B$,\e(B @samp{compface} \e$B$r%5%]!<\e(B
+\e$B%H\e(B (XEmacs \e$B$N$[$H$s$I$,%5%]!<%H\e(B) \e$B$7$F$$$k$+!"$"$J$?$N%7%9%F%`\e(B
+\e$B$K\e(B @samp{compface} \e$B$,%$%s%9%H!<%k$5$l$F$$$kI,MW$,$"$j$^$9!#$b$7$I$A$i$+\e(B
+\e$B$,??$J$i$P!"\e(Bgnus \e$B$O%G%#%U%)%k%H$G\e(B @code{X-Face} \e$B%X%C%@!<$rI=<($7$^$9!#\e(B
+
+\e$B$3$l$r@)8f$9$k$N$OJQ?t\e(B @code{gnus-article-x-face-command} \e$B$G$9!#$3$NJQ?t\e(B
+\e$B$,J8;zNs$J$i$P!"$3$NJ8;zNs$,%5%V%7%'%k$G<B9T$5$l$^$9!#4X?t$J$i$P!"$3$N4X\e(B
+\e$B?t$,4i$r0z?t$H$7$F8F$P$l$^$9!#$b\e(B
+\e$B$7\e(B @code{gnus-article-x-face-too-ugly} (\e$B$3$l$O@55,I=8=$G\e(B
+\e$B$9\e(B) \e$B$,\e(B @code{From} \e$BMs$K9gCW$9$l$P!"4i$OI=<($5$l$^$;$s!#\e(B
+
+Emacs 20 \e$B$G$N%G%#%U%)%k%H$NF0:n$O\e(B @code{display} \e$B%W%m%0%i\e(B
+\e$B%`\e(B @footnote{@code{display} \e$B$O\e(B ImageMagick \e$B%Q%C%1!<%8$K4^$^$l$F$$$^$9!#\e(B
+@code{uncompface} \e$B$H\e(B @code{icontopbm} \e$B$NN>%W%m%0%i%`$K$D$$$F$O!"\e(B
+`compface' \e$B$d\e(B GNU/Linux \e$B%7%9%F%`$K$*$1$k\e(B `faces-xface' \e$B$N$h$&$J%Q%C%1!<\e(B
+\e$B%8$rC5$7$F2<$5$$!#\e(B} \e$B$r%U%)!<%/$7$F8+$h$&$H$7$^$9!#\e(B
+
+XEmacs \e$B$+@E;_2h$r%5%]!<%H$7$F$$$k\e(B Emacs 21+ \e$B$G$N%G%#%U%)%k%H$NF0:n\e(B
+\e$B$O\e(B @code{From} \e$BMs$NA0$K4i$rI=<($9$k$3$H$G$9!#\e(B(XEmacs \e$B$,\e(B X-Face \e$B5!G=IU$-\e(B
+\e$B$G%3%s%Q%$%k$5$l$F$$$k$HNI$$$G$7$g$&!=!=$=$l$OI=<($r>/$7Aa$/$7$^$9!#$b$7\e(B
+\e$B:,K\E*\e(B X-Face \e$B5!G=$,$J$$$N$G$"$l$P!"\e(Bgnus \e$B$O\e(B @code{pbmplus} \e$B$d$=$NCg4V$N\e(B
+\e$B30It%W%m%0%i%`$r;H$C$F\e(B @code{X-Face} \e$BMs$rJQ49$7$h$&$H;n$_$^$9\e(B @footnote{
+GNU/Linux \e$B%7%9%F%`$G$O\e(B @code{netpbm}\e$B!"\e(B@code{libgr-progs} \e$B$^$?\e(B
+\e$B$O\e(B @code{compface} \e$B$N$h$&$JL>A0$N%Q%C%1!<%8$rC5$7$F2<$5$$!#\e(B}\e$B!#\e(B)
+
+(\e$BCm\e(B: \e$BJQ?t\e(B/\e$B4X?tL>$K$O\e(B @code{xface} \e$B$G$O$J$/\e(B @code{x-face} \e$B$,;H$o$l$^$9!#\e(B)
+
 @node Toolbar
 @subsection \e$B%D!<%k%P!<\e(B
 
@@ -19698,6 +19787,7 @@ but at the common table.@*
 @chapter \e$BIUO?\e(B
 
 @menu
+* XEmacs::                      XEmacs \e$B$G%$%s%9%H!<%k$9$k$?$a$NMW7o\e(B
 * History::                     \e$B$I$&$d$C$F\e(B gnus \e$B$,:#F|$N$h$&$K$J$C$?$+\e(B
 * On Writing Manuals::          \e$B$J$<$3$l$,=i?4<TMQ$N0FFb$G$J$$$+\e(B
 * Terminology::                 \e$B2f!9$OK\Ev$KFq$7$$!"8l$N$h$&$J8l$r;H$&\e(B
@@ -19709,6 +19799,17 @@ but at the common table.@*
 * Frequently Asked Questions::
 @end menu
 
+@node XEmacs
+@section XEmacs
+@cindex XEmacs
+@cindex Installing under XEmacs
+
+XEmacs \e$B$O%Q%C%1!<%8$N=/=8$H$7$FG[I[$5$l$F$$$^$9!#\e(Bgnus \e$B$N\e(B XEmacs \e$B%Q%C%1!<\e(B
+\e$B%8$,I,MW$H$9$k$b$N$O2?$G$"$l!"$"$J$?$O%$%s%9%H!<%k$9$Y$-$G$9!#:#$N$H$3$m\e(B
+\e$BI,MW$J$N$O\e(B @samp{gnus}\e$B!"\e(B@samp{w3}\e$B!"\e(B@samp{mh-e}\e$B!"\e(B@samp{mailcrypt}\e$B!"\e(B
+@samp{rmail}\e$B!"\e(B@samp{eterm}\e$B!"\e(B@samp{mail-lib}\e$B!"\e(B@samp{xemacs-base} \e$B$*$h$S\e(B
+@samp{fsf-compat} \e$B$G$9!#\e(B
+
 @node History
 @section \e$BNr;K\e(B
 
index 953e4d7..9f55fd7 100644 (file)
@@ -812,7 +812,7 @@ Various
 * NoCeM::                       How to avoid spam and other fatty foods.
 * Undo::                        Some actions can be undone.
 * Moderation::                  What to do if you're a moderator.
-* XEmacs Enhancements::         There are more pictures and stuff under XEmacs.
+* Image Enhancements::          There are more pictures and stuff under XEmacs.
 * Fuzzy Matching::              What's the big fuzz?
 * Thwarting Email Spam::        A how-to on avoiding unsolicited commercial email.
 * Various Various::             Things that are really various.
@@ -2072,44 +2072,35 @@ be fetched.
 
 @vindex gnus-select-group-hook
 @vindex gnus-auto-select-first
-@code{gnus-auto-select-first} control whether any articles are selected
+If @code{gnus-auto-select-first} is non-@code{nil}, select an article
 automatically when entering a group with the @kbd{SPACE} command.
+Which article this is is controlled by the
+@code{gnus-auto-select-subject} variable.  Valid values for this
+variable is:
 
 @table @code
 
-@item nil
-Don't select any articles when entering the group.  Just display the
-full summary buffer.
-
-@item t
-Select the first unread article when entering the group.
-
-@item best
-Select the highest scored article in the group when entering the
-group.
-
-@end table
+@item unread
+Place point on the subject line of the first unread article.
 
-This variable can also be a function.  In that case, that function will
-be called to place point on a subject line, and/or select some article.
-Useful functions include:
+@item first
+Place point on the subject line of the first article.
 
-@table @code
-@item gnus-summary-first-unread-subject
-Place point on the subject line of the first unread article, but
-don't select the article.
+@item unseen
+Place point on the subject line of the first unseen article.
 
-@item gnus-summary-first-unread-article
-Select the first unread article.
+@item best
+Place point on the subject line of the highest-scored unread article.
 
-@item gnus-summary-best-unread-article
-Select the highest-scored unread article.
 @end table
 
+This variable can also be a function.  In that case, that function
+will be called to place point on a subject line.  
 
 If you want to prevent automatic selection in some group (say, in a
-binary group with Huge articles) you can set this variable to @code{nil}
-in @code{gnus-select-group-hook}, which is called when a group is
+binary group with Huge articles) you can set the
+@code{gnus-auto-select-first} variable to @code{nil} in
+@code{gnus-select-group-hook}, which is called when a group is
 selected.
 
 
@@ -3880,7 +3871,7 @@ for group to post to.  @xref{Composing Messages}.
 This function actually prepares a news even when using mail groups.
 This is useful for "posting" messages to mail groups without actually
 sending them over the network: they're just saved directly to the group
-in question.  The corresponding backend must have a request-post method
+in question.  The corresponding back end must have a request-post method
 for this to work though.
 
 @end table
@@ -4753,8 +4744,9 @@ Go to the first unread article
 @kindex G b (Summary)
 @kindex , (Summary)
 @findex gnus-summary-best-unread-article
-Go to the article with the highest score
-(@code{gnus-summary-best-unread-article}).
+Go to the unread article with the highest score
+(@code{gnus-summary-best-unread-article}).  If given a prefix argument,
+go to the first unread article that has a score over the default score.
 
 @item G l
 @itemx l
@@ -5002,7 +4994,7 @@ prefix is 1, prompt for a group to post to.
 This function actually prepares a news even when using mail groups.
 This is useful for "posting" messages to mail groups without actually
 sending them over the network: they're just saved directly to the group
-in question.  The corresponding backend must have a request-post method
+in question.  The corresponding back end must have a request-post method
 for this to work though.
 
 @item S D b
@@ -5290,17 +5282,17 @@ calculates the deadline of the message and stores it in the
 @code{nndraft:delayed} group.
 
 And whenever you get new news, Gnus looks through the group for articles
-which are due and sends them.  It uses the @code{gnus-delay-send-drafts}
+which are due and sends them.  It uses the @code{gnus-delay-send-queue}
 function for this.  By default, this function is added to the hook
 @code{gnus-get-new-news-hook}.  But of course, you can change this.
 Maybe you want to use the demon to send drafts?  Just tell the demon to
-execute the @code{gnus-delay-send-drafts} function.
+execute the @code{gnus-delay-send-queue} function.
 
 @table @code
 @item gnus-delay-initialize
 @findex gnus-delay-initialize
 By default, this function installs the @kbd{C-c C-j} key binding in
-Message mode and @code{gnus-delay-send-drafts} in
+Message mode and @code{gnus-delay-send-queue} in
 @code{gnus-get-new-news-hook}.  But it accepts two optional arguments,
 @code{no-keymap} and @code{no-check}.  If @code{no-keymap} is non-nil,
 the @kbd{C-c C-j} binding is not intalled.  If @code{no-check} is
@@ -7553,14 +7545,15 @@ writing, so there are tons of functions and variables to make reading
 these articles easier.
 
 @menu
-* Article Highlighting::        You want to make the article look like fruit salad.
-* Article Fontisizing::         Making emphasized text look nice.
-* Article Hiding::              You also want to make certain info go away.
-* Article Washing::             Lots of way-neat functions to make life better.
-* Article Buttons::             Click on URLs, Message-IDs, addresses and the like.
-* Article Date::                Grumble, UT!
-* Article Signature::           What is a signature?
-* Article Miscellania::         Various other stuff.
+* Article Highlighting::    You want to make the article look like fruit salad.
+* Article Fontisizing::     Making emphasized text look nice.
+* Article Hiding::          You also want to make certain info go away.
+* Article Washing::         Lots of way-neat functions to make life better.
+* Article Buttons::         Click on URLs, Message-IDs, addresses and the like.
+* Article Date::            Grumble, UT!
+* Article Display::         Display various stuff---X-Face, Picons, Smileys
+* Article Signature::       What is a signature?
+* Article Miscellania::     Various other stuff.
 @end menu
 
 
@@ -8049,41 +8042,6 @@ in question has a @code{Content-Type} header that says that this type
 has been done.
 If a prefix is given, a charset will be asked for.
 
-@item W f
-@kindex W f (Summary)
-@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
-@iflatex
-\include{xface}
-@end iflatex
-@end iftex
-@c @anchor{X-Face}
-Look for and display any X-Face headers
-(@code{gnus-article-display-x-face}).  The command executed by this
-function is given by the @code{gnus-article-x-face-command} variable.
-If this variable is a string, this string will be executed in a
-sub-shell.  If it is a function, this function will be called with the
-face as the argument.  If the @code{gnus-article-x-face-too-ugly} (which
-is a regexp) matches the @code{From} header, the face will not be shown.
-The default action under Emacs is to fork off the @code{display}
-program@footnote{@code{display} is from the ImageMagick package.  For
-the @code{uncompface} and @code{icontopbm} programs look for a package
-like `compface' or `faces-xface' on a GNU/Linux system.}  to view the
-face.  Under XEmacs or Emacs 21+ with suitable image support, the
-default action is to display the face before the @code{From} header.
-(It's nicer if XEmacs has been compiled with X-Face support---that will
-make display somewhat faster.  If there's no native X-Face support, Gnus
-will try to convert the @code{X-Face} header using external programs
-from the @code{pbmplus} package and friends.@footnote{On a GNU/Linux
-system look for packages with names like @code{netpbm} or
-@code{libgr-progs}.})  If you want to have this function in the display
-hook, it should probably come last.
-(NOTE: @code{x-face} is used in the variable/function names, not @code{xface}).
-
 @item W b
 @kindex W b (Summary)
 @findex gnus-article-add-buttons
@@ -8112,6 +8070,17 @@ message.@footnote{PGP keys for many hierarchies are available at
 Verify a signed (PGP, PGP/MIME or S/MIME) message
 (@code{gnus-summary-force-verify-and-decrypt}).
 
+@item W u
+@kindex W u (Summary)
+@findex gnus-article-treat-unfold-headers
+Unfold folded header lines (@code{gnus-article-treat-unfold-headers}).
+
+@item W n
+@kindex W n (Summary)
+@findex gnus-article-treat-fold-newsgroups
+Fold the @code{Newsgroups} and @code{Followup-To} headers
+(@code{gnus-article-treat-fold-newsgroups}).
+
 @item W W H
 @kindex W W H (Summary)
 @findex gnus-article-strip-headers-from-body
@@ -8340,6 +8309,61 @@ that the article was posted in 1854.  Although something like that is
 preferred format automatically.
 
 
+@node Article Display
+@subsection Article Display
+@cindex picons
+@cindex x-face
+@cindex smileys
+
+These commands add various frivolous display gimmics to the article
+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}).
+
+Smileys are those little @samp{:-)} symbols that people like to litter
+their messages with (@pxref{Smileys}).
+
+All these functions are toggles--if the elements already exist,
+they'll be removed.
+
+@table @kbd
+@item W D x
+@kindex W D x (Summary)
+@findex gnus-article-display-x-face
+Display an @code{X-Face} in the @code{From} header.
+(@code{gnus-article-display-x-face}).
+
+@item W D s
+@kindex W D s (Summary)
+@findex gnus-article-toggle-smiley
+Toggle whether to display smileys
+(@code{gnus-article-toggle-smiley}).
+
+@item W D f
+@kindex W D f (Summary)
+@findex gnus-treat-from-picon
+Piconify the @code{From} header (@code{gnus-treat-from-picon}).
+
+@item W D m
+@kindex W D m (Summary)
+@findex gnus-treat-mail-picon
+Piconify all mail headers (i. e., @code{Cc}, @code{To})
+(@code{gnus-treat-mail-picon}).
+
+@item W D n
+@kindex W D n (Summary)
+@findex gnus-treat-newsgroups-picon
+Piconify all news headers (i. e., @code{Newsgroups} and
+@code{Followup-To}) (@code{gnus-treat-from-picon}).
+
+@end table
+
+
+
 @node Article Signature
 @subsection Article Signature
 @cindex signatures
@@ -9067,6 +9091,14 @@ have several windows displayed side-by-side in a frame and the tree
 buffer is one of these, minimizing the tree window will also resize all
 other windows displayed next to it.
 
+You may also wish to add the following hook to keep the window minimized
+at all times:
+
+@lisp
+(add-hook 'gnus-configure-windows-hook
+          'gnus-tree-perhaps-minimize)
+@end lisp
+
 @item gnus-generate-tree-function
 @vindex gnus-generate-tree-function
 @findex gnus-generate-horizontal-tree
@@ -10131,6 +10163,12 @@ possible but those listed are probably sufficient for most people.
 @item gnus-treat-strip-trailing-blank-lines (t, last, integer)
 @item gnus-treat-translate
 @item gnus-treat-x-pgp-sig (head)
+@item gnus-treat-from-picon (head)
+@item gnus-treat-mail-picon (head)
+@item gnus-treat-newsgroups-picon (head)
+@item gnus-treat-unfold-headers (head)
+@item gnus-treat-fold-newsgroups (head)
+@item gnus-treat-body-boundary (head)
 @item gnus-treat-decode-article-as-default-mime-charset
 @end table
 
@@ -13073,17 +13111,17 @@ change the expiry period (@pxref{Group Parameters}).
 
 @vindex nnmail-expiry-target
 The normal action taken when expiring articles is to delete them.
-However, in some circumstances it might make more sense to move them to
-other groups instead of deleting them.  The variable @code{nnmail-expiry-target}
-(and the @code{expiry-target} group parameter) controls this.  The
-variable supplies a default value for all groups, which can be
-overridden for specific groups by the group parameter.
-default value is @code{delete}, but this can also be a string (which
-should be the name of the group the message should be moved to), or a
-function (which will be called in a buffer narrowed to the message in
-question, and with the name of the group being moved from as its
-parameter) which should return a target -- either a group name or
-@code{delete}.
+However, in some circumstances it might make more sense to move them
+to other groups instead of deleting them.  The variable
+@code{nnmail-expiry-target} (and the @code{expiry-target} group
+parameter) controls this.  The variable supplies a default value for
+all groups, which can be overridden for specific groups by the group
+parameter.  default value is @code{delete}, but this can also be a
+string (which should be the name of the group the message should be
+moved to), or a function (which will be called in a buffer narrowed to
+the message in question, and with the name of the group being moved
+from as its parameter) which should return a target -- either a group
+name or @code{delete}.
 
 Here's an example for specifying a group name:
 @lisp
@@ -16066,9 +16104,9 @@ Fetch all eligible articles in all groups
 
 @item J S
 @kindex J S (Agent Group)
-@findex gnus-group-send-drafts
-Send all sendable messages in the draft group
-(@code{gnus-group-send-drafts}).  @xref{Drafts}.
+@findex gnus-group-send-queue
+Send all sendable messages in the queue group
+(@code{gnus-group-send-queue}).  @xref{Drafts}.
 
 @item J a
 @kindex J a (Agent Group)
@@ -18194,24 +18232,24 @@ four days, Gnus will decay the scores four times, for instance.
 @chapter Various
 
 @menu
-* Process/Prefix::              A convention used by many treatment commands.
-* Interactive::                 Making Gnus ask you many questions.
-* Symbolic Prefixes::           How to supply some Gnus functions with options.
-* Formatting Variables::        You can specify what buffers should look like.
-* Window Layout::               Configuring the Gnus buffer windows.
-* Faces and Fonts::             How to change how faces look.
-* Compilation::                 How to speed Gnus up.
-* Mode Lines::                  Displaying information in the mode lines.
-* Highlighting and Menus::      Making buffers look all nice and cozy.
-* Buttons::                     Get tendinitis in ten easy steps!
-* Daemons::                     Gnus can do things behind your back.
-* NoCeM::                       How to avoid spam and other fatty foods.
-* Undo::                        Some actions can be undone.
-* Moderation::                  What to do if you're a moderator.
-* XEmacs Enhancements::         There are more pictures and stuff under XEmacs.
-* Fuzzy Matching::              What's the big fuzz?
-* Thwarting Email Spam::        A how-to on avoiding unsolicited commercial email.
-* Various Various::             Things that are really various.
+* Process/Prefix::          A convention used by many treatment commands.
+* Interactive::             Making Gnus ask you many questions.
+* Symbolic Prefixes::       How to supply some Gnus functions with options.
+* Formatting Variables::    You can specify what buffers should look like.
+* Window Layout::           Configuring the Gnus buffer windows.
+* Faces and Fonts::         How to change how faces look.
+* Compilation::             How to speed Gnus up.
+* Mode Lines::              Displaying information in the mode lines.
+* Highlighting and Menus::  Making buffers look all nice and cozy.
+* Buttons::                 Get tendinitis in ten easy steps!
+* Daemons::                 Gnus can do things behind your back.
+* NoCeM::                   How to avoid spam and other fatty foods.
+* Undo::                    Some actions can be undone.
+* Moderation::              What to do if you're a moderator.
+* Image Enhancements::      Modern versions of Emacs/XEmacs can display images.
+* Fuzzy Matching::          What's the big fuzz?
+* Thwarting Email Spam::    A how-to on avoiding unsolicited commercial email.
+* Various Various::         Things that are really various.
 @end menu
 
 
@@ -19442,18 +19480,18 @@ To use moderation mode in these two groups, say:
 @end lisp
 
 
-@node XEmacs Enhancements
-@section XEmacs Enhancements
-@cindex XEmacs
+@node Image Enhancements
+@section Image Enhancements
 
-XEmacs is able to display pictures and stuff, so Gnus has taken
-advantage of that.
+XEmacs, as well as Emacs 21, is able to display pictures and stuff, so
+Gnus has taken advantage of that.
 
 @menu
-* Picons::                      How to display pictures of what your reading.
-* Smileys::                     Show all those happy faces the way they were meant to be shown.
-* Toolbar::                     Click'n'drool.
-* XVarious::                    Other XEmacsy Gnusey variables.
+* 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.
+* Toolbar::    Click'n'drool.
+* XVarious::   Other XEmacsy Gnusey variables.
 @end menu
 
 
@@ -19513,6 +19551,9 @@ obtaining and installing the picons databases, point your Web browser at @*
 picons to be installed into a location pointed to by
 @code{gnus-picons-database}.
 
+If you are using Debian GNU/Linux, saying @samp{apt-get install
+picons.*} will install the picons where Gnus can find them.
+
 
 @node Picon Requirements
 @subsubsection Picon Requirements
@@ -19794,6 +19835,57 @@ Face used for mouse highlighting over the smiley face.
 @end table
 
 
+@node X-Face
+@subsection X-Face
+@cindex x-face
+
+@code{X-Face} headers describe a 48x48 pixel black-and-white image
+that's supposed to represent the author of the message.  It seems to
+be supported by an ever-growing number of mail and news 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
+@iflatex
+\include{xface}
+@end iflatex
+@end iftex
+@c @anchor{X-Face}
+
+Decoding an @code{X-Face} header either requires an Emacs that has
+@samp{compface} support (which most XEmacs versions has), or that you
+have @samp{compface} installed on your system.  If either is true,
+Gnus will default to displaying @code{X-Face} headers.
+
+The variable that controls this is the
+@code{gnus-article-x-face-command} variable.  If this variable is a
+string, this string will be executed in a sub-shell.  If it is a
+function, this function will be called with the face as the argument.
+If the @code{gnus-article-x-face-too-ugly} (which is a regexp) matches
+the @code{From} header, the face will not be shown.
+
+The default action under Emacs 20 is to fork off the @code{display}
+program@footnote{@code{display} is from the ImageMagick package.  For
+the @code{uncompface} and @code{icontopbm} programs look for a package
+like @code{compface} or @code{faces-xface} on a GNU/Linux system.}  to
+view the face.
+
+Under XEmacs or Emacs 21+ with suitable image support, the default
+action is to display the face before the @code{From} header.  (It's
+nicer if XEmacs has been compiled with @code{X-Face} support---that
+will make display somewhat faster.  If there's no native @code{X-Face}
+support, Gnus will try to convert the @code{X-Face} header using
+external programs from the @code{pbmplus} package and
+friends.@footnote{On a GNU/Linux system look for packages with names
+like @code{netpbm}, @code{libgr-progs} and @code{compface}.})
+
+(NOTE: @code{x-face} is used in the variable/function names, not
+@code{xface}).
+
+
 @node Toolbar
 @subsection Toolbar
 
@@ -20115,6 +20207,7 @@ but at the common table.@*
 @chapter Appendices
 
 @menu
+* XEmacs::                      Requirements for installing under XEmacs.
 * History::                     How Gnus got where it is today.
 * On Writing Manuals::          Why this is not a beginner's guide.
 * Terminology::                 We use really difficult, like, words here.
@@ -20126,6 +20219,18 @@ but at the common table.@*
 @end menu
 
 
+@node XEmacs
+@section XEmacs
+@cindex XEmacs
+@cindex Installing under XEmacs
+
+XEmacs is distributed as a collection of packages.  You should install
+whatever packages the Gnus XEmacs package requires.  The current
+requirements are @samp{gnus}, @samp{w3}, @samp{mh-e},
+@samp{mailcrypt}, @samp{rmail}, @samp{eterm}, @samp{mail-lib},
+@samp{xemacs-base}, and @samp{fsf-compat}.
+
+
 @node History
 @section History
 
index 3904898..bf7a5f9 100644 (file)
@@ -913,6 +913,9 @@ Message \e$B$O%a%C%;!<%8:n@.ItJ,$K4X$7$F$OHs>o$K@Q6KE*$G$9!#$=$l$O<!$N$h$&$G\e(B
 
 @item message-subject-re-regexp
 @vindex message-subject-re-regexp
+@cindex Aw:
+@cindex Sv:
+@cindex Re:
 \e$B%a%C%;!<%8$X$N1~Ez$O\e(B @samp{Re: } \e$B$G;O$^$j$^$9!#$3$l$O1Q8l\e(B
 \e$B$N\e(B ``response'' \e$B$NN,$G$O\e(B @emph{\e$B$"$j$^$;$s\e(B} \e$B$,!"%i%F%s8l$G!"\e(B``\e$B$=$l$K1~Ez\e(B
 \e$B$7$F\e(B'' (in response to) \e$B$H8@$&0UL#$G$9!#$$$/$D$+$NL53X$NGO</$O$3$N;v<B$r\e(B
@@ -923,6 +926,13 @@ Message \e$B$O%a%C%;!<%8:n@.ItJ,$K4X$7$F$OHs>o$K@Q6KE*$G$9!#$=$l$O<!$N$h$&$G\e(B
 \e$B$J>l9g$O$3$NJQ?t$r$3$l$i$N@\F,8l$K9g$&$h$&$J@55,I=8=$K@_Dj$9$k$G$7$g$&!#\e(B
 \e$B;d<+?H$O!"$=$N$h$&$J5,3J$K=>$o$J$$%a!<%k$O$?$@<N$F5n$C$F$$$k$@$1$G$9!#\e(B
 
+\e$B$3$l$O!"JV;v$r$9$k$H$-$K$3$l$i$N%X%C%@!<$r=hM}$9$kCM$NNc$G$9\e(B:
+
+@lisp
+(setq message-subject-re-regexp
+     "^\\(\\(\\([Rr][Ee]\\|[Ss][Vv]\\|[Aa][Ww]\\): *\\)+\\))
+@end lisp
+
 @item message-alternative-emails
 @vindex message-alternative-emails
 \e$BBe$o$j$N%a!<%k%"%I%l%9$K9gCW$9$k@55,I=8=$G$9!#:G=i$K%^%C%A$7$?\e(B (\e$BBh0l5A$G\e(B
index eeac72f..390ef6e 100644 (file)
@@ -949,6 +949,9 @@ buffers.
 
 @item message-subject-re-regexp
 @vindex message-subject-re-regexp
+@cindex Aw:
+@cindex Sv:
+@cindex Re:
 Responses to messages have subjects that start with @samp{Re: }.  This
 is @emph{not} an abbreviation of the English word ``response'', but is
 Latin, and means ``in response to''.  Some illiterate nincompoops have
@@ -959,6 +962,14 @@ have to deal with users that use these evil tools, in which case you may
 set this variable to a regexp that matches these prefixes.  Myself, I
 just throw away non-compliant mail.
 
+Here's an example of a value to deal with these headers when
+responding to a message:
+
+@lisp
+(setq message-subject-re-regexp
+     "^\\(\\(\\([Rr][Ee]\\|[Ss][Vv]\\|[Aa][Ww]\\): *\\)+\\))
+@end lisp
+
 @item message-alternative-emails
 @vindex message-alternative-emails
 A regexp to match the alternative email addresses.  The first matched