From: yamaoka Date: Mon, 7 Jan 2002 05:13:17 +0000 (+0000) Subject: Synch with the released version of Oort Gnus v0.04. X-Git-Tag: t-gnus-6_15_4-10-quimby~1 X-Git-Url: http://git.chise.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=092c29dcb4682af91a1ad5616cceca540c15cd38;p=elisp%2Fgnus.git- Synch with the released version of Oort Gnus v0.04. All modules will be merged into `t-gnus-6_15' branch, later... --- diff --git a/ChangeLog b/ChangeLog index cd7a520..ead05ae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2002-01-07 Katsumi Yamaoka + + * 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 * lisp/gnus-namazu.el: Update comments. diff --git a/etc/gnus/catchup.xpm b/etc/gnus/catchup.xpm index 832c4eb..cba8497 100644 --- a/etc/gnus/catchup.xpm +++ b/etc/gnus/catchup.xpm @@ -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", -"aaaaaa76;aaaareeeee#rw*", -"&aqqagga@<<<7e7qqqqqq=:u", -"33e4qgggsaa%1Oa&&&gggeae7ggyar=aa=r6 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"}; diff --git a/etc/gnus/cu-exit.xpm b/etc/gnus/cu-exit.xpm index bc051f8..1723622 100644 --- a/etc/gnus/cu-exit.xpm +++ b/etc/gnus/cu-exit.xpm @@ -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: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"}; diff --git a/etc/gnus/describe-group.xpm b/etc/gnus/describe-group.xpm index e191277..7f7ad67 100644 --- a/etc/gnus/describe-group.xpm +++ b/etc/gnus/describe-group.xpm @@ -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 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+"}; diff --git a/etc/gnus/exit-summ.xpm b/etc/gnus/exit-summ.xpm index 00caf53..5234ccb 100644 --- a/etc/gnus/exit-summ.xpm +++ b/etc/gnus/exit-summ.xpm @@ -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 .....", +" .. . . .. ..", +"........................", +"........................", +" .. .. .. .. .. .. .. ..", +"........................", +"........................"}; diff --git a/etc/gnus/followup.xpm b/etc/gnus/followup.xpm index c7cd85a..444895a 100644 --- a/etc/gnus/followup.xpm +++ b/etc/gnus/followup.xpm @@ -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. ", +" .. "}; diff --git a/etc/gnus/fuwo.xpm b/etc/gnus/fuwo.xpm index e860d95..362cbc5 100644 --- a/etc/gnus/fuwo.xpm +++ b/etc/gnus/fuwo.xpm @@ -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. ", +" .. "}; diff --git a/etc/gnus/get-news.xpm b/etc/gnus/get-news.xpm index b9ad760..d7e7b4a 100644 --- a/etc/gnus/get-news.xpm +++ b/etc/gnus/get-news.xpm @@ -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.......", +"........................"}; diff --git a/etc/gnus/gnntg.xpm b/etc/gnus/gnntg.xpm index ea2a723..21bc5f1 100644 --- a/etc/gnus/gnntg.xpm +++ b/etc/gnus/gnntg.xpm @@ -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.. ", +" ........ ", +" .... ... ", +" ... ... "}; diff --git a/etc/gnus/kill-group.xpm b/etc/gnus/kill-group.xpm index de83fd9..1ee4fa4 100644 --- a/etc/gnus/kill-group.xpm +++ b/etc/gnus/kill-group.xpm @@ -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..", +"........................", +"........................"}; diff --git a/etc/gnus/mail-reply.xpm b/etc/gnus/mail-reply.xpm index 92f5dd5..a87f784 100644 --- a/etc/gnus/mail-reply.xpm +++ b/etc/gnus/mail-reply.xpm @@ -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.. ", +" .................... ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/etc/gnus/next-ur.xpm b/etc/gnus/next-ur.xpm index 8c823f2..bea1328 100644 --- a/etc/gnus/next-ur.xpm +++ b/etc/gnus/next-ur.xpm @@ -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@#** 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-<", -"<<<<<<<<;%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..", +"........................", +"........................"}; diff --git a/etc/gnus/prev-ur.xpm b/etc/gnus/prev-ur.xpm index 7c3db24..8013133 100644 --- a/etc/gnus/prev-ur.xpm +++ b/etc/gnus/prev-ur.xpm @@ -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......"}; diff --git a/etc/gnus/reply-wo.xpm b/etc/gnus/reply-wo.xpm index fb45d4c..370678a 100644 --- a/etc/gnus/reply-wo.xpm +++ b/etc/gnus/reply-wo.xpm @@ -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", -"wwwwwwwwww3O8wwww", -"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.. ", +" ...................... ", +" "}; diff --git a/etc/gnus/reply.xpm b/etc/gnus/reply.xpm index 20dd102..a458848 100644 --- a/etc/gnus/reply.xpm +++ b/etc/gnus/reply.xpm @@ -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,;%%%%%%%%%%%%%%%%%%%%>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.. ", +" ...................... ", +" "}; diff --git a/etc/gnus/rot13.xpm b/etc/gnus/rot13.xpm index ad20c8a..6e2d7ac 100644 --- a/etc/gnus/rot13.xpm +++ b/etc/gnus/rot13.xpm @@ -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. ", +" .. ", +" ", +" "}; diff --git a/etc/gnus/save-aif.xpm b/etc/gnus/save-aif.xpm index c8bceb6..f0325ac 100644 --- a/etc/gnus/save-aif.xpm +++ b/etc/gnus/save-aif.xpm @@ -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 "}; diff --git a/etc/gnus/save-art.xpm b/etc/gnus/save-art.xpm index da4158c..fe9726f 100644 --- a/etc/gnus/save-art.xpm +++ b/etc/gnus/save-art.xpm @@ -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. ", +" ............ "}; diff --git a/etc/gnus/subscribe.xpm b/etc/gnus/subscribe.xpm index 62db2da..ff193a9 100644 --- a/etc/gnus/subscribe.xpm +++ b/etc/gnus/subscribe.xpm @@ -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-;;;;;;", -";;;;@;>;=<&&<:<;=< 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 ", +" "}; diff --git a/etc/gnus/uu-decode.xpm b/etc/gnus/uu-decode.xpm index cdadff6..b9d940c 100644 --- a/etc/gnus/uu-decode.xpm +++ b/etc/gnus/uu-decode.xpm @@ -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.++ ", +" +++++++++++++++ ", +" +++++++++++++++ ", +" ", +" "}; diff --git a/etc/gnus/uu-post.xpm b/etc/gnus/uu-post.xpm index b67fa8b..7c4204c 100644 --- a/etc/gnus/uu-post.xpm +++ b/etc/gnus/uu-post.xpm @@ -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..", +"....+++++++++++++@......", +"........................"}; diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a37c8ce..b8ed8f2 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,352 @@ +2002-01-04 Lars Magne Ingebrigtsen + + * gnus-xmas.el (gnus-xmas-create-image): Convert pbm to xbm. + (gnus-xmas-create-image): Take pbm files. + +2002-01-03 Lars Magne Ingebrigtsen + + * 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 + + 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 + + * 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 + + * 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 + + * gnus.el (gnus): Warn if trying to run Gnus un-byte-compiled. + +2001-12-31 Lars Magne Ingebrigtsen + + * 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 + + * imap.el (imap-parse-fetch): Notice empty flags responses. From + Nic Ferrier . + +2001-12-30 ShengHuo ZHU + + * 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 + + * 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 + + * 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 + + * 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 + + * nnrss.el (nnrss-check-group): Find the correct tag, because + xml.el is changed. + +2001-12-30 Lars Magne Ingebrigtsen + + * 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 + + * 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 + + * 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 + + * 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,A|(Bdecke + + * gnus-win.el (gnus-configure-windows): Minimize tree buffer. + +2001-12-29 Lars Magne Ingebrigtsen + + * 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 + + * gnus-sum.el (gnus-summary-limit-to-age): Allow negative days. + +2001-12-29 Lars Magne Ingebrigtsen + + * 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 + + * gnus-art.el (gnus-ignored-headers): Added more headers. + +2001-12-29 Jesper Harder + + * gnus-srvr.el (gnus-browse-foreign-server): Compute the prefix + once. + +2001-12-29 Lars Magne Ingebrigtsen + + * gnus-srvr.el (gnus-server-browse-in-group-buffer): Doc fix. + +2001-12-28 Simon Josefsson + + * gnus-srvr.el (gnus-browse-foreign-server): Fix typo. From + Jesper Harder . + 2001-12-27 Simon Josefsson * gnus-sum.el (gnus-select-newsgroup): Make diff --git a/lisp/compface.el b/lisp/compface.el new file mode 100644 index 0000000..185f949 --- /dev/null +++ b/lisp/compface.el @@ -0,0 +1,57 @@ +;;; compface.el --- functions for converting X-Face headers +;; Copyright (C) 2002 Free Software Foundation, Inc. + +;; Author: Lars Magne Ingebrigtsen +;; 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 diff --git a/lisp/dgnushack.el b/lisp/dgnushack.el index ef06c7a..5ae684b 100644 --- a/lisp/dgnushack.el +++ b/lisp/dgnushack.el @@ -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) diff --git a/lisp/gnus-agent.el b/lisp/gnus-agent.el index 33f14c9..bdab1d6 100644 --- a/lisp/gnus-agent.el +++ b/lisp/gnus-agent.el @@ -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 @@ -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) diff --git a/lisp/gnus-art.el b/lisp/gnus-art.el index 9d89b0a..60768c3 100644 --- a/lisp/gnus-art.el +++ b/lisp/gnus-art.el @@ -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 @@ -148,7 +148,10 @@ "^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 diff --git a/lisp/gnus-cite.el b/lisp/gnus-cite.el index f888492..39c3592 100644 --- a/lisp/gnus-cite.el +++ b/lisp/gnus-cite.el @@ -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) diff --git a/lisp/gnus-delay.el b/lisp/gnus-delay.el index c464e79..c7652da 100644 --- a/lisp/gnus-delay.el +++ b/lisp/gnus-delay.el @@ -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 ;; 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) diff --git a/lisp/gnus-draft.el b/lisp/gnus-draft.el index 9fa69b5..b2fbed5 100644 --- a/lisp/gnus-draft.el +++ b/lisp/gnus-draft.el @@ -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 @@ -183,7 +183,7 @@ (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") diff --git a/lisp/gnus-ems.el b/lisp/gnus-ems.el index 010c325..083a3ba 100644 --- a/lisp/gnus-ems.el +++ b/lisp/gnus-ems.el @@ -234,8 +234,8 @@ "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 index 0000000..34b6f66 --- /dev/null +++ b/lisp/gnus-fun.el @@ -0,0 +1,195 @@ +;;; gnus-fun.el --- various frivoluos extension functions to Gnus +;; Copyright (C) 2002 Free Software Foundation, Inc. + +;; Author: Lars Magne Ingebrigtsen +;; 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 diff --git a/lisp/gnus-group.el b/lisp/gnus-group.el index e85bc8b..afb29cf 100644 --- a/lisp/gnus-group.el +++ b/lisp/gnus-group.el @@ -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 @@ -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] diff --git a/lisp/gnus-int.el b/lisp/gnus-int.el index d3fd3e0..2adb5c1 100644 --- a/lisp/gnus-int.el +++ b/lisp/gnus-int.el @@ -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) diff --git a/lisp/gnus-mailcap.el b/lisp/gnus-mailcap.el index ee15a12..1ddd05b 100644 --- a/lisp/gnus-mailcap.el +++ b/lisp/gnus-mailcap.el @@ -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 diff --git a/lisp/gnus-offline.el b/lisp/gnus-offline.el index fd97d06..a30b47d 100644 --- a/lisp/gnus-offline.el +++ b/lisp/gnus-offline.el @@ -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)) diff --git a/lisp/gnus-picon.el b/lisp/gnus-picon.el index fd62658..a483e58 100644 --- a/lisp/gnus-picon.el +++ b/lisp/gnus-picon.el @@ -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 @@ -25,732 +25,240 @@ ;;; 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: "key = value" -;; 2 - a "

" 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 "" - (regexp-quote name) - " *= * *\\([^ <][^<]*\\) *") - 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 "

[ \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 "
")) - (goto-char (point-min)) - (setq types gnus-picons-file-suffixes) - (while (and types - (not (re-search-forward - (concat "