diff options
-rw-r--r-- | etc/ChangeLog | 4 | ||||
-rw-r--r-- | etc/gnus-logo.eps | 1055 | ||||
-rw-r--r-- | etc/gnus-refcard.tex | 1427 | ||||
-rw-r--r-- | lisp/gnus/ChangeLog | 91 | ||||
-rw-r--r-- | lisp/gnus/gnus-group.el | 6 | ||||
-rw-r--r-- | lisp/gnus/gnus-srvr.el | 19 | ||||
-rw-r--r-- | lisp/gnus/message.el | 3 | ||||
-rw-r--r-- | lisp/gnus/mm-util.el | 30 | ||||
-rw-r--r-- | lisp/gnus/rfc2047.el | 641 | ||||
-rw-r--r-- | man/ChangeLog | 9 | ||||
-rw-r--r-- | man/emacs-mime.texi | 33 | ||||
-rw-r--r-- | man/gnus-faq.texi | 3521 | ||||
-rw-r--r-- | man/message.texi | 2 |
13 files changed, 4675 insertions, 2166 deletions
diff --git a/etc/ChangeLog b/etc/ChangeLog index 5632e1aaf12..4272d50cf2a 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,7 @@ +2005-03-29 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus-refcard.tex, gnus-logo.eps: New files. + 2005-03-23 David Ponce <david@dponce.com> * NEWS: Mention recentf-keep. diff --git a/etc/gnus-logo.eps b/etc/gnus-logo.eps new file mode 100644 index 00000000000..95408ba9af6 --- /dev/null +++ b/etc/gnus-logo.eps @@ -0,0 +1,1055 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: gnuslogo1.ps +%%Creator: XV Version 3.00 Rev: 3/30/93 - by John Bradley +%%BoundingBox: 0 0 493 505 +%%Pages: 1 +%%DocumentFonts: +%%EndComments +%%EndProlog + +%%Page: 1 1 + +% remember original state +/origstate save def + +% build a temporary dictionary +20 dict begin + +% define string to hold a scanline's worth of data +/pix 62 string def + +% lower left corner +0 0 translate + +% size of image (on paper, in 1/72inch coords) +493.0 505.0 scale + +% dimensions of data +493 505 1 + +% mapping matrix +[493 0 0 -505 0 505] + +{currentfile pix readhexstring pop} +image +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff01fffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff8003ffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff0000ffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff8000007ffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff0000003ffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffe0000000ffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffff000000003fff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffff000000000fff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffc0000000007ff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff80000000003ff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff00000000001ff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffe00000000000ff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffc00000000000ff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff8000000000007f8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff0000000000003f8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff0000000000003f8 +fffffffffffffffffffffffffff800ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffe0000000000001f8 +fffffffffffffffffffffffffff0001fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffc0000000000000f8 +ffffffffffffffffffffffffffc00007ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffc0000000000000f8 +ffffffffffffffffffffffffff000001ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff8000000000000078 +fffffffffffffffffffffffffe0000003ffffffffffff0001fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff0000000000000038 +fffffffffffffffffffffffffc0000001fffffffffffe00007ffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffe0000000000000038 +fffffffffffffffffffffffff800000007ffffffffff800001ffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffe0000000000000038 +fffffffffffffffffffffffff000000003fffffffffe0000003fffffffffffffffffffff +fffffffffffffffffffffffffffffffffffc0000000000000018 +ffffffffffffffffffffffffe000000001fffffffff80000000fffffffffffffffffffff +fffffffffffffffffffffffffffffffffffc0000000000000018 +ffffffffffffffffffffffffc000000000ffffffffe000000003ffffffffffffffffffff +fffffffffffffffffffffffffffffffffff80000000000000018 +ffffffffffffffffffffffff80000000007fffffff8000000000ffffffffffffffffffff +fffffffffffffffffffffffffffffffffff80000000000000008 +ffffffffffffffffffffffff00000000003fffffff00000000007fffffffffffffffffff +fffffffffffffffffffffffffffffffffff00000000000000008 +fffffffffffffffffffffffe00000000001ffffffe00000000001fffffffffffffffffff +fffffffffffffffffffffffffffffffffff00000000000000008 +fffffffffffffffffffffffc00000000000ffffff8000000000007ffffffffffffffffff +ffffffffffffffffffffffffffffffffffe00000000000000008 +fffffffffffffffffffffff8000000000007fffff0000000000007ffffffffffffffffff +ffffffffffffffffffffffffffffffffffe00000000000000008 +fffffffffffffffffffffff0000000000001ffffe0000000000000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffc00000000000000000 +ffffffffffffffffffffffe0000000000000ffffc00000000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffc00000000000000000 +ffffffffffffffffffffffc00000000000007fff800000000000001fffffffffffffffff +ffffffffffffffffffffffffffffffffff800000000000000000 +ffffffffffffffffffffff800000000000003fff000000000000000fffffffffffffffff +ffffffffffffffffffffffffffffffffff800000000000000000 +ffffffffffffffffffffff000000000000003fff0000000000000007ffffffffffffffff +ffffffffffffffffffffffffffffffffff000040000000000000 +fffffffffffffffffffffe000000000000000ffe0000000000000001ffffffffffffffff +ffffffffffffffffffffffffffffffffff0007ffc00000000000 +fffffffffffffffffffffc000000000000000ffc0000000000000000ffffffffffffffff +fffffffffffffffffffffffffffffffffe001ffffc0000000000 +fffffffffffffffffffffc0000000000000007fc00000000000000007fffffffffffffff +fffffffffffffffffffffffffffffffffc003ffffe0000000000 +fffffffffffffffffffff80000000000000007f800000000000000003fffffffffffffff +fffffffffffffffffffffffffffffffffc007fffffc000000000 +fffffffffffffffffffff00000000000000001f000000000000000001fffffffffffffff +fffffffffffffffffffffffffffffffff800fffffff000000000 +ffffffffffffffffffffe00000000000000001f000000000000000000fffffffffffffff +fffffffffffffffffffffffffffffffff801fffffff800000000 +ffffffffffffffffffffc00000000000000000e0000000000000000007ffffffffffffff +fffffffffffffffffffffffffffffffff003ffffffff00000000 +ffffffffffffffffffff800000000000000000c0000000000000000003ffffffffffffff +fffffffffffffffffffffffffffffffff007ffffffff00000000 +ffffffffffffffffffff00000000000000000000000000000000000000ffffffffffffff +ffffffffffffffffffffffffffffffffe00fffffffff80000000 +fffffffffffffffffffe00000000000000000000000000000000000000ffffffffffffff +ffffffffffffffffffffffffffffffffe01fffffffffc0000008 +fffffffffffffffffffc000000000000000000000000000000000000007fffffffffffff +ffffffffffffffffffffffffffffffffc03fffffffffc0000008 +fffffffffffffffffff8000000000000000000000000000000000000001fffffffffffff +ffffffffffffffffffffffffffffffffc07ffffffffff0000000 +fff9fffffffffffffff800000fe00000000000000000000000000000001fffffffffffff +ffffffffffffffffffffffffffffffff807ffffffffff0000000 +fff9fffffffffffffff000001ff80000000000000000000000000000000fffffffffffff +ffffffffffffffffffffffffffffffff80fffffffffff0000008 +fff0ffffffffffffffc000007ffc00000000000000000000000000000007ffffffffffff +ffffffffffffffffffffffffffffffff81fffffffffff8000008 +fff0ffffffffffffffc00000fffc00000000000000000000000000000003ffffffffffff +ffffffffffffffffffffffffffffffff01fffffffffff8000008 +ffe07fffffffffffff800001ffff00000000000000000000000000000001ffffffffffff +ffffffffffffffffffffffffffffffff03fffffffffffc000008 +ffe07fffffffffffff00000fffffc0000000000000000000000000000000ffffffffffff +fffffffffffffffffffffffffffffffe03fffffffffffc000008 +ffe03ffffffffffffc00001fffffe00000000000000000000000000000007fffffffffff +fffffffffffffffffffffffffffffffe07fffffffffffe000008 +ffe03ffffffffffff800003ffffff00000000000000000000000000000003fffffffffff +fffffffffffffffffffffffffffffffe07fffffffffffe000008 +ffc03ffffffffffff000007ffffff80000000000000f80000000000000003fffffffffff +fffffffffffffffffffffffffffffffe0ffffffffffffe000008 +ffc01fffffffffffe00001fffffffe000000000000fffe000000000000001fffffffffff +fffffffffffffffffffffffffffffffc0ffffffffffffe000008 +ffc00fffffffffffc00003ffffffff000000000001ffff800000000000000fffffffffff +fffffffffffffffffffffffffffffffc1fffffffffffff000008 +ff800fffffffffff800003ffffffff800000000007ffffc000000000000007ffffffffff +fffffffffffffffffffffffffffffffc3fffffffffffff000008 +ff8007fffffffffe00000fffffffffc0000000001ffffffc00000000000003ffffffffff +fffffffffffffffffffffffffffffff87fffffffffffff000008 +ff8007fffffffffc00000fffffffffe0000000005ffffffe00000000000001ffffffffff +fffffffffffffffffffffffffffffff87fffffffffffff000008 +ff8003fffffffff800001ffffffffff000000000ffffffffc0000000000000ffffffffff +fffffffffffffffffffffffffffffff87fffffffffffff000008 +ff0001fffffffff000003ffffffffffc00000007fffffffff80000000000007fffffffff +fffffffffffffffffffffffffffffff8ffffffffffffff000008 +ff0000ffffffffe000003ffffffffffc0000000ffffffffffc0000000000007fffffffff +fffffffffffffffffffffffffffffffcffffffffffffff000008 +fe00007fffffff800000ffffffffffff0000001ffffffffffe0000000000001fffffffff +ffffffffffffffffffffffffffffe7fdffffffffffffff000008 +fe00007fffffff000001ffffffffffff8000003fffffffffff0000000000001fffffffff +ffffffffffffffffffffffffffffe7fdffffffffffffff000008 +fc00001ffffffc000003ffffffffffffc000007fffffffffffe0000000000007ffffffff +ffffffffffffffffffffffffffffc7ffffffffffffffff000008 +fc00001ffffff0000003ffffffffffffe00000fffffffffffff0000000000007ffffffff +fffffffffeffffffffffffffffff87ffffffffffffffff000008 +f800000fffffe0000007fffffffffffff00000fffffffffffff8000000000003ffffffff +fffffffffcffffffffffffffffff87ffffffffffffffff000008 +f8000003ffff0000000ffffffffffffff80001fffffffffffffc000000000001ffffffff +fffffffff8ffffffffffffffffff07ffffffffffffffff000008 +f8000001fffe0000001ffffffffffffff80001ffffffffffffff000000000000ffffffff +fffffffff8fffffffffffffffffe0fffffffffffffffff000008 +f0000000fff00000003ffffffffffffffc0001ffffffffffffff8000000000007fffffff +fffffffff0fffffffffffffffffe0fffffffffffffffff000018 +e00000001a000000007ffffffffffffffe0003ffffffffffffffc000000000003fffffff +fffffffff0fffffffffffffffffc0fffffffffffffffff000018 +e000000000000000007fffffffffffffff0003ffffffffffffffc000000000003fffffff +ffffffffe0fffffffffffffffffc1fffffffffffffffff000018 +c00000000000000000ffffffffffffffff0007ffffffffffffffe000000000001fffffff +ffffffffe0fffffffffffffffff81fffffffffffffffff000018 +c00000000000000001ffffffffffffffff0007fffffffffffffff0000000000007ffffff +ffffffffc0fffffffffffffffff83fffffffffffffffff000018 +800000000000000007ffffffffffffffff800ffffffffffffffffc000000000003ffffff +ffffffff01fffffffffffffffff03fffffffffffffffff000038 +800000000000000007ffffffffffffffff800ffffffffffffffffe000000000001ffffff +ffffffff01fffffffffffffffff03fffffffffffffffff800038 +00000000000000000fffffffffffffffffc00fffffffffffffffff000000000000ffffff +fffffffe03ffffffffffffffffe07fffffffffffffffff800038 +00000000000000001fffffffffffffffffc01fffffffffffffffff8000000000007fffff +fffffffc03ffffffffffffffffe07fffffffffffffffff800038 +00000000000000003fffffffffffffffffe03fffffffffffffffffc000000000003fffff +fffffff803ffffffffffffffffc07fffffffffffffffff800038 +00000000000000007ffffffffffffffffff03fffffffffffffffffe000000000000fffff +fffffff007ffffffffffffffffc0ffffffffffffffffff800038 +0000000000000000fffffffffffffffffff07ffffffffffffffffff000000000000fffff +fffffff007ffffffffffffffff80ffffffffffffffffff800078 +0000000000000003ffffffffffffffff8ff87ffffffffffffffffff8000000000001ffff +ffffffc00fffffffffffffffff81ffffffffffffffffff800078 +8000000000000007ffffffffffffffff0ff8fffffffffffffffffffc000000000000ffff +ffffffc00fffffffffffffffff01ffffffffffffffffff8000f8 +8000000000000007fffffffffffffffe0ffffffffffffffffffffffe0000000000007fff +ffffff801fffffffffffffffff03ffffffffffffffffff8000f8 +c00000000000001ffffffffffffffffc0fffffffffffffffffffffff0000000000001fff +fffffe001ffffffffffffffffe07ffffffffffffffffff8000f8 +e00000000000007ffffffffffffffff83fffffffffffffffffffffffc0000000000007ff +fffff8003ffffffffffffffffc07ffffffffffffffffff8000f8 +f00000000000007ffffffffffffffff03fffffffffffffffffffffffc0000000000001ff +fffff0003ffffffffffffffff80fffffffffffffffffff8000f8 +f0000000000000fffffffffffffffff07fffffffffffffffffffffffe0000000000000ff +ffffe0003ffffffffffffffff00fffffffffffffffffff8001f8 +f8000000000003ffffffffffffffffe07ffffffffffffffffffffffff00000000000000f +ffff00007fffffffffffffffe01fffffffffffffffffff0001f8 +fc000000000007ffffffffffffffffc07ffffffffffffffffffffffff800000000000007 +fffc00007fffffffffffffffc01fffffffffffffffffff0001f8 +fc000000000007ffffffffffffffffc0fffffffffffffffffffffffff800000000000000 +ffe000007ffffbffffffffff801fffffffffffffffffff0001f8 +fe00000000001fffffffffffffffff03fffffffffffffffffffffffffe00000000000000 +00000000fffff3ffffffffff003fffffffffffffffffff0001f8 +fe00000000003fffffffffffffffff03ffffffffffffffffffffffffff00000000000000 +00000001fffff1fffffffffe003fffffffffffffffffff0003f8 +ff00000000007ffffffffffffffffe03ffffffffffffffffffffffffff00000000000000 +00000001ffffe1fffffffffc007fffffffffffffffffff0003f8 +ff8000000001fffffffffffffffffc07ffffffffffffffffffffffffff80000000000000 +00000003ffffe0fffffffff0007fffffffffffffffffff0003f8 +ffc000000003fffffffffffffffffc0fffffffffffffffffffffffffffc0000000000000 +00000003ffffc0ffffffffe0007fffffffffffffffffff0003f8 +ffe00000000ffffffffffffffffff81fffffffffffffffffffffffffffe0000000000000 +00000007ffffc07fffffff8000ffffffffffffffffffff0003f8 +fff00000003ffffffffffffffffff01ffffffffffffffffffffffffffff0000000000000 +00000007ffff803fffffff0000fffffffffffffffffffe0007f8 +fff8000000ffffffffffffffffffe03ffffffffffffffffffffffffffff8000000000000 +00000007ffff801ffffffc0001fffffffffffffffffffe0007f8 +fffc000001ffffffffffffffffffe07ffffffffffffffffffffffffffffc000000000000 +0000000fffff000ffffff80003fffffffffffffffffffe0007f8 +fffe00000fffffffffffffffffffc07ffffffffffffffffffffffffffffc000000000000 +0000000fffff0007ffffe00003fffffffffffffffffffe0007f8 +ffff80007fffffffffffffffffff80fffffffffffffffffffffffffffffe000000000000 +0000001ffffe0001ffff800007fffffffffffffffffffe000ff8 +ffffe007ffffffffffffffffffff80ffffffffffffffffffffffffffffff000000000000 +0000001ffffe0000fffc000007fffffffffffffffffffe000ff8 +ffffffffffffffffffffffffffff01ffffffffffffffffffffffffffffff800000000000 +0000003ffffe0000000000000ffffffffffffffffffffe000ff8 +fffffffffffffffffffffffffffe03ffffffffffffffffffffffffffffffc00000000000 +0000003ffffc0000000000000ffffffffffffffffffffe000ff8 +fffffffffffffffffffffffffffe03ffffffffffffffffffffffffffffffe00000000000 +0000007ffff80000000000001ffffffffffffffffffffe001ff8 +fffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffff00000000000 +0000007ffff80000000000001ffffffffffffffffffffe001ff8 +fffffffffffffffffffffffffff807fffffffffffffffffffffffffffffff80000000000 +000000fffff80000000000003ffffffffffffffffffffc001ff8 +fffffffffffffffffffffffffff80ffffffffffffffffffffffffffffffffc0000000000 +000003fffff00000000000007ffffffffffffffffffffc001ff8 +fffffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffe0000000000 +000007ffffe00000000000007ffffffffffffffffffffe003ff8 +fffffffffffffffffffffffffff01fffffffffffffffffffffffffffffffff0000000000 +000007ffffe0000000000000fffffffffffffffffffffc003ff8 +ffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffffff8000000000 +00001fffffc0000000000001fffffffffffffffffffffc003ff8 +ffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffffffe000000000 +00001fffffc0000000000003fffffffffffffffffffffc003ff8 +ffffffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffff000000000 +00003fffff80000000000003fffffffffffffffffffffc007ff8 +ffffffffffffffffffffffffff01fffffffffffffffffffffffffffffffffff800000000 +00007fffff80000000000007fffffffffffffffffffffc007ff8 +ffffffffffffffffffffffffff03fffffffffffffffffffffffffffffffffffc00000000 +0000ffffff0000000000000ffffffffffffffffffffffc007ff8 +fffffffffffffffffffffffffe03fffffffffffffffffffffffffffffffffffc00000000 +0001ffffff0000000000001ffffffffffffffffffffffc007ff8 +fffffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffffff00000000 +0003fffffe0000000000001ffffffffffffffffffffff800fff8 +fffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffff80000000 +0007fffffe0000000000003ffffffffffffffffffffff800fff8 +fffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffff0000000 +001ffffffc0000000000007ffffffffffffffffffffff800fff8 +fffffffffffffffffffffffff03ffffffffffffffffffffffffffffffffffffff8000000 +003ffffffc000000000000fffffffffffffffffffffff800fff8 +ffffffffffffffffffffffffe07ffffffffffffffffffffffffffffffffffffffe000000 +00fffffff8000000000003fffffffffffffffffffffff001fff8 +ffffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffff800000 +03fffffff8000000000003fffffffffffffffffffffff001fff8 +ffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffc00000 +07fffffff0000000000007fffffffffffffffffffffff001fff8 +ffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffc0000 +3ffffffff000000000000ffffffffffffffffffffffff003fff8 +ffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffffffffe03f +fffffffff000000000003ffffffffffffffffffffffff003fff8 +ffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffffffffffff +fffffffff800000000007ffffffffffffffffffffffff003fff8 +fffffffffffffffffffffffe03ffffffffffffffffffffffffffffffffffffffffffffff +fffffffff80000000000ffffffffffffffffffffffffe003fff8 +fffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffc0000000003ffffffffffffffffffffffffe007fff8 +fffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffe0000000007ffffffffffffffffffffffffe007fff8 +fffffffffffffffffffffff81fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffe000000000fffffffffffffffffffffffffe00ffff8 +fffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000001fffffffffffffffffffffffffe00ffff8 +ffffffffffffffffffffffe03ffffffffffffffffffffffffbffffffffffffffffffffff +ffffffffff800000007fffffffffffffffffffffffffc00ffff8 +ffffffffffffffffffffffe07ffffffffffffffffffdfffff1ffffffffffffffffffffff +ffffffffffc0000000ffffffffffffffffffffffffffc00ffff8 +ffffffffffffffffffffffe07ffffffffffffffffff9fffff07fffffffffffffffffffff +ffffffffffe0000001ffffffffffffffffffffffffffc00ffff8 +ffffffffffffffffffffffc0ffffffffffffffffffe3ffffe03fffffffffffffffffffff +fffffffffff800001fffffffffffffffffffffffffffc01ffff8 +ffffffffffffffffffffff81ffffffffffffffffffc7ffffc00fffffffffffffffffffff +fffffffffffe00007fffffffffffffffffffffffffffc01ffff8 +ffffffffffffffffffffff81ffffffffffffffffff87ffffc007ffffffffffffffffffff +ffffffffffff8003ffffffffffffffffffffffffffff801ffff8 +ffffffffffffffffffffff03ffffffffffffffffff0fffff8007ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff803ffff8 +fffffffffffffffffffffe07fffffffffffffffffe0fffff8001ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff803ffff8 +fffffffffffffffffffffe07fffffffffffffffffc1fffff0000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff803ffff8 +fffffffffffffffffffffc0ffffffffffffffffff83ffffe00007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff007ffff8 +fffffffffffffffffffff81fffffffffffffffffe03ffffe00007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff007ffff8 +fffffffffffffffffffff83fffffffffffffffffc07ffffc00003fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff007ffff8 +fffffffffffffffffffff03fffffffffffffffff80fffff800001fffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffe00fffff8 +ffffffffffffffffffffe07fffffffffffffffff00fffff800000fffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffe00fffff8 +ffffffffffffffffffffe0fffffffffffffffffe01fffff0000007ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffe00fffff8 +ffffffffffffffffffffc0fffffffffffffffffc01ffffe0000003ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffe00fffff8 +ffffffffffffffffffff81fffffffffffffffff803ffffe0000003ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffe01fffff8 +ffffffffffffffffffff81ffffffffffffffffe007ffffc0000003ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffc01fffff8 +ffffffffffffffffffff83ffffffffffffffffe007ffffc0000001ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffc01fffff8 +ffffffffffffffffffff07ffffffffffffffff800fffff80000000ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffc01fffff8 +fffffffffffffffffffe07ffffffffffffffff800fffff00000000ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffc03fffff8 +fffffffffffffffffffc0ffffffffffffffffe001fffff00000000ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff803fffff8 +fffffffffffffffffffc0ffffffffffffffffc003ffffe000000007fffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff803fffff8 +fffffffffffffffffff81ffffffffffffffff0003ffffc000000007fffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff007fffff8 +fffffffffffffffffff01fffffffffffffffe0007ffffc000000003fffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff007fffff8 +fffffffffffffffffff03fffffffffffffffe000fffff8000000001fffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff007fffff8 +ffffffffffffffffffe07fffffffffffffff8000fffff0000000001fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffe00ffffff8 +ffffffffffffffffffc07fffffffffffffff0001fffff0000000001fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffe00ffffff8 +ffffffffffffffffffc0fffffffffffffffe0001ffffe0000000000fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffe00ffffff8 +ffffffffffffffffff80fffffffffffffff80003ffffe0000000000fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffe01ffffff8 +ffffffffffffffffff81fffffffffffffff00007ffffc0000000000fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffc01ffffff8 +ffffffffffffffffff81ffffffffffffffe00007ffffc00000000007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffc01ffffff8 +ffffffffffffffffff03ffffffffffffffc0000fffffc00000000007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffc03ffffff8 +fffffffffffffffffe03ffffffffffffff00000fffffe00000000007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff803ffffff8 +fffffffffffffffffc07fffffffffffffe00001ffffff00000000007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff803ffffff8 +fffffffffffffffffc07fffffffffffffc00007ffffffc0000000007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff807ffffff8 +fffffffffffffffff807fffffffffffff00001fffffffe0000000003ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff807ffffff8 +fffffffffffffffff807ffffffffffffe00003ffffffff0000000003ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff007ffffff8 +fffffffffffffffff00fffffffffffff800007ffffffff8000000003ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00fffffff8 +fffffffffffffffff00fffffffffffff00000fffffffffc000000001ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00fffffff8 +ffffffffffffffffe00ffffffffffffc00003fffffffffe000000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffe01fffffff8 +ffffffffffffffffe00ffffffffffff800007ffffffffff000000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffe01fffffff8 +ffffffffffffffffc00ffffffffffff00000fffffffffff800000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffe01fffffff8 +ffffffffffffffff800fffffffffffc00001fffffffffffc00000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffe03fffffff8 +ffffffffffffffff800fffffffffff000007fffffffffffe00000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffe03fffffff8 +ffffffffffffffff001ffffffffffe00000fffffffffffff00000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffc07fffffff8 +ffffffffffffffff001ffffffffffc00001fffffffffffff80000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffc07fffffff8 +fffffffffffffffe000fffffffffe000003fffffffffffff80000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff807fffffff8 +fffffffffffffffe000fffffffffc000007fffffffffffffc0000000ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff807fffffff8 +fffffffffffffffc000fffffffff800000ffffffffffffffe0000000ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff80ffffffff8 +fffffffffffffffc0007fffffffe000001fffffffffffffff0000000ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff80ffffffff8 +fffffffffffffffc0003fffffffc000003fffffffffffffff0000000ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff01ffffffff8 +fffffffffffffff80001fffffff8000007fffffffffffffff8000000ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff01ffffffff8 +fffffffffffffff80000ffffffc000001ffffffffffffffff8000000ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff01ffffffff8 +fffffffffffffff800003fffff0000003ffffffffffffffffc000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffe01ffffffff8 +fffffffffffffff000000000000000007ffffffffffffffffc000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffe03ffffffff8 +ffffffffffffffe00000000000000000fffffffffffffffffe000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffe03ffffffff8 +ffffffffffffffe00000000000000001fffffffffffffffffe000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc07ffffffff8 +ffffffffffffffc00000000000000003fffffffffffffffffe000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc07ffffffff8 +ffffffffffffffc00000000000000007ffffffffffffffffff000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc07ffffffff8 +ffffffffffffffc0000000000000000fffffffffffffffffff000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc0fffffffff8 +ffffffffffffff80000000000000003fffffffffffffffffff800000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc0fffffffff8 +ffffffffffffff80000000000000007fffffffffffffffffff800001ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff80fffffffff8 +ffffffffffffff8000000000000001ffffffffffffffffffff800001ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff81fffffffff8 +ffffffffffffff8000000000000001ffffffffffffffffffffc00001ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff81fffffffff8 +ffffffffffffff8000000000000003ffffffffffffffffffffe00001ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff01fffffffff8 +ffffffffffffff000000000000000fffffffffffffffffffffe00001ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff03fffffffff8 +ffffffffffffff000000000000001ffffffffffffffffffffff00001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffe03fffffffff8 +fffffffffffffe000000000000003ffffffffffffffffffffff00001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffe03fffffffff8 +fffffffffffffe000000000000007ffffffffffffffffffffff00001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffe03fffffffff8 +fffffffffffffc00000000000001fffffffffffffffffffffff00001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffe07fffffffff8 +fffffffffffffc00000000000007fffffffffffffffffffffff00001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffc07fffffffff8 +fffffffffffffc00000000000007fffffffffffffffffffffff00001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffc07fffffffff8 +fffffffffffffc0000000000003ffffffffffffffffffffffff80003ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffc0ffffffffff8 +fffffffffffffc0000000000007ffffffffffffffffffffffff80003ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffc0ffffffffff8 +fffffffffffffc000000000000fffffffffffffffffffffffff80003ffffffffffffffff +fffffffffffffffffffffffffffffffffffffff80ffffffffff8 +fffffffffffffc000000000003fffffffffffffffffffffffff80003ffffffffffffffff +fffffffffffffffffffffffffffffffffffffff80ffffffffff8 +fffffffffffffc000000000007fffffffffffffffffffffffff80003ffffffffffffffff +fffffffffffffffffffffffffffffffffffffff00ffffffffff8 +fffffffffffffc00000000001ffffffffffffffffffffffffff80007ffffffffffffffff +fffffffffffffffffffffffffffffffffffffff01ffffffffff8 +fffffffffffffe00000000001ffffffffffffffffffffffffff80007ffffffffffffffff +fffffffffffffffffffffffffffffffffffffff01ffffffffff8 +fffffffffffffe0000000000fffffffffffffffffffffffffff80007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffe01ffffffffff8 +ffffffffffffff0000000001fffffffffffffffffffffffffff80007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffe03ffffffffff8 +ffffffffffffff000000000ffffffffffffffffffffffffffff80007ffffffffffffffff +fffffffffffffffffffdffffffffffffffffffe03ffffffffff8 +ffffffffffffff800000003ffffffffffffffffffffffffffff80007ffffffffffffffff +fffffffffffffffffff9ffffffffffffffffffc03ffffffffff8 +ffffffffffffffe0000001fffffffffffffffffffffffffffff80007ffffffffffffffff +fffffffffffffffffff1ffffffffffffffffff807ffffffffff8 +fffffffffffffff0000001fffffffffffffffffffffffffffff8000fffffffffffffffff +fffffffffffffffffff1ffffffffffffffffff807ffffffffff8 +fffffffffffffff800000ffffffffffffffffffffffffffffffc000fffffffffffffffff +fffffffffffffffffff1ffffffffffffffffff807ffffffffff8 +fffffffffffffffe0003fffffffffffffffffffffffffffffffc000fffffffffffffffff +ffffffffffffffffffe1ffffffffffffffffff807ffffffffff8 +ffffffffffffffff4007fffffffffffffffffffffffffffffffc001fffffffffffffffff +ffffffffffffffffffc1ffffffffffffffffff00fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff +ffffffffffffffffff83ffffffffffffffffff00fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff +ffffffffffffffffff83ffffffffffffffffff00fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff +ffffffffffffffffff03ffffffffffffffffff00fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff +ffffffffffffffffff03ffffffffffffffffff01fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff +ffffffffffffffffff07ffffffffffffffffff01fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff +fffffffffffffffffe07fffffffffffffffffe01fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff +fffffffffffffffffc07fffffffffffffffffe03fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffffff +fffffffffffffffffc07fffffffffffffffffc03fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffffff +fffffffffffffffff80ffffffffffffffffffc03fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe007fffffffffffffffff +fffffffffffffffff80ffffffffffffffffffc03fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe007fffffffffffffffff +fffffffffffffffff80ffffffffffffffffffc03fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe00ffffffffffffffffff +fffffffffffffffff03ffffffffffffffffff807fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe00ffffffffffffffffff +ffffffffffffffffe01ffffffffffffffffff807fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe01ffffffffffffffffff +ffffffffffffffffe03ffffffffffffffffff807fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe01ffffffffffffffffff +ffffffffffffffffc07ffffffffffffffffff00ffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe03ffffffffffffffffff +ffffffffffffffffc07ffffffffffffffffff00ffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe03ffffffffffffffffff +ffffffffffffffff80fffffffffffffffffff00ffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe07ffffffffffffffffff +ffffffffffffffff80fffffffffffffffffff00ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff07ffffffffffffffffff +ffffffffffffffff00ffffffffffffffffffe01ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff07ffffffffffffffffff +fffffffffffffffe00ffffffffffffffffffe01ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff0fffffffffffffffffff +fffffffffffffffe00ffffffffffffffffffe01ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff0fffffffffffffffffff +fffffffffffffffc01ffffffffffffffffffc01ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffffffffff +fffffffffffffffc03ffffffffffffffffffc01ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff3fffffffffffffffffff +fffffffffffffffc03ffffffffffffffffffc03ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffff +fffffffffffffff807ffffffffffffffffffc03ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffff807ffffffffffffffffff803ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffff00fffffffffffffffffff803ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffff00fffffffffffffffffff807ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffe01fffffffffffffffffff807ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffe03fffffffffffffffffff807ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffc03fffffffffffffffffff807ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff807fffffffffffffffffff00fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff807fffffffffffffffffff00fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff00ffffffffffffffffffff00fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff00fffffffffffffffffffe00fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffe01fffffffffffffffffffe01fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffe03fffffffffffffffffffe01fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffc03fffffffffffffffffffc01fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffc07fffffffffffffffffffc01fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff807fffffffffffffffffffc03fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff00ffffffffffffffffffffc03fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff00ffffffffffffffffffff803fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffe01ffffffffffffffffffff803fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffe01ffffffffffffffffffff803fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffc03ffffffffffffffffffff807fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffc03ffffffffffffffffffff007fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff807ffffffffffffffffffff007fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff807ffffffffffffffffffff007fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff00fffffffffffffffffffff007fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffe00ffffffffffffffffffffe00ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffe01ffffffffffffffffffffe00ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9fffffffffffff +fffffffffffc01ffffffffffffffffffffe00ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffff +fffffffffffc03ffffffffffffffffffffe00ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffff +fffffffffff803ffffffffffffffffffffc00ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1fffffffffffff +fffffffffff807ffffffffffffffffffffc00ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1fffffffffffff +fffffffffff00fffffffffffffffffffffc01ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3fffffffffffff +fffffffffff00fffffffffffffffffffffc01ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffff83fffffffffffff +ffffffffffc01fffffffffffffffffffffc01ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff +ffffffffffc01fffffffffffffffffffffc01ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff +ffffffffff801fffffffffffffffffffff801ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff +ffffffffff803fffffffffffffffffffff801ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffff +ffffffffff003fffffffffffffffffffff803ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0ffffffffffffff +fffffffffe007fffffffffffffffffffff803ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1ffffffffffffff +fffffffffc007fffffffffffffffffffff003ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff81ffffffffffffff +fffffffffc00ffffffffffffffffffffff003ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffffffffffffff +fffffffff800ffffffffffffffffffffff003ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffffffffffffff +fffffffff801ffffffffffffffffffffff003ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff03ffffffffffffff +fffffffff803ffffffffffffffffffffff007ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffe07ffffffffffffff +fffffffff003fffffffffffffffffffffe007ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffc07ffffffffffffff +ffffffffe007fffffffffffffffffffffe007ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffff807ffffffffffffff +ffffffffc007fffffffffffffffffffffe007ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffff007ffffffffffffff +ffffffffc007fffffffffffffffffffffe007ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffff00fffffffffffffff +ffffffff800ffffffffffffffffffffffe00fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffff00fffffffffffffff +ffffffff000ffffffffffffffffffffffe00fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffff +fffffffe001ffffffffffffffffffffffe00fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffff +fffffffc003ffffffffffffffffffffffe00fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffff +9ffffffc003ffffffffffffffffffffffe00fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffff803fffffffffffffff +0ffffff8003ffffffffffffffffffffffc01fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffff003ffffffffffffffe +07fffff0007ffffffffffffffffffffffc01fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffff003ffffffffffffffe +07ffffe000fffffffffffffffffffffffc01fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffe007ffffffffffffff8 +03ffffc000fffffffffffffffffffffffc01fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffe007ffffffffffffff0 +03ffff8001fffffffffffffffffffffff801fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffc007ffffffffffffff0 +01ffff0003fffffffffffffffffffffff803fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffe0 +00fffe0003fffffffffffffffffffffff803fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffe0 +00fffe0003fffffffffffffffffffffff803fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffff001ffffffffffffffc0 +003ffc0007fffffffffffffffffffffff003fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffff80 +001fe0001ffffffffffffffffffffffff003fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffff00 +000fc0001ffffffffffffffffffffffff007fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffe00 +000000001ffffffffffffffffffffffff007fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff8007fffffffffffffe00 +000000003ffffffffffffffffffffffff007fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffc00 +000000003ffffffffffffffffffffffff007fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff000ffffffffffffff800 +000000007fffffffffffffffffffffffe007fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe001ffffffffffffff800 +000000007fffffffffffffffffffffffe007fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe001ffffffffffffff000 +00000001ffffffffffffffffffffffffe007fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc003ffffffffffffff000 +00000001ffffffffffffffffffffffffe007fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffe000 +00000001ffffffffffffffffffffffffe007fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffff0007fffffffffffffc000 +00000003ffffffffffffffffffffffffc00ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffff000ffffffffffffffc000 +00000003ffffffffffffffffffffffffc00ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffff8000 +00000007ffffffffffffffffffffffffc00ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffc001ffffffffffffff0000 +0000000fffffffffffffffffffffffffc01ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffc003ffffffffffffff0000 +0000001fffffffffffffffffffffffffc01ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffff8003fffffffffffffe0000 +0000001fffffffffffffffffffffffffc01ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffff0007fffffffffffffe0000 +0000003fffffffffffffffffffffffffc01ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffffc0000 +0000007fffffffffffffffffffffffff801ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffff80000 +0000007fffffffffffffffffffffffff801ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffc001ffffffffffffff80000 +000000ffffffffffffffffffffffffff801ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffff8001ffffffffffffff00000 +000001ffffffffffffffffffffffffff801ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff00000 +000001ffffffffffffffffffffffffff801ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff00000 +000003ffffffffffffffffffffffffff801ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffe0007fffffffffffffe00000 +000003ffffffffffffffffffffffffff801ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffffe00000 +000007ffffffffffffffffffffffffff803ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffc00000 +00000fffffffffffffffffffffffffff003ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffff8001ffffffffffffff800000 +00000fffffffffffffffffffffffffff803ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff800000 +00001fffffffffffffffffffffffffff803ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffff0007ffffffffffffff000200 +00003fffffffffffffffffffffffffff007ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffe0007fffffffffffffe000700 +00007fffffffffffffffffffffffffff00fffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffe001f80 +0000ffffffffffffffffffffffffffff00fffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe001f80 +0001ffffffffffffffffffffffffffff00fffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffc003fc0 +0001ffffffffffffffffffffffffffff00fffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffff0001ffffffffffffff8007fe0 +0003ffffffffffffffffffffffffffff01fffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffff0007fe0 +0007ffffffffffffffffffffffffffff01fffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffe0007ffffffffffffff000fff0 +0007ffffffffffffffffffffffffffff01fffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffe003fff8 +001fffffffffffffffffffffffffffff07fffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe003fffc +007fffffffffffffffffffffffffffff07fffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe003fffe +00ffffffffffffffffffffffffffffff07fffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffff0001ffffffffffffffc007ffff +dfffffffffffffffffffffffffffffff0ffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffff800fffff +fffffffffffffffffffffffffffffffe1ffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffff800fffff +fffffffffffffffffffffffffffffffe1ffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffff001fffff +fffffffffffffffffffffffffffffffe1ffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff003fffff +fffffffffffffffffffffffffffffffe3ffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffe003fffff +ffffffffffffffffffffffffffffffff3ffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffe0001ffffffffffffffc007fffff +ffffffffffffffffffffffffffffffff3ffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffffc007fffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffffc00ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff800ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff801ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffe0000fffffffffffffff001ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffff003ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffc0003ffffffffffffffe007ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffff80007ffffffffffffffe007ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffff0000fffffffffffffffc00fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffff0000fffffffffffffffc00fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffe0001fffffffffffffffc00fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffff801fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffc0003fffffffffffffff801fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffff80003fffffffffffffff003fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff007fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffff007fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffffc007fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffffc00ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffff80003fffffffffffffffc01ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff801ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffe0001ffffffffffffffff801ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffff803ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffc0003ffffffffffffffff803ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffff80003fffffffffffffffe007ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffff80007fffffffffffffffe007ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffe00fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffc00fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffff801fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffff80003ffffffffffffffff803fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffff80003ffffffffffffffff003fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff003fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffffe007fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffffc007fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffffc00ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffff80007ffffffffffffffffc00ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff801ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff801ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffe0000fffffffffffffffff003ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffc0001fffffffffffffffff003ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffff80003ffffffffffffffffe007ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffff80003ffffffffffffffffe007ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffe00007ffffffffffffffffc00fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffe0000fffffffffffffffffc00fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffe0000fffffffffffffffffc00fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffff80001fffffffffffffffff801fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffff00003fffffffffffffffff801fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffff00007fffffffffffffffff003fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffe00007fffffffffffffffff007fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffc0000ffffffffffffffffff007fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffc0001fffffffffffffffffc007fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffff80003fffffffffffffffffc00ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffff80007fffffffffffffffffc01ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffff00007fffffffffffffffff801ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffff0000ffffffffffffffffff801ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffc0001ffffffffffffffffff803ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffff80003ffffffffffffffffff803ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffff00007ffffffffffffffffff007ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffff00007ffffffffffffffffff007ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffe0000ffffffffffffffffffe00fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffc0000ffffffffffffffffffe00fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffc0001ffffffffffffffffffe01fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffff80003ffffffffffffffffffc03fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffff00007ffffffffffffffffffc03fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffe00007ffffffffffffffffffc03fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffe00007ffffffffffffffffffc07fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffc0001fffffffffffffffffff807fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffff80003fffffffffffffffffff80ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffff80003fffffffffffffffffff80ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffff00007fffffffffffffffffff81ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffe0000ffffffffffffffffffff01ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffe0001ffffffffffffffffffff03ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffc0003ffffffffffffffffffff03ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffff80003fffffffffffffffffffe07ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffff00007fffffffffffffffffffe07ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffe00007fffffffffffffffffffe0fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffe0000ffffffffffffffffffffc0fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffe0000ffffffffffffffffffffc1fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffc0001ffffffffffffffffffffc1fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffff80007ffffffffffffffffffff83fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffff00007ffffffffffffffffffff83fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffe00007ffffffffffffffffffff83fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffe0000fffffffffffffffffffff87fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffc0001fffffffffffffffffffff87fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffc0001fffffffffffffffffffff0ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffff80003fffffffffffffffffffff0ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffff00007fffffffffffffffffffff0ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffff0000ffffffffffffffffffffff1ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffe0000fffffffffffffffffffffe1ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffc0001fffffffffffffffffffffe3ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffff80003fffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffff00007fffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffe0001ffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffe0001ffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffc0003ffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffc0007ffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffff0000fffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffff0000fffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffe0001fffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffc0003fffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffc0003fffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffc0007fffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffff8000ffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffff8001ffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffff0001ffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffff0003ffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffff0003ffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffe0007ffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffc000fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffff8001fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffff8001fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffff8003fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffff8007fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffff8007fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffff0007fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffe000ffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffe001ffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffc001ffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffc007ffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffc00fffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffc01fffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffff801fffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffff003fffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffff003fffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffe00ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffe01ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffff807ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffff807ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffff00fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffe03fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffc3ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff83ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff87ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff8fffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff8fffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 + + +showpage + +% stop using temporary dictionary +end + +% restore original state +origstate restore + +%%Trailer diff --git a/etc/gnus-refcard.tex b/etc/gnus-refcard.tex new file mode 100644 index 00000000000..343de2d6f6f --- /dev/null +++ b/etc/gnus-refcard.tex @@ -0,0 +1,1427 @@ +\documentclass{article} + +% Previously we had five input LaTeX files (booklet.tex bk-lt.tex bk-a4.tex +% refcard.tex gnusref.tex) and two logo files (gnuslogo-refcard.eps and +% gnuslogo-booklet.eps). +% +% From this LaTeX file (gnus-refcard.tex) plus a single logo (gnus-logo.eps), +% we can generate the refcard and the booklet version. Appropriate Makefile +% rules were added. This simplifies to distribute the refcard with Emacs. +% +% (Reiner Steib, March 2005) + +\usepackage{ifthen} +\ifthenelse{\isundefined{\booklettrue}}{ + \typeout{Creating reference card...} +}{ + \typeout{Creating reference booklet...}} + +\usepackage{supertabular} + +\newlength{\logowidth} \setlength{\logowidth} {6.861in} +\newlength{\logoheight} \setlength{\logoheight}{7.013in} + +\usepackage{graphicx} + +\usepackage{geometry} + +\ifthenelse{\isundefined{\booklettrue}}{% ifcard %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Reference Card + + \def\Guide{Card}\def\guide{card} + \def\logoscale{0.25} + + % Page setup for the refcard: + + % \setlength{\textwidth}{7.26in} \setlength{\textheight}{10in} + % \setlength{\topmargin}{-1.0in} + % % the same settings work for A4, although there is a bit of space at the + % % top and bottom of the page. + % \setlength{\oddsidemargin}{-0.5in} \setlength{\evensidemargin}{-0.5in} + + \ifthenelse{\isundefined{\letterpapertrue}}{ + \geometry{a4paper,hmargin=10mm,tmargin=10mm,bmargin=35mm} + }{ + \geometry{hmargin=20mm,tmargin=10mm,bmargin=12mm} + } + +}{ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Reference Booklet + + \def\Guide{Booklet}\def\guide{booklet} + \def\logoscale{0.5}% FIXME: too large for 2up printing? --rsteib + + % FIXME: Use geometry package. --rsteib +% \ifthenelse{\isundefined{\letterpapertrue}}{ +% \textwidth 4.9in \textheight 7.35in \topmargin -1.0in +% }{ +% \textwidth 4.5in \textheight 7.5in \topmargin -1.0in +% } +% \oddsidemargin -0.5in \evensidemargin -0.5in + \ifthenelse{\isundefined{\letterpapertrue}}{ + \geometry{a5paper,hmargin=10mm,tmargin=10mm,bmargin=4mm} + }{ + % FIXME: Use geometry package. --rsteib + \geometry{a5paper,hmargin=20mm,tmargin=10mm,bmargin=4mm} + } + + \def\sec{\section} + \def\subsec{\subsection} + \def\subsubsec{\subsubsection} + \def\blankpage{\vspace*{\fill}\par + %\centerline{(This page intentionally left blank.)} + \par\vspace*{\fill}\pagebreak} +}%ifbooklet% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% \input{gnusref} % % % % % % % % % % % % % % % % % % % % % % % % % % +%% include file for the Gnus refcard and booklet + +\def\progver{5.10}\def\refver{5.10-2} % program and refcard versions +\def\date{Mar, 2005} +\def\author{Gnus Bugfixing Girls + Boys $<$bugs@gnus.org$>$} + +%% +\newlength{\keycolwidth} +\newenvironment{keys}[1]% #1 is the widest key +{\nopagebreak%\noindent% + \settowidth{\keycolwidth}{#1}% + \addtolength{\keycolwidth}{\tabcolsep}% + \addtolength{\keycolwidth}{-\columnwidth}% + \begin{supertabular}{@{}l@{\hspace{\tabcolsep}}p{-\keycolwidth}@{}}}% + {\end{supertabular}\\} + +%% uncomment the first definition if you do not want pagebreaks in maps +%%\newcommand{\esamepage}{\samepage} +\newcommand{\esamepage}{} + +\newcommand*{\B}[1]{{\bf#1})} % bold l)etter + +\newcommand{\Title}{% + \begin{center} + {\bf\LARGE Gnus \progver\ Reference \Guide\\} + %{\normalsize \Guide\ version \refver} + \end{center} + } + +% \newcommand*{\LogoOLD}[1]{\centerline{% +% \makebox[\logoscale\logowidth][l]{\vbox to \logoscale\logoheight +% {\vfill\epsfig{figure=gnuslogo-#1}}\vspace{-\baselineskip}}}} + +\newcommand*{\Logo}[1]{\centerline{% + \includegraphics[width=\logoscale\logowidth]{gnus-logo}}} + +\newcommand{\Copyright}{% + \begin{center} + Copyright \copyright\ 1995 Free Software Foundation, Inc.\\* + Copyright \copyright\ 1995 Vladimir Alexiev + $<$vladimir@cs.ualberta.ca$>$.\\* + Copyright \copyright\ 2000 Felix Natter $<$fnatter@gmx.net$>$.\\* + Copyright \copyright\ 2001, 2002, 2003, 2005 \author.\\* + Created from the Gnus manual Copyright \copyright\ 1994 Lars Magne + Ingebrigtsen.\\* + and the Emacs Help Bindings feature (C-h b).\\* + Gnus logo copyright \copyright\ 1995 Luis Fernandes.\\* + \end{center} + + Permission is granted to make and distribute copies of this reference + \guide{} provided the copyright notice and this permission are preserved on + all copies. Please send corrections, additions and suggestions to the + current maintainer's email address. \Guide{} last edited on \date. + } + +\newcommand{\Notes}{% + \subsection*{Notes} + {\esamepage + Gnus is complex. Currently it has some 876 interactive (user-callable) + functions. Of these 618 are in the two major modes (Group and + Summary/Article). Many of these functions have more than one binding, some + have 3 or even 4 bindings. The total number of keybindings is 677. So in + order to save 40\% space, every function is listed only once on this + \guide, under the ``more logical'' binding. Alternative bindings are given + in parentheses in the beginning of the description. + + Many Gnus commands are affected by the numeric prefix. Normally you enter a + prefix by holding the Meta key and typing a number, but in most Gnus modes + you don't need to use Meta since the digits are not self-inserting. The + prefixed behavior of commands is given in [brackets]. Often the prefix is + used to specify: + + \quad [distance] How many objects to move the point over. + + \quad [scope] How many objects to operate on (including the current one). + + \quad [p/p] The ``Process/Prefix Convention'': If a prefix is given then it + determines how many objects to operate on. Else if there are some objects + marked with the process mark \#, these are operated on. Else only the + current object is affected. + + \quad [level] A group subscribedness level. Only groups with a lower or + equal level will be affected by the operation. If no prefix is given, + `gnus-group-default-list-level' is used. If + `gnus-group-use-permanent-levels', then a prefix to the `g' and `l' + commands will also set the default level. + + \quad [score] An article score. If no prefix is given, + `gnus-summary-default-score' is used. \\*[\baselineskip] + % some keys + Gnus startup-commands:\\* + \begin{keys}{M-x gnus-unplugged} + M-x gnus & start Gnus. \\ + M-x gnus-no-server & start Gnus without connecting to server + (i.e. to read mail). \\ + \end{keys} + Additionally, there are the two commands \texttt{gnus-plugged} and + \texttt{gnus-unplugged}, which are only used if you want to download + news and/or read previously downloaded news offline (see C-c C-i g Gnus + Unplugged RET). Note: \texttt{gnus-no-server} ignores the stuff in + \texttt{gnus-agent-directory}, and thus does not allow you to use Gnus + Unplugged. + % + \begin{keys}{C-c C-i} + C-c C-i & Go to the Gnus online {\bf info}.\\ + C-c C-b & Send a Gnus {\bf bug} report.\\ + \end{keys} + }} + +\newcommand{\GroupLevels}{% + The table below assumes that you use the default Gnus levels. + Fill your user-specific levels in the blank cells.\\[1\baselineskip] + \begin{tabular}{|c|l|l|} + \hline + Level & Groups & Status \\ + \hline + 1 & draft/mail groups & \\ + 2 & mail groups & \\ + 3 & & subscribed \\ + 4 & & \\ + 5 & default list level & \\ + \hline + 6 & & unsubscribed \\ + 7 & & \\ + \hline + 8 & & zombies \\ + \hline + 9 & & killed \\ + \hline + \end{tabular}} + +\newcommand{\MarkCharacters}{% + {\esamepage If a command directly sets a mark, it is shown in parentheses.\\* + \newlength{\markcolwidth} + \settowidth{\markcolwidth}{` '}% widest character + \addtolength{\markcolwidth}{4\tabcolsep} + \addtolength{\markcolwidth}{-\columnwidth} + \newlength{\markdblcolwidth} + \setlength{\markdblcolwidth}{\columnwidth} + \addtolength{\markdblcolwidth}{-2\tabcolsep} + \begin{tabular}{|c|p{-\markcolwidth}|} + \hline + \multicolumn{2}{|p{\markdblcolwidth}|}{{\bf ``Read'' Marks.} + All these marks appear in the first column of the summary line, and so + are mutually exclusive.}\\ + \hline + ` ' & (M-u, M SPC, M c) Not read.\\ + ! & (!, M !, M t) Ticked (interesting).\\ + ? & (?, M ?) Dormant (only followups are interesting).\\ + E & (E, M e, M x) {\bf Expirable}. Only has effect in mail groups.\\ + G & (C, B DEL) Canceled article (or deleted in mailgroups).\\ + \$ & (M-d, M s x, S x). Marked as spam.\\ + \hline\hline + \multicolumn{2}{|p{\markdblcolwidth}|} + {The marks below mean that the article + is read (killed, uninteresting), and have more or less the same effect. + Some commands however explicitly differentiate between them (e.g.\ M + M-C-r, adaptive scoring).}\\ + \hline + r & (d, M d, M r) Deleted (marked as {\bf read}).\\ + C & (M C; M C-c; M H; c, Z c; Z n; Z C) Killed by {\bf catch-up}.\\ + F & SOUPed article. See the manual.\\ + O & {\bf Old} (read in a previous session).\\ + K & (k, M k; C-k, M K) {\bf Killed}.\\ + M & Article marked as read by duplicate suppression.\\ + Q & Article is part of a sparse thread (see ``Threading'' + in the manual).\\ + R & {\bf Read} (viewed in actuality).\\ + X & Killed by a kill file.\\ + Y & Killed due to low score.\\ + \hline\multicolumn{2}{c}{\vspace{1ex}}\\\hline + \multicolumn{2}{|p{\markdblcolwidth}|} + {{\bf Marks not affecting visibility}}\\ + \hline + \# & (\#, M \#, M P p) Processable (will be affected by the next operation). + [2]\\ + A & {\bf Answered} (followed-up or replied). [2]\\ + F & Forwarded. [2]\\ + $\ast$ & Cached. [2]\\ + S & Saved. [2]\\ + N & Recently arrived. [2]\\ + . & Unseen. [2]\\ + + & Over default score. [3]\\ + $-$ & Under default score. [3]\\ + $=$ & Has children (thread underneath it). Add `\%e' to + `gnus-summary-line-format'. [3]\\ + \hline + \end{tabular} + }} + +\newcommand{\GroupModeGeneral}{% + \begin{keys}{C-c M-C-x} + RET & (=) Enter this group. [Prefix: how many (read) articles to fetch. + Positive: newest articles, negative: oldest ones; non-numerical: + view all articles, not just unread]\\ + M-RET & Enter group quickly.\\ + M-SPC & Same as RET but does not expunge and hide dormants.\\ + M-C-RET & Enter group without any processing, changes will not be permanent.\\ + SPC & Select this group and display the first (unread) article. [Same + prefix as above.]\\ + ? & Give a very short help message.\\ + $<$ & Go to the beginning of the Group buffer.\\ + $>$ & Go to the end of the Group buffer.\\ + , & Jump to the lowest-level group with unread articles.\\ + . & Jump to the first group with unread articles.\\ + \^{} & Enter the Server buffer mode.\\ + a & Post an {\bf article} to a group + [Prefix: use group under point to find posting-style].\\ + b & Find {\bf bogus} groups and delete them.\\ + c & Mark all unticked articles in this group as read ({\bf catch-up}). + [p/p]\\ + g & Check the server for new articles ({\bf get}). [level]\\ + M-g & Check the server for new articles in this group ({\bf get}). [p/p]\\ + j & {\bf Jump} to a group.\\ + m & {\bf Mail} a message to someone + [Prefix: use group under point to find posting-style].\\ + n & Go to the {\bf next} group with unread articles. [distance]\\ + M-n & Go to the {\bf next} group on the same or lower level. + [distance]\\ + p & (DEL) Go to the {\bf previous} group with unread articles. + [distance]\\ + M-p & Go to the {\bf previous} group on the same or lower level. [distance]\\ + q & {\bf Quit} Gnus.\\ + r & Re-read the init file ({\bf reset}).\\ + s & {\bf Save} the `.newsrc.eld' file (and `.newsrc' if + `gnus-save-newsrc-file').\\ + z & Suspend (kill all buffers of) Gnus.\\ + B & {\bf Browse} a foreign server.\\ + C & Mark all articles in this group as read ({\bf Catch-up}). [p/p]\\ + F & {\bf Find} new groups and process them.\\ + N & Go to the {\bf next} group. [distance]\\ + P & Go to the {\bf previous} group. [distance]\\ + Q & {\bf Quit} Gnus without saving any startup (.newsrc) files.\\ + R & {\bf Restart} Gnus.\\ + Z & Clear the dribble buffer.\\ + M-c & Clear data from group (marks and list of read articles). \\ + C-c C-s & {\bf Sort} the groups by name, number of unread articles, or level + (depending on `gnus-group-sort-function').\\ + C-c C-x & Run all expirable articles in this group through the {\bf expiry} + process.\\ + C-c M-C-x & Run all articles in all groups through the {\bf expiry} process.\\ + C-c M-g & Activate all {\bf groups}.\\ + C-c C-i & Gnus online-manual ({\bf info}).\\ + C-x C-t & {\bf Transpose} two groups.\\ + H f & Fetch this group's {\bf FAQ} (using ange-ftp).\\ + H c & Display this group's {\bf charter}. [Prefix: query for group]\\ + H C & Display this group's {\bf control message} (using + ange-ftp). [Prefix: query for group]\\ + H v & (V) Display the Gnus {\bf version} number.\\ + H d & (C-c C-d) Show the {\bf description} of this group + [Prefix: re-read from server].\\ + M-d & {\bf Describe} all groups. [Prefix: re-read from server]\\ + D g & Regenerate a Sieve script from group parameters.\\ + D u & Regenerate Sieve script and {\bf upload} to server.\\ + \end{keys} + } + +\newcommand{\ListGroups}{% + {\esamepage + \begin{keys}{A M} + A d & (C-c C-M-a) List all groups whose names or {\bf descriptions} match a regexp.\\ + A k & (C-c C-l) List all {\bf killed} groups. + [Prefix: look at active-file from server]\\ + A l & List all groups on a specific level. + [Prefix: also list groups with no unread articles]\\ + A a & (C-c C-a) List all groups whose names match a regexp + ({\bf apropos}).\\ + A A & List the server's active-file.\\ + A M & List groups that {\bf match} a regexp.\\ + A m & List groups that {\bf match} a regexp and have unread articles. + [level]\\ + A s & (l) List all {\bf subscribed} groups with unread articles. + [level; 5 and lower is the default]\\ + A u & (L) List all groups (including read and {\bf unsubscribed}). + [level; 7 and lower is the default]\\ + A z & List all {\bf zombie} groups.\\ + A c & List all groups with cached articles. [level]\\ + A ? & List all groups with dormant articles. [level]\\ + \end{keys} + } + + \newcommand{\CreateEditGroups}{% + {\esamepage + The select methods are indicated in parentheses.\\* + \begin{keys}{G DEL} + G a & Make the Gnus list {\bf archive} group. (nndir over ange-ftp)\\ + G c & {\bf Customize} this group's parameters.\\ + G d & Make a {\bf directory} group (every file must be a posting and files + must have numeric names). (nndir)\\ + G D & Enter a {\bf directory} as a (temporary) group. + (nneething without recording articles read)\\ + G e & (M-e) {\bf Edit} this group's select method.\\ + G E & {\bf Edit} this group's info (select method, articles read, etc).\\ + G f & Make a group based on a {\bf file}. (nndoc)\\ + G h & Make the Gnus {\bf help} (documentation) group. (nndoc)\\ + G k & Make a {\bf kiboze} group. (nnkiboze)\\ + G m & {\bf Make} a new group.\\ + G p & Edit this group's {\bf parameters}.\\ + G r & Rename this group (does not work with read-only groups!).\\ + G u & Create one of the groups mentioned in gnus-{\bf useful}-groups.\\ + G v & Add this group to a {\bf virtual} group. [p/p]\\ + G V & Make a new empty {\bf virtual} group. (nnvirtual)\\ + G w & Create ephemeral group based on web-search. [Prefix: make solid group + instead]\\ + G R & Make an {\bf RSS} group.\\ + G DEL & {\bf Delete} group [Prefix: delete all articles as well].\\ + G x & Expunge all deleted articles in an nnimap mailbox.\\ + G l & Edit ACL (Access Control {\bf List}) for an nnimap mailbox.\\ + \end{keys} + You can also create mail-groups and read your mail with Gnus (very useful + if you are subscribed to mailing lists), using one of the methods + nnmbox, nnbabyl, nnml, nnmh, or nnfolder. Read about it in the online info + (C-c C-i g Reading Mail RET). + }} + + % TODO: + \newcommand{\SoupCommands}{% + \begin{keys}{G s w} + G s b & gnus-group-brew-soup: not documented.\\ + G s p & gnus-soup-pack-packet: not documented.\\ + G s r & nnsoup-pack-replies: not documented.\\ + G s s & gnus-soup-send-replies: not documented.\\ + G s w & gnus-soup-save-areas: not documented.\\ + \end{keys}} + + \newcommand{\MarkGroups}{% + \begin{keys}{M m} + M m & (\#) Set the process {\bf mark} on this group. [scope]\\ + M r & Mark all groups matching regular expression.\\ + M u & (M-\#) Remove the process mark from this group ({\bf unmark}). + [scope]\\ + M U & Remove the process mark from all groups (\textbf{umark all}).\\ + M w & Mark all groups in the current region. [prefix: unmark]\\ + M b & Mark all groups in the {\bf buffer}. [prefix: unmark]\\ + \end{keys}} + + \newcommand{\GroupTopicsGeneral}{% + {\esamepage + Topics are ``categories'' for groups. Press t in the group-buffer to + toggle gnus-topic-mode (C-c C-i g Group Topics RET).\\* + \begin{keys}{C-c C-x} + T n & Prompt for topic {\bf name} and create it.\\ + T m & {\bf Move} the current group to some other topic [p/p].\\ + T j & {\bf Jump} to a topic.\\ + T c & {\bf Copy} the current group to some other topic [p/p].\\ + T D & Remove (not delete) the current group [p/p].\\ + T M & {\bf Move} all groups matching a regexp to a topic.\\ + T C & {\bf Copy} all groups matching a regexp to a topic.\\ + T H & Toggle {\bf hiding} of empty topics.\\ + T r & {\bf Rename} a topic.\\ + T DEL & Delete an empty topic.\\ + T \# & Mark all groups in the current topic with the process-mark.\\ + T M-\# & Remove the process-mark from all groups in the current topic.\\ + T TAB & (TAB) Indent current topic [Prefix: unindent].\\ + M-TAB & Unindent the current topic.\\ + RET & (SPC) Either unfold topic or enter group [level].\\ + T s & {\bf Show} the current topic. [Prefix: show permanently]\\ + T h & {\bf Hide} the current topic. [Prefix: hide permanently]\\ + C-c C-x & Expire all articles in current group or topic.\\ + C-k & {\bf Kill} a group or topic.\\ + C-y & {\bf Yank} a group or topic.\\ + A T & List active-file using {\bf topics}.\\ + G p & Edit topic-{\bf parameters}.\\ + T M-n & Go to {\bf next} topic. [distance]\\ + T M-p & Go to {\bf previous} topic. [distance]\\ + \end{keys} + } + } + + \newcommand{\TopicSorting}{% + {\esamepage + \begin{keys}{T S m} + T S a & Sort {\bf alphabetically}.\\ + T S u & Sort by number of {\bf unread} articles.\\ + T S l & Sort by group {\bf level}.\\ + T S v & Sort by group score ({\bf value}).\\ + T S r & Sort by group {\bf rank}.\\ + T S m & Sort by {\bf method}.\\ + T S e & Sort by {\bf server} name.\\ + T S s & Sort according to `gnus-group-sort-function'.\\ + \end{keys} + With a prefix these commands will sort in reverse order. + } + } + + \newcommand{\SubscribeKillYankGroups}{% + {\esamepage + \begin{keys}{S C-k} + S k & (C-k) {\bf Kill} this group.\\ + S l & Set the {\bf level} of this group. [p/p]\\ + S s & (U) Prompt for a group and toggle its {\bf subscription}.\\ + S t & (u) {\bf Toggle} subscription to this group. [p/p]\\ + S w & (C-w) Kill all groups in the region.\\ + S y & (C-y) {\bf Yank} the last killed group.\\ + S z & Kill all {\bf zombie} groups.\\ + S C-k & Kill all groups on a certain level.\\ + \end{keys} + } + } + + \newcommand{\SummaryModeGeneral}{% + {\esamepage + \begin{keys}{M-RET} + SPC & (A SPC, A n) Select an article, scroll it one page, move to the + next one.\\ + DEL & (A DEL, A p, b) Scroll this article one page back. [distance]\\ + RET & (A RET) Scroll this article one line forward. [distance]\\ + M-RET & (A M-RET) Scroll this article one line backward. [distance]\\ + = & Expand the Summary window (fullsize). + [Prefix: shrink to display article window]\\ + % + \& & Execute a command on all articles whose header matches a regexp. + [Prefix: move backwards]\\ + M-\& & Execute a command on all articles having the process mark.\\ + % + M-n & (G M-n) Go to the {\bf next} summary line of an unread article. + [distance]\\ + M-p & (G M-p) Go to the {\bf previous} summary line of an unread article. + [distance]\\ + M-s & {\bf Search} through all subsequent articles for a regexp.\\ + M-r & Search through all previous articles for a regexp.\\ + % + A P & {\bf Postscript}-print current buffer.\\ + % + M-k & Edit this group's {\bf kill} file.\\ + M-K & Edit the general {\bf kill} file.\\ + % + C-t & Toggle {\bf truncation} of summary lines.\\ + Y g & Regenerate the summary-buffer.\\ + Y c & Insert all cached articles into the summary-buffer.\\ + % + M-C-e & {\bf Edit} the group-parameters.\\ + M-C-a & Customize the group-parameters.\\ + % + % article handling + % + A $<$ & ($<$, A b) Scroll to the beginning of this article.\\ + A $>$ & ($>$, A e) Scroll to the end of this article.\\ + A s & (s) Perform an i{\bf search} in the article buffer.\\ + % + A D & (C-d) Un{\bf digestify} this article into a separate group. + [Prefix: force digest]\\ + M-C-d & Like C-d, but open several documents in nndoc-groups, wrapped + in an nnvirtual group [p/p]\\ + % + A g & (g) (Re)fetch this article ({\bf get}). [Prefix: get raw version]\\ + A r & (\^{}, A \^{}) Fetch the parent(s) of this article. + [Prefix: if positive fetch \textit{n} ancestors; + negative: fetch only the \textit{n}th ancestor]\\ + A t & {\bf Translate} this article.\\ + A R & Fetch all articles mentioned in the {\bf References}-header.\\ + A T & Fetch full \textbf{thread} in which the current article appears.\\ + M-\^{} & Fetch the article with a given Message-ID.\\ + S y & {\bf Yank} the current article into an existing message-buffer. + [p/p]\\ + A M & Setup group parameters for {\bf mailing} lists from + headers. [Prefix: replace old settings]\\ + \end{keys} + } + } + + \newcommand{\MIMESummary}{% + {\esamepage + For the commands operating on one MIME part (a subset of gnus-article-*), a + prefix selects which part to operate on. If the point is placed over a + MIME button in the article buffer, use the corresponding bindings for the + article buffer instead. + + \begin{keys}{W M w} + K v & (b, W M b) {\bf View} the MIME-part.\\ + K o & {\bf Save} the MIME part.\\ + K c & {\bf Copy} the MIME part.\\ + K e & View the MIME part {\bf externally}.\\ + K i & View the MIME part {\bf internally}.\\ + K $\mid$ & Pipe the MIME part to an external command.\\ + K b & Make all the MIME parts have buttons in front of them.\\ + K m & Try to repair {\bf multipart-headers}.\\ + K C & View the MIME part using a different {\bf charset}.\\ + X m & Save all parts matching a MIME type to a directory. [p/p]\\ + M-t & Toggle the buttonized display of the article buffer.\\ + W M w & Decode RFC2047-encoded words in the article headers.\\ + W M c & Decode encoded article bodies. [Prefix: prompt for charset]\\ + W M v & View all MIME parts in the current article.\\ + \end{keys} + } + } + + \newcommand{\SortSummary}{% + {\esamepage + \begin{keys}{C-c C-s C-a} + C-c C-s C-a & Sort the summary-buffer by {\bf author}.\\ + % C-c C-s C-t & Sort the summary-buffer by {\bf recipient}.\\ % No Gnus + C-c C-s C-d & Sort the summary-buffer by {\bf date}.\\ + C-c C-s C-i & Sort the summary-buffer by article score.\\ + C-c C-s C-l & Sort the summary-buffer by amount of {\bf lines}.\\ + C-c C-s C-c & Sort the summary-buffer by length.\\ + C-c C-s C-n & Sort the summary-buffer by article {\bf number}.\\ + C-c C-s C-s & Sort the summary-buffer by {\bf subject}.\\ + C-c C-s C-r & Sort the summary-buffer {\bf randomly}.\\ + C-c C-s C-o & Sort the summary-buffer using the default method.\\ + \end{keys} + With a prefix these functions sort in reverse order. + } + } + + \newcommand{\MailGroups}{% formerly \Bsubmap + {\esamepage + These commands (except `B c') are only valid in a mail group.\\* + \begin{keys}{B M-C-e} + B DEL & (B backspace, B delete) {\bf Delete} the mail article from disk (!). + [p/p]\\ + B B & Crosspost this article to another group.\\ + B c & {\bf Copy} this article from any group to a mail group. [p/p]\\ + B e & {\bf Expire} all expirable articles in this group. [p/p]\\ + B i & {\bf Import} a random file into this group.\\ + B I & Create an empty article in this group.\\ + B m & {\bf Move} the article from one mail group to another. [p/p]\\ + B p & Query whether the article was {\bf posted} as well.\\ + B q & {\bf Query} where the article will end up after fancy splitting\\ + B r & {\bf Respool} this mail article. [p/p]\\ + B t & {\bf Trace} the fancy splitting patterns applied to this article.\\ + B w & (e) Edit this article.\\ + B M-C-e & {\bf Expunge} (delete from disk) all expirable articles in this group + (!). [p/p]\\ + K E & {\bf Encrypt} article body. [p/p]\\ + \end{keys} + } + } + + \newcommand{\DraftGroup}{% formerly \Dsubmap + {\esamepage + The ``drafts''-group contains messages that have been saved but not sent + and rejected articles. \\* + \begin{keys}{B DEL} + D e & \textbf{edit} message.\\ + D s & \textbf{Send} message. [p/p]\\ + D S & \textbf{Send} all messages.\\ + D t & \textbf{Toggle} sending (mark as unsendable).\\ + B DEL & \textbf{Delete} message (like in mailgroup).\\ + \end{keys} + } + } + + \newcommand{\SelectArticles}{% formerly \Gsubmap + {\esamepage + These commands select the target article. They do not understand the prefix.\\* + \begin{keys}{G C-n} + h & Enter article-buffer.\\ + G b & (,) Go to the {\bf best} article (the one with highest score).\\ + G f & (.) Go to the {\bf first} unread article.\\ + G n & (n) Go to the {\bf next} unread article.\\ + G p & (p) Go to the {\bf previous} unread article.\\ + % + G N & (N) Go to {\bf the} next article.\\ + G P & (P) Go to the {\bf previous} article.\\ + % + G C-n & (M-C-n) Go to the {\bf next} article with the same subject.\\ + G C-p & (M-C-p) Go to the {\bf previous} article with the same subject.\\ + % + G l & (l) Go to the previously read article ({\bf last-read-article}).\\ + G o & Pop an article off the summary history and go to it.\\ + % + G g & Search an article via subject.\\ + G j & (j) Search an article via Message-Id or subject.\\ + \end{keys} + } + } + + \newcommand{\ArticleModeGeneral}{% + {\esamepage + The normal navigation keys work in Article mode. Some additional keys are:\\ + \begin{keys}{C-c RET} + C-c \^{} & Get the article with the Message-ID near point.\\ + C-c RET & Send reply to address near point.\\ + h & Go to the \textbf{header}-line of the article in the + summary-buffer.\\ + s & Go to \textbf{summary}-buffer.\\ + RET & (middle mouse button) Activate the button at point to follow + an URL or Message-ID.\\ + TAB & Move the point to the next button.\\ + M-TAB & Move point to previous button.\\ + \end{keys} + } + } + + \newcommand{\WashArticle}{% formerly \Wsubmap + {\esamepage + \begin{keys}{W W H} + W 6 & Translate a base64 article.\\ + W a & Strip certain {\bf headers} from body.\\ + W b & Make Message-IDs and URLs in the article mouse-clickable + {\bf buttons}.\\ + W c & Translate CRLF-pairs to LF and then the remaining CR's to LF's.\\ + W d & Treat {\bf dumbquotes}.\\ + W e & Treat {\bf emphasized} text.\\ + W h & Treat {\bf HTML}.\\ + W l & (w) Remove page breaks ({\bf\^{}L}) from the article.\\ + W m & {\bf Morse} decode article.\\ + W o & Treat {\bf overstrike} or underline (\^{}H\_) in the article.\\ + W p & Verify X-{\bf PGP}-Sig header.\\ + W q & Treat {\bf quoted}-printable in the article.\\ + W r & (C-c C-r) Do a Caesar {\bf rotate} (rot13) on the article.\\ + W s & Verify (and decrypt) a {\bf signed} message.\\ + W t & (t) {\bf Toggle} display of all headers.\\ + W u & {\bf Unsplit} broken URLs.\\ + W v & (v) Toggle permanent {\bf verbose} displaying of all headers.\\ + W w & Do word {\bf wrap} in the article.\\ + W B & Add clickable {\bf buttons} to the article headers.\\ + W C & {\bf Capitalize} first word in each sentence.\\ + W Q & Fill long lines.\\ + W Z & Translate a HZ-encoded article.\\ + % + W G u & {\bf Unfold} folded header lines.\\ + W G f & {\bf Fold} all header lines.\\ + W G n & Unfold {\bf Newsgroups:} and Follow-Up-To:.\\ + % + W Y c & Repair broken {\bf citations}.\\ + W Y a & Repair broken {\bf attribution} lines.\\ + W Y u & {\bf Unwrap} broken citation lines.\\ + W Y f & Do a {\bf full} deuglification (W Y c, W Y a, W Y u).\\ + \end{keys} + } + } + + \newcommand{\BlankAndWhitespace}{% + {\esamepage + \begin{keys}{W E w} + W E l & Strip blank {\bf lines} from the beginning of the article.\\ + W E m & Replace blank lines with empty lines and remove {\bf multiple} + blank lines.\\ + W E t & Remove {\bf trailing} blank lines.\\ + W E a & Strip blank lines at the beginning and the end + (W E l, W E m and W E t).\\ + W E A & Strip {\bf all} blank lines.\\ + W E s & Strip leading blank lines from the article body.\\ + W E e & Strip trailing blank lines from the article body.\\ + W E w & Remove leading {\bf whitespace} from all headers.\\ + \end{keys} + } + } + + \newcommand{\Picons}{% + {\esamepage + \begin{keys}{W D D} + W D s & (W g) Display {\bf smilies}.\\ + W D x & (W f) Look for and display any X-{\bf Face} headers.\\ + W D d & Display any Face headers.\\ + W D n & Toggle picons in {\bf Newsgroups} and Followup-To.\\ + W D m & Toggle picons in {\bf mail} headers (To and Cc).\\ + W D f & Toggle picons in {\bf From}.\\ + W D D & Remove all images from the article buffer.\\ + \end{keys} + } + } + + \newcommand{\TimeAndDate}{% + {\esamepage + \begin{keys}{W T u} + W T u & (W T z) Display the article timestamp in GMT ({\bf UT, ZULU}).\\ + W T i & Display the article timestamp in {\bf ISO} 8601.\\ + W T l & Display the article timestamp in the {\bf local} timezone.\\ + W T s & Display according to `gnus-article-time-format'.\\ + W T e & Display the time {\bf elapsed} since it was sent.\\ + W T o & Display the {\bf original} timestamp.\\ + W T p & Display the date in format that's {\bf + pronounceable} in English.\\ + \end{keys} + } + } + + \newcommand{\HideHighlightArticle}{% + {\esamepage + \begin{keys}{W W C-c} + W W a & Hide {\bf all} unwanted parts. Calls W W h, W W s, W W C-c.\\ + W W h & Hide article {\bf headers}.\\ + W W b & Hide {\bf boring} headers.\\ + W W s & Hide {\bf signature}.\\ + W W l & Hide {\bf list} identifiers in subject-header.\\ + W W P & Hide {\bf PEM} (privacy enhanced messages).\\ + W W B & Hide banner specified by group parameter.\\ + W W c & Hide {\bf citation}.\\ + W W C-c & Hide {\bf citation} using a more intelligent algorithm.\\ + W W C & Hide cited text in articles that aren't roots.\\ + W H a & Highlight {\bf all} parts. Calls W b, W H c, W H h, W H s.\\ + W H c & Highlight article {\bf citations}.\\ + W H h & Highlight article {\bf headers}.\\ + W H s & Highlight article {\bf signature}.\\ + \end{keys} + For all hiding-commands: A positive prefix always hides, and a negative + prefix will show what was previously hidden. + }} + + \newcommand{\MIMEArticleMode}{% + {\esamepage + \begin{keys}{RET} + RET & (BUTTON-2) Toggle display of the MIME object.\\ + v & Prompt for a method and then view object using this method.\\ + o & Prompt for a filename and save the MIME object.\\ + C-o & Prompt for a filename to save the MIME object to and remove it.\\ + d & {\bf Delete} the MIME object.\\ + c & {\bf Copy} the MIME object to a new buffer and display this buffer.\\ + i & Display the MIME object in this buffer.\\ + C & Copy the MIME object to a new buffer and display this buffer using {\bf Charset} \\ + E & View internally. \\ + e & View {\bf externally}. \\ + t & View the MIME object as a different {\bf type}.\\ + p & {\bf Print} the MIME object.\\ + $\mid$ & Pipe the MIME object to a process.\\ + . & Take action on the MIME object.\\ + \end{keys} + } + } + + %% end of article mode for reading .......................................... + + \newcommand{\MarkArticlesGeneral}{% formerly \Msubmap + {\esamepage + \begin{keys}{M M-C-r} + d & (M d, M r) Mark this article as read and move to the next one. + [scope]\\ + D & Mark this article as read and move to the previous one. [scope]\\ + ! & (u, M !, M t) Tick this article (mark it as interesting) and move + to the next one. [scope]\\ + U & Tick this article and move to the previous one. [scope]\\ + M ? & (?) Mark this article as dormant (only followups are + interesting). [scope]\\ + M D & Show all {\bf dormant} articles (normally they are hidden unless they + have any followups).\\ + M M-D & Hide all {\bf dormant} articles.\\ + C-w & Mark all articles between point and mark as read.\\ + M-u & (M SPC, M c) Clear all marks from this article and move to the next + one. [scope]\\ + M-U & Clear all marks from this article and move to the previous one. + [scope]\\ + % + M e & (E, M x) Mark this article as {\bf expirable}. [scope]\\ + % + M k & (k) {\bf Kill} all articles with the same subject then select the + next unread one.\\ + M K & (C-k) {\bf Kill} all articles with the same subject as this one.\\ + % + M C & {\bf Catch-up} the articles that are not ticked and not dormant.\\ + M C-c & {\bf Catch-up} all articles in this group.\\ + M H & {\bf Catch-up} (mark read) this group to point (to-{\bf here}).\\ + % + M b & Set a {\bf bookmark} in this article.\\ + M B & Remove the {\bf bookmark} from this article.\\ + % + M M-r & (x) Expunge all {\bf read} articles from this group.\\ + M M-C-r & Expunge all articles having a given mark.\\ + M S & (C-c M-C-s) {\bf Show} all expunged articles.\\ + M M C-h & Displays some more keys doing ticking slightly differently.\\ + \end{keys} + The variable `gnus-summary-goto-unread' controls what happens after a mark + has been set (C-x C-i g Setting Marks RET) + }} + + \newcommand{\MarkByScore}{% + \begin{keys}{M V m} + M V c & {\bf Clear} all marks from all high-scored articles. [score]\\ + M V k & {\bf Kill} all low-scored articles. [score]\\ + M V m & Mark all high-scored articles with a given {\bf mark}. [score]\\ + M V u & Mark all high-scored articles as interesting (tick them). [score]\\ + \end{keys} + } + } + +\newcommand{\ProcessMark}{% + {\esamepage + These commands set and remove the process mark (\#). You only need to use + it if the set of articles you want to operate on is non-contiguous. Else + use a numeric prefix.\\* + \begin{keys}{M P R} + M P p & (\#, M \#) Mark this article.\\ + M P u & (M-\#, M M-\#) \textbf{unmark} this article.\\ + M P b & Mark all articles in {\bf buffer}.\\ + M P r & Mark all articles in the {\bf region}.\\ + M P g & Unmark all articles in the region.\\ + M P R & Mark all articles matching a {\bf regexp}.\\ + M P G & Unmark all articles matching a regexp.\\ + M P t & Mark all articles in this (sub){\bf thread}.\\ + M P T & Unmark all articles in this (sub){\bf thread}.\\ + M P s & Mark all articles in the current {\bf series}.\\ + M P S & Mark all {\bf series} that already contain a marked article.\\ + M P a & Mark {\bf all} articles (in series order).\\ + M P U & \textbf{unmark} all articles.\\ + M P i & {\bf Invert} the list of process-marked articles.\\ + M P k & Push the current process-mark set onto stack and unmark + all articles.\\ + M P y & Pop process-mark set from stack and restore it.\\ + M P w & Push process-mark set on the stack.\\ + M P v & Mark all articles with score over the default score. [Prefix: score]\\ + \end{keys} + } + } + +\newcommand{\Limiting}{% + {\esamepage + \begin{keys}{/M} + // & (/s) Limit the summary-buffer to articles matching {\bf subject}.\\ + /a & Limit the summary-buffer to articles matching {\bf author}.\\ + /x & Limit depending on ``extra'' headers.\\ + /u & (x) Limit to {\bf unread} articles. + [Prefix: also exclude ticked and dormant articles]\\ + /. & Limit to unseen articles.\\ + /m & Limit to articles marked with specified {\bf mark}.\\ + /t & Ask for a number and exclude articles younger than that many days. + [Prefix: exclude older articles]\\ + /n & Limit to current article. [p/p]\\ + /w & Pop the previous limit off the stack and restore it. + [Prefix: pop all limits]\\ + /v & Limit to score. [score]\\ + /E & (M S) Include all expunged articles in the limit.\\ + /D & Include all dormant articles in the limit.\\ + /* & Limit to cached articles.\\ + Y C & Include all cached articles in the limit.\\ + /d & Exclude all dormant articles from the limit.\\ + /M & Exclude all marked articles.\\ + /T & Include all articles from the current thread in the limit.\\ + /c & Exclude all dormant articles that have no children from the limit.\\ + /C & Mark all excluded unread articles as read. + [Prefix: also mark ticked and dormant articles]\\ + /o & Insert all {\bf old} articles. [Prefix: how many]\\ + /N & Insert all {\bf new} articles.\\ + /p & Limit to articles {\bf predicated} in the `display' group parameter.\\ + % /r & Limit to {\bf replied} articles. [Prefix: unreplied]\\ % No Gnus + \end{keys} + } + } + +\newcommand{\OutputArticles}{% formerly \Osubmap + {\esamepage + \begin{keys}{O m} + O o & (o, C-o) Save this article using the default article saver. [p/p]\\ + O b & Save this article's {\bf body} in plain file format [p/p]\\ + O f & Save this article in plain {\bf file} format. [p/p]\\ + O F & like O f, but overwrite file's contents. [p/p]\\ + O h & Save this article in {\bf mh} folder format. [p/p]\\ + O m & Save this article in {\bf mail} format. [p/p]\\ + O r & Save this article in {\bf rmail} format. [p/p]\\ + O v & Save this article in {\bf vm} format. [p/p]\\ + O p & ($\mid$) {\bf Pipe} this article to a shell command. [p/p]\\ + O P & \textbf{Print} this article using Muttprint. [p/p]\\ + \end{keys} + } + } + +\newcommand{\PostReplyetc}{% formerly \Ssubmap + {\esamepage + These commands put you in a separate news or mail buffer. See the section + about composing messages for more information.\\* + %After + %editing the article, send it by pressing C-c C-c. If you are in a + %foreign group and want to post the article using the foreign server, give + %a prefix to C-c C-c.\\* + \begin{keys}{S O m} + S p & (a) {\bf Post} an article to this group.\\ + S f & (f) Post a {\bf followup} to this article.\\ + S F & (F) Post a {\bf followup} and include the original. [p/p]\\ + S o p & Forward this article as a {\bf post} to a newsgroup.\\ + S M-c & Send a complaint about excessive crossposting to the author of this + article. [p/p]\\ + % + S m & (m) Send a {\bf mail} to some other person.\\ + S r & (r) Mail a {\bf reply} to the author of this article.\\ + S R & (R) Mail a {\bf reply} and include the original. [p/p]\\ + S B r & Like S r but ignore the Reply-To: header.\\ + S B R & Like S R but ignore the Reply-To: header.\\ + S w & Mail a {\bf wide} reply to this article.\\ + S W & Mail a {\bf wide} reply to this article and include + the original.\\ + S v & Mail a {\bf very} wide reply to this article.\\ + S V & Mail a {\bf very} wide reply to this article and include the original.\\ + S o m & (C-c C-f) Forward this article by {\bf mail} to a person.\\ + S D b & Resend {\bf bounced} mail.\\ + S D r & {\bf Resend} mail to a different person.\\ + S D e & {\bf Edit} and resend.\\ + % + S n & Post a followup via {\bf news} even if you got the message + through mail.\\ + S N & Post a followup via {\bf news} and include the original mail. + [p/p]\\ + % + S c & (C) {\bf Cancel} this article (only works if it is + your own). [p/p]\\ + S s & {\bf Supersede} this article with a new one (only for own + articles).\\ + % + S O m & Digest these series and forward by {\bf mail}. [p/p]\\ + S O p & Digest these series and forward as a {\bf post} to a newsgroup. + [p/p]\\ + % + S u & {\bf Uuencode} a file and post it as a series.\\ + \end{keys} + If you want to cancel or supersede an article you just posted (before it + has appeared on the server), go to the *post-news* buffer, change + `Message-ID' to `Cancel' or `Supersedes' and send it again with C-c C-c. + }} + +\newcommand{\Threading}{% formerly \Tsubmap + {\esamepage + \begin{keys}{T M-\#} + T \# & Mark this thread with the process mark.\\ + T M-\# & Remove process-marks from this thread.\\ + % + T t & Re-{\bf thread} the current article's thread.\\ + T \^{} & Make the current article child of the marked (or previous) article.\\ + % movement + T n & (M-C-f, M-down) Go to the {\bf next} thread. [distance]\\ + T p & (M-C-b, M-up) Go to the {\bf previous} thread. [distance]\\ + T d & {\bf Descend} this thread. [distance]\\ + T u & Ascend this thread ({\bf up}-thread). [distance]\\ + T o & Go to the top of this thread.\\ + % + T s & {\bf Show} the thread hidden under this article.\\ + T h & {\bf Hide} this (sub)thread.\\ + % + T i & {\bf Increase} the score of this thread.\\ + T l & (M-C-l) {\bf Lower} the score of this thread.\\ + % + T k & (M-C-k) {\bf Kill} the current (sub)thread. [Negative prefix: + tick it, positive prefix: unmark it.]\\ + % + T H & {\bf Hide} all threads.\\ + T S & {\bf Show} all hidden threads.\\ + T T & (M-C-t) {\bf Toggle} threading.\\ + \end{keys} + } + } + +\newcommand{\Scoring}{% formerly \Vsubmap + {\esamepage + Read about Adaptive Scoring in the online info.\\* + \begin{keys}{\bf A p m l} + V a & {\bf Add} a new score entry, specifying all elements.\\ + V c & Specify a new score file as {\bf current}.\\ + V e & {\bf Edit} the current score alist.\\ + V f & Edit a score {\bf file} and make it the current one.\\ + V m & {\bf Mark} all articles below a given score as read.\\ + V s & Set the {\bf score} of this article.\\ + V t & Display all score rules applied to this article ({\bf track}).\\ + W w & List {\bf words} used in scoring.\\ + V x & {\bf Expunge} all low-scored articles. [score]\\ + V C & {\bf Customize} the current score file through a user-friendly + interface.\\ + V F & {\bf Flush} the cache of score files.\\ + V R & {\bf Re-score} the summary buffer.\\ + V S & Display the {\bf score} of this article.\\ + \bf A p m l& Make a scoring entry based on this article.\\ + \end{keys} + The four letters stand for:\\* + \quad \B{A}ction: I)ncrease, L)ower;\\* + \quad \B{p}art: a)uthor (from), s)ubject, x)refs (cross-posting), d)ate, l)ines, + message-i)d, t)references (parent), f)ollowup, b)ody, h)ead (all headers);\\* + \quad \B{m}atch type:\\* + \qquad string: s)ubstring, e)xact, r)egexp, f)uzzy,\\* + \qquad date: b)efore, a)t, n)this,\\* + \qquad number: $<$, =, $>$;\\* + \quad \B{l}ifetime: t)emporary, p)ermanent, i)mmediate. + + If you type the second letter in uppercase, the remaining two are assumed + to be s)ubstring and t)emporary. + If you type the third letter in uppercase, the last one is assumed to be + t)emporary. + + \quad Extra keys for manual editing of a score file:\\* + \begin{keys}{C-c C-c} + C-c C-c & Finish editing the score file.\\ + C-c C-d & Insert the current {\bf date} as number of days.\\ + \end{keys} + } + } + +\newcommand{\ExtractSeries}{% formerly \Xsubmap + {\esamepage + Gnus recognizes if the current article is part of a series (multipart + posting whose parts are identified by numbers in their subjects, e.g.{} + 1/10\dots10/10) and processes the series accordingly. You can mark and + process more than one series at a time. If the posting contains any + archives, they are expanded and gathered in a new group.\\* + \begin{keys}{X p} + X b & Un-{\bf binhex} these series. [p/p]\\ + X o & Simply {\bf output} these series (no decoding). [p/p]\\ + X p & Unpack these {\bf postscript} series. [p/p]\\ + X s & Un-{\bf shar} these series. [p/p]\\ + X u & {\bf Uudecode} these series. [p/p]\\ + \end{keys} + + Each one of these commands has four variants:\\* + \begin{keys}{X v \bf Z} + X \bf z & Decode these series. [p/p]\\ + X \bf Z & Decode and save these series. [p/p]\\ + X v \bf z & Decode and view these series. [p/p]\\ + X v \bf Z & Decode, save and view these series. [p/p]\\ + \end{keys} + where {\bf z} or {\bf Z} identifies the decoding method (b, o, p, s, u). + + An alternative binding for the most-often used of these commands is\\* + \begin{keys}{C-c C-v C-v} + C-c C-v C-v & (X v u) Uudecode and view these series. [p/p]\\ + \end{keys} + }} + +\newcommand{\ExitSummary}{% formerly \Zsubmap + {\esamepage + \begin{keys}{Z G} + Z Z & (q, Z Q) Exit this group.\\ + Z E & (Q) {\bf Exit} without updating the group information.\\ + % + Z c & (c) Mark all unticked articles as read ({\bf catch-up}) and exit.\\ + Z C & Mark all articles as read ({\bf catch-up}) and exit.\\ + % + Z n & Mark all articles as read and go to the {\bf next} group.\\ + Z N & Exit and go to {\bf the} next group.\\ + Z P & Exit and go to the {\bf previous} group.\\ + % + Z G & (M-g) Check for new articles in this group ({\bf get}).\\ + Z R & (C-x C-s) Exit this group, and then enter it again ({\bf reenter}). + [Prefix: select all articles, read and unread.]\\ + Z s & Update and save the dribble buffer. [Prefix: save .newsrc* as well]\\ + \end{keys} + } + } + +\newcommand{\MsgCompositionGeneral}{% + Press C-c ? in the composition-buffer to get this information.\\* + {\esamepage + \begin{keys}{C-c C-m} + % sending + C-c C-c & Send message and exit. [Prefix: send via foreign server]\\ + C-c C-s & Send message. [Prefix: send via foreign server]\\ + C-c C-d & Don't send message (save as \textbf{draft}).\\ + C-c C-k & \textbf{Kill} message-buffer.\\ + C-c C-m & {\bf Mail} reply to the address near point. + [Prefix: include the original]\\ + % modify headers/body + C-c C-o & Sort headers.\\ + C-c C-e & \textbf{Elide} region.\\ + C-c C-v & Kill everything outside region.\\ + C-c C-r & Do a \textbf{Rot-13} on the body.\\ + C-c C-w & Insert signature (from `message-signature-file').\\ + C-c C-z & Kill everything up to signature.\\ + C-c C-y & \textbf{Yank} original message.\\ + C-c C-q & Fill the yanked message.\\ + C-c M-C-y & \textbf{Yank} a buffer and quote it.\\ + M-RET & Insert four newlines and format quoted text. [Prefix: + justify as well]\\ + C-c M-r & \textbf{Rename} message buffer. [Prefix: ask for new name]\\ + \end{keys} + } + } + +\newcommand{\MsgCompositionMovementArticle}{% + The following functions create the header-field if necessary.\\* + {\esamepage + \begin{keys}{C-c C-f C-u} + C-c TAB & Move to \textbf{signature}.\\ + C-c C-b & Move to \textbf{body}.\\ + C-c C-f C-t & (C-c C-t) Move to \textbf{To:}.\\ + C-c C-f C-c & Move to \textbf{Cc:}.\\ + C-c C-f C-b & Move to \textbf{Bcc:}.\\ + C-c C-f C-w & Move to \textbf{Fcc:}.\\ + C-c C-f C-s & Move to \textbf{Subject:}.\\ + C-c C-f C-r & Move to \textbf{Reply-To:}.\\ + C-c C-f C-f & Move to \textbf{Followup-To:}.\\ + C-c C-f C-n & (C-c C-n) Move to \textbf{Newsgroups:}.\\ + C-c C-f C-u & Move to \textbf{Summary:}.\\ + C-c C-f C-k & Move to \textbf{Keywords:}.\\ + C-c C-f C-d & Move to \textbf{Distribution:}.\\ + C-c C-f C-m & Move to \textbf{Mail-Followup-To:}.\\ + C-c C-f C-o & Move to \textbf{From:}.\\ + C-c C-f C-a & Insert a reasonable \textbf{Mail-Followup-To:} for + an unsubscribed list. [Prefix: include addresses in \textbf{Cc:}]\\ + C-c C-f TAB & (C-c C-u) Move to \textbf{Importance:}.\\ + C-c M-n & Insert \textbf{Disposition-Notification-To:} + (request receipt).\\ + \end{keys} + } + } + +\newcommand{\MsgCompositionMML}{% + {\esamepage + \begin{keys}{C-c C-m P} + C-c C-m f & (C-c C-a) Attach \textbf{file}.\\ + C-c C-m b & Attach contents of \textbf{buffer}.\\ + C-c C-m e & Attach \textbf{external} file (ftp..).\\ + C-c C-m P & Create MIME-\textbf{preview} (new + buffer). [Prefix: show raw MIME preview]\\ + C-c C-m v & \textbf{Validate} article.\\ + C-c C-m p & Insert \textbf{part}.\\ + C-c C-m m & Insert \textbf{multi}-part.\\ + C-c C-m q & \textbf{Quote} region.\\ + C-c C-m c s & Encrypt message using \textbf{S/MIME}.\\ + C-c C-m c o & Encrypt message using PGP.\\ + C-c C-m c p & Encrypt message using \textbf{PGP/MIME}.\\ + C-c C-m s s & Sign message using \textbf{S/MIME}.\\ + C-c C-m s o & Sign message using PGP.\\ + C-c C-m s p & Sign message using \textbf{PGP/MIME}.\\ + C-c C-m C-n & Remove security related MML tags from message.\\ + % TODO: narrow headers (C-c C-m n) ? + \end{keys} + } + } + +%% TODO: +\newcommand{\ServerMode}{% + {\esamepage + To enter this mode, press \^{} while in Group mode.\\* + \begin{keys}{SPC} + SPC & (RET) Browse this server.\\ + a & {\bf Add} a new server.\\ + c & {\bf Copy} this server.\\ + e & {\bf Edit} a server.\\ + k & {\bf Kill} this server. [scope]\\ + l & {\bf List} all servers.\\ + q & Return to the group buffer ({\bf quit}).\\ + s & Request that the server scan its sources for new articles.\\ + g & Request that the server regenerate its data.\\ + y & {\bf Yank} the previously killed server.\\ + O & Try to {\bf open} a connection to this server.\\ + C & {\bf Close} connection to this server.\\ + D & Mark this server as unreachable ({\bf deny}).\\ + M-o & {\bf Open} the connection to all servers.\\ + M-c & {\bf Close} the connection to all servers.\\ + R & Make all denied servers into closed servers.\\ + L & Set server status to offline.\\ + \end{keys} + } + } + +\newcommand{\BrowseServer}{% + {\esamepage + To enter this mode, press `B' while in Group mode.\\* + \begin{keys}{RET} + RET & Enter the current group.\\ + SPC & Enter the current group and display the first article.\\ + ? & Give a very short help message.\\ + n & Go to the {\bf next} group. [distance]\\ + p & Go to the {\bf previous} group. [distance]\\ + q & (l) {\bf Quit} browse mode.\\ + u & Subscribe to the current group. [scope]\\ + \end{keys} + } + } + +\newcommand{\GroupUnplugged}{% + {\esamepage + \begin{keys}{J S} + J j & Toggle plugged-state.\\ + J s & Fetch articles from all groups for offline-reading.\\ + J u & Fetch all eligible articles from this group.\\ + J S & \textbf{Send} all sendable messages in the drafts group.\\ + % + J c & Enter \textbf{category} buffer.\\ + J a & \textbf{Add} this group to an Agent category [p/p].\\ + J r & \textbf{Remove} this group from its Agent category [p/p].\\ + J Y & Synchronize flags changed while unplugged with remote server.\\ + \end{keys} + } + } + +\newcommand{\SummaryUnplugged}{% + {\esamepage + \begin{keys}{J M-\#} + J \# & \textbf{Mark} the article for downloading.\\ + J M-\# & \textbf{Unmark} the article for downloading.\\ + @ & \textbf{Toggle} whether to download the article.\\ + J c & Mark all undownloaded articles as read (\textbf{catch-up}).\\ + J u & Download all downloadable articles from group.\\ + \end{keys} + } + } + +\newcommand{\ServerUnplugged}{% + {\esamepage + \begin{keys}{J a} + J a & \textbf{Add} the current server to the list of servers covered + by the agent.\\ + J r & \textbf{Remove} the current server from the list of servers covered + by the agent.\\ + \end{keys} + } + } + +% end {gnusref} % % % % % % % % % % % % % % % % % % % % % % % % % % + + +% o some things might not be updated: scoring and server modes, maybe more +% o Gnus Unplugged category-buffer commands need to be written + +\begin{document} + +\def\progver{5.10}\def\refver{5.10-1} % program and refcard versions +\def\date{Jan 10th, 2004} +\def\author{Gnus Bugfixing Girls + Boys $<$bugs@gnus.org$>$} + +\ifthenelse{\isundefined{\booklettrue}}{ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \raggedbottom\raggedright + \twocolumn + % use \tiny to shrink it to 4 pages (needs a high-resolution printer though) + % \tiny + \scriptsize + \pagestyle{plain} + \Title + \par + \Logo{refcard} +}{ + \setcounter{page}{0} + \thispagestyle{empty} + \vspace*{\fill} + \Title + \vspace{0.4in} + \Logo{booklet} + \vspace*{\fill} + \pagebreak +}%ifbooklet% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% TODO: how does this work ? +%\tableofcontents + +\Notes +% + +\section*{Group-Mode} +\GroupModeGeneral + \subsection*{Group Subscribedness-Levels} + \GroupLevels + \subsection*{List Groups} + \ListGroups + \subsection*{Create/Edit Foreign Groups} + \CreateEditGroups + \subsection*{Unsubscribe, Kill and Yank Groups} + \SubscribeKillYankGroups + \subsection*{Mark Groups} + \MarkGroups + \subsection*{Group-Unplugged} + \GroupUnplugged +% topics in group-mode + \subsection*{Group Topics} + \GroupTopicsGeneral + \subsubsection*{Topic Sorting} + \TopicSorting + +% \ifthenelse{\isundefined{\booklettrue}}{}{\pagebreak} + +% summary-mode +\section*{Summary Mode} +\SummaryModeGeneral + \subsection*{Select Articles} + \SelectArticles +% + \subsection*{Threading} + \Threading +% + \subsection*{Limiting} + \Limiting + \subsection*{Sort the Summary-Buffer} + \SortSummary + \subsection*{Score (Value) Commands} + \Scoring + +\ifthenelse{\isundefined{\booklettrue}}{% ifcard %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \subsection*{Output Articles} + \OutputArticles + \subsection*{Extract Series (Uudecode etc)} + \ExtractSeries +}{}%ifcard% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + \subsection*{MIME operations from the Summary-Buffer} + \MIMESummary + +\ifthenelse{\isundefined{\booklettrue}}{}{% ifbooklet %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \subsection*{Extract Series (Uudecode etc)} + \ExtractSeries + \subsection*{Output Articles} + \OutputArticles +}%ifbooklet% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% + \subsection*{Post, Followup, Reply, Forward, Cancel} + \PostReplyetc + +\ifthenelse{\isundefined{\booklettrue}}{\newpage}{}% newpage ifcard + + \subsection*{Message Composition} + + \MsgCompositionGeneral + \subsubsection*{Jumping in message-buffer} + \MsgCompositionMovementArticle + \subsubsection*{Attachments/MML} + \MsgCompositionMML +% marking articles + \subsection*{Mark Articles} + \MarkArticlesGeneral + \subsubsection*{Mark Based on Score} + \MarkByScore + \subsubsection*{The Process Mark} + \ProcessMark + \subsubsection*{Mark Indication-Characters} + \MarkCharacters +% +\ifthenelse{\isundefined{\booklettrue}}{\newpage}{}% + + \subsection*{Summary-Unplugged} + \SummaryUnplugged + \subsection*{Mail-Group Commands} + \MailGroups + \subsection*{Draft-Group Commands} + \DraftGroup +% exiting + \subsection*{Exit the Summary-Buffer} + \ExitSummary +% +% +\section*{Article Mode (reading)} +\ArticleModeGeneral + \subsection*{Wash the Article-Buffer} + \WashArticle + \subsubsection*{Blank Lines and Whitespace} + \BlankAndWhitespace + \subsubsection*{Picons, X-faces, Smileys} + \Picons + \subsubsection*{Time and Date} + \TimeAndDate + \subsection*{Hide/Highlight Parts of the Article} + \HideHighlightArticle + \subsection*{MIME operations from the Article-Buffer (reading)} + \MIMEArticleMode +% +% +\section*{Server Mode} +\ServerMode + \subsection*{Unplugged-Server} + \ServerUnplugged +% +% +\section*{Browse Server Mode} +\BrowseServer + +%\pagebreak +\vspace*{\fill} +\Copyright + +\end{document} + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: t +%%% End: + +% arch-tag: be438b0e-6832-4afb-8c56-5f84743e5cd1 diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 3c7c3d3d5c4..fe2fcab6643 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,94 @@ +2005-03-25 Katsumi Yamaoka <yamaoka@jpl.org> + + * message.el (message-resend): Bind rfc2047-encode-encoded-words. + + * mm-util.el (mm-replace-in-string): New function. + (mm-xemacs-find-mime-charset-1): Ignore errors while loading + latin-unity, which cannot be used with XEmacs 21.1. + + * rfc2047.el (rfc2047-encode-function-alist): Rename from + rfc2047-encoding-function-alist in order to avoid conflicting with + the old version. + (rfc2047-encode-message-header): Remove useless goto-char. + (rfc2047-encodable-p): Don't move point. + (rfc2047-syntax-table): Treat `(' and `)' as is. + (rfc2047-encode-region): Concatenate words containing non-ASCII + characters in structured fields; don't encode space-delimited + ASCII words even in unstructured fields; don't break words at + char-category boundaries; encode encoded words in structured + fields; treat text within parentheses as special; show the + original text when error has occurred; move point to the end of + the region after encoding, suggested by IRIE Tetsuya + <irie@t.email.ne.jp>; treat backslash-quoted characters as + non-special; check carefully whether to encode special characters; + fix some kind of misconfigured headers; signal a real error if + debug-on-quit or debug-on-error is non-nil; don't infloop, + suggested by Hiroshi Fujishima <pooh@nature.tsukuba.ac.jp>; assume + the close parenthesis may be included in the encoded word; encode + bogus delimiters. + (rfc2047-encode-string): Use mm-with-multibyte-buffer. + (rfc2047-encode-max-chars): New variable. + (rfc2047-encode-1): New function. + (rfc2047-encode): Use it; encode text so that it occupies the + maximum width within 76-column; work correctly on Q encoding for + iso-2022-* charsets; fold the line before encoding; don't append a + space if the encoded word includes close parenthesis. + (rfc2047-fold-region): Use existing whitespace for LWSP; make it + sure not to break a line just after the header name. + (rfc2047-b-encode-region): Remove. + (rfc2047-b-encode-string): New function. + (rfc2047-q-encode-region): Remove. + (rfc2047-q-encode-string): New function. + (rfc2047-encode-parameter): New function. + (rfc2047-encoded-word-regexp): Don't use shy group. + (rfc2047-decode-region): Follow rfc2047-encoded-word-regexp change. + (rfc2047-parse-and-decode): Ditto. + (rfc2047-decode): Treat the ascii coding-system as raw-text by + default. + +2005-03-25 Lars Magne Ingebrigtsen <larsi@gnus.org> + + * rfc2047.el (rfc2047-encode-encoded-words): New variable. + (rfc2047-field-value): Strip props. + (rfc2047-encode-message-header): Disabled header folding -- not + all headers can be folded, and this should be done by the message + composition mode. Probably. I think. + (rfc2047-encodable-p): Say that =? needs encoding. + (rfc2047-encode-region): Encode =? strings. + +2005-03-25 Jesper Harder <harder@ifa.au.dk> + + * rfc2047.el (rfc2047-encoded-word-regexp): Support RFC 2231 + language tags; remove unnecessary '+'. Reported by Stefan Wiens + <s.wi@gmx.net>. + (rfc2047-decode-string): Don't cons a string unnecessarily. + (rfc2047-parse-and-decode, rfc2047-decode): Use a character for + the encoding to avoid consing a string. + (rfc2047-decode): Use mm-subst-char-in-string instead of + mm-replace-chars-in-string. + +2005-03-25 TSUCHIYA Masatoshi <tsuchiya@namazu.org> + + * rfc2047.el (rfc2047-encode): Use uppercase letters to specify + encodings of MIME-encoded words, in order to improve + interoperability with several broken MUAs. + +2005-03-21 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus-srvr.el (gnus-browse-select-group): Add NUMBER argument and + pass it to `gnus-browse-read-group'. + (gnus-browse-read-group): Add NUMBER argument and pass it to + `gnus-group-read-ephemeral-group'. + + * gnus-group.el (gnus-group-read-ephemeral-group): Add NUMBER + argument and pass it to `gnus-group-read-group'. + +2005-03-19 Aidan Kehoe <kehoea@parhasard.net> + + * mm-util.el (mm-xemacs-find-mime-charset): Only call + mm-xemacs-find-mime-charset-1 if we have the mule feature + available at runtime. + 2005-03-25 Werner Lemberg <wl@gnu.org> * nnmaildir.el: Replace `illegal' with `invalid'. diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el index 767bdacb78e..6d38626998c 100644 --- a/lisp/gnus/gnus-group.el +++ b/lisp/gnus/gnus-group.el @@ -1984,7 +1984,8 @@ confirmation is required." (defun gnus-group-read-ephemeral-group (group method &optional activate quit-config request-only select-articles - parameters) + parameters + number) "Read GROUP from METHOD as an ephemeral group. If ACTIVATE, request the group first. If QUIT-CONFIG, use that window configuration when exiting from the @@ -1992,6 +1993,7 @@ ephemeral group. If REQUEST-ONLY, don't actually read the group; just request it. If SELECT-ARTICLES, only select those articles. If PARAMETERS, use those as the group parameters. +If NUMBER, fetch this number of articles. Return the name of the group if selection was successful." (interactive @@ -2039,7 +2041,7 @@ Return the name of the group if selection was successful." (when (let ((gnus-large-newsgroup gnus-large-ephemeral-newsgroup) (gnus-fetch-old-headers gnus-fetch-old-ephemeral-headers)) - (gnus-group-read-group t t group select-articles)) + (gnus-group-read-group (or number t) t group select-articles)) group) ;;(error nil) (quit diff --git a/lisp/gnus/gnus-srvr.el b/lisp/gnus/gnus-srvr.el index e8c7d354145..7b3c033fddb 100644 --- a/lisp/gnus/gnus-srvr.el +++ b/lisp/gnus/gnus-srvr.el @@ -851,23 +851,26 @@ buffer. (setq buffer-read-only t) (gnus-run-hooks 'gnus-browse-mode-hook)) -(defun gnus-browse-read-group (&optional no-article) - "Enter the group at the current line." - (interactive) +(defun gnus-browse-read-group (&optional no-article number) + "Enter the group at the current line. +If NUMBER, fetch this number of articles." + (interactive "P") (let ((group (gnus-browse-group-name))) (if (or (not (gnus-get-info group)) (gnus-ephemeral-group-p group)) (unless (gnus-group-read-ephemeral-group group gnus-browse-current-method nil - (cons (current-buffer) 'browse)) + (cons (current-buffer) 'browse) + nil nil nil number) (error "Couldn't enter %s" group)) (unless (gnus-group-read-group nil no-article group) (error "Couldn't enter %s" group))))) -(defun gnus-browse-select-group () - "Select the current group." - (interactive) - (gnus-browse-read-group 'no)) +(defun gnus-browse-select-group (&optional number) + "Select the current group. +If NUMBER, fetch this number of articles." + (interactive "P") + (gnus-browse-read-group 'no number)) (defun gnus-browse-next-group (n) "Go to the next group." diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el index de56fe2be96..9edbce2620e 100644 --- a/lisp/gnus/message.el +++ b/lisp/gnus/message.el @@ -6364,7 +6364,8 @@ Optional DIGEST will use digest to forward." (replace-match "X-From-Line: ")) ;; Send it. (let ((message-inhibit-body-encoding t) - message-required-mail-headers) + message-required-mail-headers + rfc2047-encode-encoded-words) (message-send-mail)) (kill-buffer (current-buffer))) (message "Resending message to %s...done" address))) diff --git a/lisp/gnus/mm-util.el b/lisp/gnus/mm-util.el index 5b4200d6d52..3be6444f18f 100644 --- a/lisp/gnus/mm-util.el +++ b/lisp/gnus/mm-util.el @@ -86,6 +86,32 @@ (multibyte-char-to-unibyte . identity)))) (eval-and-compile + (cond + ((fboundp 'replace-in-string) + (defalias 'mm-replace-in-string 'replace-in-string)) + ((fboundp 'replace-regexp-in-string) + (defun mm-replace-in-string (string regexp newtext &optional literal) + "Replace all matches for REGEXP with NEWTEXT in STRING. +If LITERAL is non-nil, insert NEWTEXT literally. Return a new +string containing the replacements. + +This is a compatibility function for different Emacsen." + (replace-regexp-in-string regexp newtext string nil literal))) + (t + (defun mm-replace-in-string (string regexp newtext &optional literal) + "Replace all matches for REGEXP with NEWTEXT in STRING. +If LITERAL is non-nil, insert NEWTEXT literally. Return a new +string containing the replacements. + +This is a compatibility function for different Emacsen." + (let ((start 0) tail) + (while (string-match regexp string start) + (setq tail (- (length string) (match-end 0))) + (setq string (replace-match newtext nil literal string)) + (setq start (- (length string) tail)))) + string)))) + +(eval-and-compile (defalias 'mm-char-or-char-int-p (cond ((fboundp 'char-or-char-int-p) 'char-or-char-int-p) @@ -606,7 +632,7 @@ But this is very much a corner case, so don't worry about it." ;; Load the Latin Unity library, if available. (when (and (not (featurep 'latin-unity)) (locate-library "latin-unity")) - (require 'latin-unity)) + (ignore-errors (require 'latin-unity))) ;; Now, can we use it? (if (featurep 'latin-unity) @@ -651,7 +677,7 @@ But this is very much a corner case, so don't worry about it." (defmacro mm-xemacs-find-mime-charset (begin end) (when (featurep 'xemacs) - `(mm-xemacs-find-mime-charset-1 ,begin ,end))) + `(and (featurep 'mule) (mm-xemacs-find-mime-charset-1 ,begin ,end)))) (defun mm-find-mime-charset-region (b e &optional hack-charsets) "Return the MIME charsets needed to encode the region between B and E. diff --git a/lisp/gnus/rfc2047.el b/lisp/gnus/rfc2047.el index 6086f422abd..538e22e0f88 100644 --- a/lisp/gnus/rfc2047.el +++ b/lisp/gnus/rfc2047.el @@ -119,12 +119,15 @@ The values can be: Valid encodings are nil, `Q' and `B'. These indicate binary (no) encoding, quoted-printable and base64 respectively.") -(defvar rfc2047-encoding-function-alist - '((Q . rfc2047-q-encode-region) - (B . rfc2047-b-encode-region) - (nil . ignore)) +(defvar rfc2047-encode-function-alist + '((Q . rfc2047-q-encode-string) + (B . rfc2047-b-encode-string) + (nil . identity)) "Alist of RFC2047 encodings to encoding functions.") +(defvar rfc2047-encode-encoded-words t + "Whether encoded words should be encoded again.") + ;;; ;;; Functions for encoding RFC2047 messages ;;; @@ -166,7 +169,7 @@ This is either `base64' or `quoted-printable'." (save-restriction (rfc2047-narrow-to-field) (re-search-forward ":[ \t\n]*" nil t) - (buffer-substring (point) (point-max))))) + (buffer-substring-no-properties (point) (point-max))))) (defvar rfc2047-encoding-type 'address-mime "The type of encoding done by `rfc2047-encode-region'. @@ -186,24 +189,25 @@ Should be called narrowed to the head of the message." (rfc2047-narrow-to-field) (if (not (rfc2047-encodable-p)) (prog1 - (if (and (eq (mm-body-7-or-8) '8bit) - (mm-multibyte-p) - (mm-coding-system-p - (car message-posting-charset))) - ;; 8 bit must be decoded. - (mm-encode-coding-region - (point-min) (point-max) - (mm-charset-to-coding-system - (car message-posting-charset)))) + (if (and (eq (mm-body-7-or-8) '8bit) + (mm-multibyte-p) + (mm-coding-system-p + (car message-posting-charset))) + ;; 8 bit must be decoded. + (mm-encode-coding-region + (point-min) (point-max) + (mm-charset-to-coding-system + (car message-posting-charset)))) ;; No encoding necessary, but folding is nice - (rfc2047-fold-region - (save-excursion - (goto-char (point-min)) - (skip-chars-forward "^:") - (when (looking-at ": ") - (forward-char 2)) - (point)) - (point-max))) + (when nil + (rfc2047-fold-region + (save-excursion + (goto-char (point-min)) + (skip-chars-forward "^:") + (when (looking-at ": ") + (forward-char 2)) + (point)) + (point-max)))) ;; We found something that may perhaps be encoded. (setq method nil alist rfc2047-header-encoding-alist) @@ -213,7 +217,6 @@ Should be called narrowed to the head of the message." (eq (car elem) t)) (setq alist nil method (cdr elem)))) - (goto-char (point-min)) (re-search-forward "^[^:]+: *" nil t) (cond ((eq method 'address-mime) @@ -267,8 +270,13 @@ The buffer may be narrowed." (require 'message) ; for message-posting-charset (let ((charsets (mm-find-mime-charset-region (point-min) (point-max)))) - (and charsets - (not (equal charsets (list (car message-posting-charset))))))) + (goto-char (point-min)) + (or (and rfc2047-encode-encoded-words + (prog1 + (search-forward "=?" nil t) + (goto-char (point-min)))) + (and charsets + (not (equal charsets (list (car message-posting-charset)))))))) ;; Use this syntax table when parsing into regions that may need ;; encoding. Double quotes are string delimiters, backslash is @@ -292,8 +300,8 @@ The buffer may be narrowed." table)))) (modify-syntax-entry ?\\ "\\" table) (modify-syntax-entry ?\" "\"" table) - (modify-syntax-entry ?\( "." table) - (modify-syntax-entry ?\) "." table) + (modify-syntax-entry ?\( "(" table) + (modify-syntax-entry ?\) ")" table) (modify-syntax-entry ?\< "." table) (modify-syntax-entry ?\> "." table) (modify-syntax-entry ?\[ "." table) @@ -310,183 +318,341 @@ By default, the region is treated as containing RFC2822 addresses. Dynamically bind `rfc2047-encoding-type' to change that." (save-restriction (narrow-to-region b e) - (if (eq 'mime rfc2047-encoding-type) - ;; Simple case. Treat as single word after any initial ASCII - ;; part and before any tailing ASCII part. The leading ASCII - ;; is relevant for instance in Subject headers with `Re:' for - ;; interoperability with non-MIME clients, and we might as - ;; well avoid the tail too. - (progn - (goto-char (point-min)) - ;; Does it need encoding? - (skip-chars-forward "\000-\177") - (unless (eobp) - (skip-chars-backward "^ \n") ; beginning of space-delimited word - (rfc2047-encode (point) (progn - (goto-char e) - (skip-chars-backward "\000-\177") - (skip-chars-forward "^ \n") - ;; end of space-delimited word - (point))))) - ;; `address-mime' case -- take care of quoted words, comments. - (with-syntax-table rfc2047-syntax-table - (let ((start) ; start of current token - end ; end of current token - ;; Whether there's an encoded word before the current - ;; token, either immediately or separated by space. - last-encoded) + (let ((encodable-regexp (if rfc2047-encode-encoded-words + "[^\000-\177]+\\|=\\?" + "[^\000-\177]+")) + start ; start of current token + end begin csyntax + ;; Whether there's an encoded word before the current token, + ;; either immediately or separated by space. + last-encoded + (orig-text (buffer-substring-no-properties b e))) + (if (eq 'mime rfc2047-encoding-type) + ;; Simple case. Continuous words in which all those contain + ;; non-ASCII characters are encoded collectively. Encoding + ;; ASCII words, including `Re:' used in Subject headers, is + ;; avoided for interoperability with non-MIME clients and + ;; for making it easy to find keywords. + (progn + (goto-char (point-min)) + (while (progn (skip-chars-forward " \t\n") + (not (eobp))) + (setq start (point)) + (while (and (looking-at "[ \t\n]*\\([^ \t\n]+\\)") + (progn + (setq end (match-end 0)) + (re-search-forward encodable-regexp end t))) + (goto-char end)) + (if (> (point) start) + (rfc2047-encode start (point)) + (goto-char end)))) + ;; `address-mime' case -- take care of quoted words, comments. + (with-syntax-table rfc2047-syntax-table (goto-char (point-min)) - (condition-case nil ; in case of unbalanced quotes + (condition-case err ; in case of unbalanced quotes ;; Look for rfc2822-style: sequences of atoms, quoted ;; strings, specials, whitespace. (Specials mustn't be ;; encoded.) (while (not (eobp)) - (setq start (point)) ;; Skip whitespace. - (unless (= 0 (skip-chars-forward " \t\n")) - (setq start (point))) + (skip-chars-forward " \t\n") + (setq start (point)) (cond ((not (char-after))) ; eob ;; else token start - ((eq ?\" (char-syntax (char-after))) + ((eq ?\" (setq csyntax (char-syntax (char-after)))) ;; Quoted word. (forward-sexp) (setq end (point)) ;; Does it need encoding? (goto-char start) - (skip-chars-forward "\000-\177" end) - (if (= end (point)) - (setq last-encoded nil) - ;; It needs encoding. Strip the quotes first, - ;; since encoded words can't occur in quotes. - (goto-char end) - (delete-backward-char 1) - (goto-char start) - (delete-char 1) - (when last-encoded - ;; There was a preceding quoted word. We need - ;; to include any separating whitespace in this - ;; word to avoid it getting lost. - (skip-chars-backward " \t") - ;; A space is needed between the encoded words. - (insert ? ) - (setq start (point) - end (1+ end))) - ;; Adjust the end position for the deleted quotes. - (rfc2047-encode start (- end 2)) - (setq last-encoded t))) ; record that it was encoded - ((eq ?. (char-syntax (char-after))) + (if (re-search-forward encodable-regexp end 'move) + ;; It needs encoding. Strip the quotes first, + ;; since encoded words can't occur in quotes. + (progn + (goto-char end) + (delete-backward-char 1) + (goto-char start) + (delete-char 1) + (when last-encoded + ;; There was a preceding quoted word. We need + ;; to include any separating whitespace in this + ;; word to avoid it getting lost. + (skip-chars-backward " \t") + ;; A space is needed between the encoded words. + (insert ? ) + (setq start (point) + end (1+ end))) + ;; Adjust the end position for the deleted quotes. + (rfc2047-encode start (- end 2)) + (setq last-encoded t)) ; record that it was encoded + (setq last-encoded nil))) + ((eq ?. csyntax) ;; Skip other delimiters, but record that they've ;; potentially separated quoted words. (forward-char) (setq last-encoded nil)) + ((eq ?\) csyntax) + (error "Unbalanced parentheses")) + ((eq ?\( csyntax) + ;; Look for the end of parentheses. + (forward-list) + ;; Encode text as an unstructured field. + (let ((rfc2047-encoding-type 'mime)) + (rfc2047-encode-region (1+ start) (1- (point)))) + (skip-chars-forward ")")) (t ; normal token/whitespace sequence ;; Find the end. - (forward-word 1) - (skip-chars-backward " \t") + ;; Skip one ASCII word, or encode continuous words + ;; in which all those contain non-ASCII characters. + (setq end nil) + (while (not (or end (eobp))) + (when (looking-at "[\000-\177]+") + (setq begin (point) + end (match-end 0)) + (when (progn + (while (and (or (re-search-forward + "[ \t\n]\\|\\Sw" end 'move) + (setq end nil)) + (eq ?\\ (char-syntax (char-before)))) + ;; Skip backslash-quoted characters. + (forward-char)) + end) + (setq end (match-beginning 0)) + (if rfc2047-encode-encoded-words + (progn + (goto-char begin) + (when (search-forward "=?" end 'move) + (goto-char (match-beginning 0)) + (setq end nil))) + (goto-char end)))) + ;; Where the value nil of `end' means there may be + ;; text to have to be encoded following the point. + ;; Otherwise, the point reached to the end of ASCII + ;; words separated by whitespace or a special char. + (unless end + (when (looking-at encodable-regexp) + (goto-char (setq begin (match-end 0))) + (while (and (looking-at "[ \t\n]+\\([^ \t\n]+\\)") + (setq end (match-end 0)) + (progn + (while (re-search-forward + encodable-regexp end t)) + (< begin (point))) + (goto-char begin) + (or (not (re-search-forward "\\Sw" end t)) + (progn + (goto-char (match-beginning 0)) + nil))) + (goto-char end)) + (when (looking-at "[^ \t\n]+") + (setq end (match-end 0)) + (if (re-search-forward "\\Sw+" end t) + ;; There are special characters better + ;; to be encoded so that MTAs may parse + ;; them safely. + (cond ((= end (point))) + ((looking-at (concat "\\sw*\\(" + encodable-regexp + "\\)")) + (setq end nil)) + (t + (goto-char (1- (match-end 0))) + (unless (= (point) (match-beginning 0)) + ;; Separate encodable text and + ;; delimiter. + (insert " ")))) + (goto-char end) + (skip-chars-forward " \t\n") + (if (and (looking-at "[^ \t\n]+") + (string-match encodable-regexp + (match-string 0))) + (setq end nil) + (goto-char end))))))) + (skip-chars-backward " \t\n") (setq end (point)) - ;; Deal with encoding and leading space as for - ;; quoted words. (goto-char start) - (skip-chars-forward "\000-\177" end) - (if (= end (point)) - (setq last-encoded nil) - (when last-encoded - (goto-char start) - (skip-chars-backward " \t") - (insert ? ) - (setq start (point) - end (1+ end))) - (rfc2047-encode start end) - (setq last-encoded t))))) + (if (re-search-forward encodable-regexp end 'move) + (progn + (unless (memq (char-before start) '(nil ?\t ? )) + (if (progn + (goto-char start) + (skip-chars-backward "^ \t\n") + (and (looking-at "\\Sw+") + (= (match-end 0) start))) + ;; Also encode bogus delimiters. + (setq start (point)) + ;; Separate encodable text and delimiter. + (goto-char start) + (insert " ") + (setq start (1+ start) + end (1+ end)))) + (rfc2047-encode start end) + (setq last-encoded t)) + (setq last-encoded nil))))) (error - (error "Invalid data for rfc2047 encoding: %s" - (buffer-substring b e))))))) - (rfc2047-fold-region b (point)))) + (if (or debug-on-quit debug-on-error) + (signal (car err) (cdr err)) + (error "Invalid data for rfc2047 encoding: %s" + (mm-replace-in-string orig-text "[ \t\n]+" " ")))))))) + (rfc2047-fold-region b (point)) + (goto-char (point-max)))) (defun rfc2047-encode-string (string) "Encode words in STRING. By default, the string is treated as containing addresses (see `rfc2047-encoding-type')." - (with-temp-buffer + (mm-with-multibyte-buffer (insert string) (rfc2047-encode-region (point-min) (point-max)) (buffer-string))) +(defvar rfc2047-encode-max-chars 76 + "Maximum characters of each header line that contain encoded-words. +If it is nil, encoded-words will not be folded. Too small value may +cause an error. Don't change this for no particular reason.") + +(defun rfc2047-encode-1 (column string cs encoder start crest tail + &optional eword) + "Subroutine used by `rfc2047-encode'." + (cond ((string-equal string "") + (or eword "")) + ((not rfc2047-encode-max-chars) + (concat start + (funcall encoder (if cs + (mm-encode-coding-string string cs) + string)) + "?=")) + ((>= column rfc2047-encode-max-chars) + (when eword + (cond ((string-match "\n[ \t]+\\'" eword) + ;; Reomove a superfluous empty line. + (setq eword (substring eword 0 (match-beginning 0)))) + ((string-match "(+\\'" eword) + ;; Break the line before the open parenthesis. + (setq crest (concat crest (match-string 0 eword)) + eword (substring eword 0 (match-beginning 0)))))) + (rfc2047-encode-1 (length crest) string cs encoder start " " tail + (concat eword "\n" crest))) + (t + (let ((index 0) + (limit (1- (length string))) + (prev "") + next len) + (while (and prev + (<= index limit)) + (setq next (concat start + (funcall encoder + (if cs + (mm-encode-coding-string + (substring string 0 (1+ index)) + cs) + (substring string 0 (1+ index)))) + "?=") + len (+ column (length next))) + (if (> len rfc2047-encode-max-chars) + (setq next prev + prev nil) + (if (or (< index limit) + (<= (+ len (or (string-match "\n" tail) + (length tail))) + rfc2047-encode-max-chars)) + (setq prev next + index (1+ index)) + (if (string-match "\\`)+" tail) + ;; Break the line after the close parenthesis. + (setq tail (concat (substring tail 0 (match-end 0)) + "\n " + (substring tail (match-end 0))) + prev next + index (1+ index)) + (setq next prev + prev nil))))) + (if (> index limit) + (concat eword next tail) + (if (= 0 index) + (if (and eword + (string-match "(+\\'" eword)) + (setq crest (concat crest (match-string 0 eword)) + eword (substring eword 0 (match-beginning 0))) + (setq eword (concat eword next))) + (setq crest " " + eword (concat eword next))) + (when (string-match "\n[ \t]+\\'" eword) + ;; Reomove a superfluous empty line. + (setq eword (substring eword 0 (match-beginning 0)))) + (rfc2047-encode-1 (length crest) (substring string index) + cs encoder start " " tail + (concat eword "\n" crest))))))) + (defun rfc2047-encode (b e) "Encode the word(s) in the region B to E. -By default, the region is treated as containing addresses (see -`rfc2047-encoding-type')." - (let* ((mime-charset (mm-find-mime-charset-region b e)) - (cs (if (> (length mime-charset) 1) - ;; Fixme: Instead of this, try to break region into - ;; parts that can be encoded separately. - (error "Can't rfc2047-encode `%s'" - (buffer-substring b e)) - (setq mime-charset (car mime-charset)) - (mm-charset-to-coding-system mime-charset))) - ;; Fixme: Better, calculate the number of non-ASCII - ;; characters, at least for 8-bit charsets. - (encoding (or (cdr (assq mime-charset +Point moves to the end of the region." + (let ((mime-charset (or (mm-find-mime-charset-region b e) (list 'us-ascii))) + cs encoding tail crest eword) + (cond ((> (length mime-charset) 1) + (error "Can't rfc2047-encode `%s'" + (buffer-substring-no-properties b e))) + ((= (length mime-charset) 1) + (setq mime-charset (car mime-charset) + cs (mm-charset-to-coding-system mime-charset)) + (unless (and (mm-multibyte-p) + (mm-coding-system-p cs)) + (setq cs nil)) + (save-restriction + (narrow-to-region b e) + (setq encoding + (or (cdr (assq mime-charset rfc2047-charset-encoding-alist)) ;; For the charsets that don't have a preferred ;; encoding, choose the one that's shorter. - (save-restriction - (narrow-to-region b e) - (if (eq (rfc2047-qp-or-base64) 'base64) - 'B - 'Q)))) - (start (concat - "=?" (downcase (symbol-name mime-charset)) "?" - (downcase (symbol-name encoding)) "?")) - (factor (case mime-charset - ((iso-8859-5 iso-8859-7 iso-8859-8 koi8-r) 1) - ((big5 gb2312 euc-kr) 2) - (utf-8 4) - (t 8))) - (pre (- b (save-restriction - (widen) - (rfc2047-point-at-bol)))) - ;; encoded-words must not be longer than 75 characters, - ;; including charset, encoding etc. This leaves us with - ;; 75 - (length start) - 2 - 2 characters. The last 2 is for - ;; possible base64 padding. In the worst case (iso-2022-*) - ;; each character expands to 8 bytes which is expanded by a - ;; factor of 4/3 by base64 encoding. - (length (floor (- 75 (length start) 4) (* factor (/ 4.0 3.0)))) - ;; Limit line length to 76 characters. - (length1 (max 1 (floor (- 76 (length start) 4 pre) - (* factor (/ 4.0 3.0))))) - (first t)) - (if mime-charset - (save-restriction - (narrow-to-region b e) - (when (eq encoding 'B) - ;; break into lines before encoding - (goto-char (point-min)) - (while (not (eobp)) - (if first - (progn - (goto-char (min (point-max) (+ length1 (point)))) - (setq first nil)) - (goto-char (min (point-max) (+ length (point))))) - (unless (eobp) - (insert ?\n))) - (setq first t)) - (if (and (mm-multibyte-p) - (mm-coding-system-p cs)) - (mm-encode-coding-region (point-min) (point-max) cs)) - (funcall (cdr (assq encoding rfc2047-encoding-function-alist)) - (point-min) (point-max)) - (goto-char (point-min)) - (while (not (eobp)) - (unless first - (insert ? )) - (setq first nil) - (insert start) - (end-of-line) - (insert "?=") - (forward-line 1)))))) + (if (eq (rfc2047-qp-or-base64) 'base64) + 'B + 'Q))) + (widen) + (goto-char e) + (skip-chars-forward "^ \t\n") + ;; `tail' may contain a close parenthesis. + (setq tail (buffer-substring-no-properties e (point))) + (goto-char b) + (setq b (point-marker) + e (set-marker (make-marker) e)) + (rfc2047-fold-region (rfc2047-point-at-bol) b) + (goto-char b) + (skip-chars-backward "^ \t\n") + (unless (= 0 (skip-chars-backward " \t")) + ;; `crest' may contain whitespace and an open parenthesis. + (setq crest (buffer-substring-no-properties (point) b))) + (setq eword (rfc2047-encode-1 + (- b (rfc2047-point-at-bol)) + (mm-replace-in-string + (buffer-substring-no-properties b e) + "\n\\([ \t]?\\)" "\\1") + cs + (or (cdr (assq encoding + rfc2047-encode-function-alist)) + 'identity) + (concat "=?" (downcase (symbol-name mime-charset)) + "?" (upcase (symbol-name encoding)) "?") + (or crest " ") + tail)) + (delete-region (if (eq (aref eword 0) ?\n) + (if (bolp) + ;; The line was folded before encoding. + (1- (point)) + (point)) + (goto-char b)) + (+ e (length tail))) + ;; `eword' contains `crest' and `tail'. + (insert eword) + (set-marker b nil) + (set-marker e nil) + (unless (or (/= 0 (length tail)) + (eobp) + (looking-at "[ \t\n)]")) + (insert " ")))) + (t + (goto-char e))))) (defun rfc2047-fold-field () "Fold the current header field." @@ -512,6 +678,7 @@ By default, the region is treated as containing addresses (see (goto-char (or break qword-break)) (setq break nil qword-break nil) + (skip-chars-backward " \t") (if (looking-at "[ \t]") (insert ?\n) (insert "\n ")) @@ -533,10 +700,8 @@ By default, the region is treated as containing addresses (see (forward-char 1)) ((memq (char-after) '(? ?\t)) (skip-chars-forward " \t") - (if first - ;; Don't break just after the header name. - (setq first nil) - (setq break (1- (point))))) + (unless first ;; Don't break just after the header name. + (setq break (point)))) ((not break) (if (not (looking-at "=\\?[^=]")) (if (eq (char-after) ?=) @@ -547,15 +712,17 @@ By default, the region is treated as containing addresses (see (setq qword-break (point))) (skip-chars-forward "^ \t\n\r"))) (t - (skip-chars-forward "^ \t\n\r")))) + (skip-chars-forward "^ \t\n\r"))) + (setq first nil)) (when (and (or break qword-break) (> (- (point) bol) 76)) (goto-char (or break qword-break)) (setq break nil qword-break nil) - (if (looking-at "[ \t]") - (insert ?\n) - (insert "\n ")) + (if (or (> 0 (skip-chars-backward " \t")) + (looking-at "[ \t]")) + (insert ?\n) + (insert "\n ")) (setq bol (1- (point))) ;; Don't break before the first non-LWSP characters. (skip-chars-forward " \t") @@ -590,48 +757,48 @@ By default, the region is treated as containing addresses (see (setq eol (rfc2047-point-at-eol)) (forward-line 1))))) -(defun rfc2047-b-encode-region (b e) - "Base64-encode the header contained in region B to E." - (save-restriction - (narrow-to-region (goto-char b) e) - (while (not (eobp)) - (base64-encode-region (point) (progn (end-of-line) (point)) t) - (if (and (bolp) (eolp)) - (delete-backward-char 1)) - (forward-line)))) - -(defun rfc2047-q-encode-region (b e) - "Quoted-printable-encode the header in region B to E." - (save-excursion - (save-restriction - (narrow-to-region (goto-char b) e) - (let ((bol (save-restriction - (widen) - (rfc2047-point-at-bol)))) - (quoted-printable-encode-region - b e nil - ;; = (\075), _ (\137), ? (\077) are used in the encoded word. - ;; Avoid using 8bit characters. - ;; This list excludes `especials' (see the RFC2047 syntax), - ;; meaning that some characters in non-structured fields will - ;; get encoded when they con't need to be. The following is - ;; what it used to be. -;;; ;; Equivalent to "^\000-\007\011\013\015-\037\200-\377=_?" -;;; "\010\012\014\040-\074\076\100-\136\140-\177") - "-\b\n\f !#-'*+0-9A-Z\\^`-~\d") - (subst-char-in-region (point-min) (point-max) ? ?_) - ;; The size of QP encapsulation is about 20, so set limit to - ;; 56=76-20. - (unless (< (- (point-max) (point-min)) 56) - ;; Don't break if it could fit in one line. - ;; Let rfc2047-encode-region break it later. - (goto-char (1+ (point-min))) - (while (and (not (bobp)) (not (eobp))) - (goto-char (min (point-max) (+ 56 bol))) - (search-backward "=" (- (point) 2) t) - (unless (or (bobp) (eobp)) - (insert ?\n) - (setq bol (point))))))))) +(defun rfc2047-b-encode-string (string) + "Base64-encode the header contained in STRING." + (base64-encode-string string t)) + +(defun rfc2047-q-encode-string (string) + "Quoted-printable-encode the header in STRING." + (mm-with-unibyte-buffer + (insert string) + (quoted-printable-encode-region + (point-min) (point-max) nil + ;; = (\075), _ (\137), ? (\077) are used in the encoded word. + ;; Avoid using 8bit characters. + ;; This list excludes `especials' (see the RFC2047 syntax), + ;; meaning that some characters in non-structured fields will + ;; get encoded when they con't need to be. The following is + ;; what it used to be. + ;;; ;; Equivalent to "^\000-\007\011\013\015-\037\200-\377=_?" + ;;; "\010\012\014\040-\074\076\100-\136\140-\177") + "-\b\n\f !#-'*+0-9A-Z\\^`-~\d") + (subst-char-in-region (point-min) (point-max) ? ?_) + (buffer-string))) + +(defun rfc2047-encode-parameter (param value) + "Return and PARAM=VALUE string encoded in the RFC2047-like style. +This is a replacement for the `rfc2231-encode-string' function. + +When attaching files as MIME parts, we should use the RFC2231 encoding +to specify the file names containing non-ASCII characters. However, +many mail softwares don't support it in practice and recipients won't +be able to extract files with correct names. Instead, the RFC2047-like +encoding is acceptable generally. This function provides the very +RFC2047-like encoding, resigning to such a regrettable trend. To use +it, put the following line in your ~/.gnus.el file: + +\(defalias 'mail-header-encode-parameter 'rfc2047-encode-parameter) +" + (let* ((rfc2047-encoding-type 'mime) + (rfc2047-encode-max-chars nil) + (string (rfc2047-encode-string value))) + (if (string-match (concat "[" ietf-drums-tspecials "]") string) + (format "%s=%S" param string) + (concat param "=" string)))) ;;; ;;; Functions for decoding RFC2047 messages @@ -639,8 +806,8 @@ By default, the region is treated as containing addresses (see (eval-and-compile (defconst rfc2047-encoded-word-regexp - "=\\?\\([^][\000-\040()<>@,\;:\\\"/?.=]+\\)\\?\\(B\\|Q\\)\ -\\?\\([!->@-~ +]*\\)\\?=")) + "=\\?\\([^][\000-\040()<>@,\;:*\\\"/?.=]+\\)\\(\\*[^?]+\\)?\ +\\?\\(B\\|Q\\)\\?\\([!->@-~ ]*\\)\\?=")) (defvar rfc2047-quote-decoded-words-containing-tspecials nil "If non-nil, quote decoded words containing special characters.") @@ -671,7 +838,7 @@ By default, the region is treated as containing addresses (see "\\(\n?[ \t]\\)+" "\\(" rfc2047-encoded-word-regexp "\\)")) nil t) - (delete-region (goto-char (match-end 1)) (match-beginning 6))) + (delete-region (goto-char (match-end 1)) (match-beginning 7))) ;; Decode the encoded words. (setq b (goto-char (point-min))) (while (re-search-forward rfc2047-encoded-word-regexp nil t) @@ -774,7 +941,20 @@ By default, the region is treated as containing addresses (see mail-parse-charset (not (eq mail-parse-charset 'us-ascii)) (not (eq mail-parse-charset 'gnus-decoded))) - (mm-decode-coding-string string mail-parse-charset) + ;; `decode-coding-string' in Emacs offers a third optional + ;; arg NOCOPY to avoid consing a new string if the decoding + ;; is "trivial". Unfortunately it currently doesn't + ;; consider anything else than a `nil' coding system + ;; trivial. + ;; `rfc2047-decode-string' is called multiple times for each + ;; article during summary buffer generation, and we really + ;; want to avoid unnecessary consing. So we bypass + ;; `decode-coding-string' if the string is purely ASCII. + (if (and (fboundp 'detect-coding-string) + ;; string is purely ASCII + (eq (detect-coding-string string t) 'undecided)) + string + (mm-decode-coding-string string mail-parse-charset)) (mm-string-as-multibyte string))))) (defun rfc2047-parse-and-decode (word) @@ -787,8 +967,8 @@ decodable." (condition-case nil (rfc2047-decode (match-string 1 word) - (upcase (match-string 2 word)) - (match-string 3 word)) + (string-to-char (match-string 3 word)) + (match-string 4 word)) (error word)) word))) ; un-decodable @@ -809,7 +989,7 @@ decodable." (defun rfc2047-decode (charset encoding string) "Decode STRING from the given MIME CHARSET in the given ENCODING. -Valid ENCODINGs are \"B\" and \"Q\". +Valid ENCODINGs are the characters \"B\" and \"Q\". If your Emacs implementation can't decode CHARSET, return nil." (if (stringp charset) (setq charset (intern (downcase charset)))) @@ -824,18 +1004,17 @@ If your Emacs implementation can't decode CHARSET, return nil." (memq 'gnus-unknown mail-parse-ignored-charsets)) (setq cs (mm-charset-to-coding-system mail-parse-charset))) (when cs - (when (and (eq cs 'ascii) - mail-parse-charset) - (setq cs mail-parse-charset)) + (when (eq cs 'ascii) + (setq cs (or mail-parse-charset 'raw-text))) (mm-decode-coding-string (cond - ((equal "B" encoding) + ((char-equal ?B encoding) (base64-decode-string (rfc2047-pad-base64 string))) - ((equal "Q" encoding) + ((char-equal ?Q encoding) (quoted-printable-decode-string - (mm-replace-chars-in-string string ?_ ? ))) - (t (error "Invalid encoding: %s" encoding))) + (mm-subst-char-in-string ?_ ? string t))) + (t (error "Invalid encoding: %c" encoding))) cs)))) (provide 'rfc2047) diff --git a/man/ChangeLog b/man/ChangeLog index 6da44c9a8e2..8efe3775953 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -1,3 +1,12 @@ +2005-03-25 Katsumi Yamaoka <yamaoka@jpl.org> + + * emacs-mime.texi (Display Customization): Markup fixes. + (rfc2047): Update. + +2005-03-23 Reiner Steib <Reiner.Steib@gmx.de> + + * gnus-faq.texi: Replaced with auto-generated version. + 2005-03-29 Richard M. Stallman <rms@gnu.org> * mule.texi (Single-Byte Character Support): Reinstall the C-x 8 info. diff --git a/man/emacs-mime.texi b/man/emacs-mime.texi index c128ed096c3..11a07df5361 100644 --- a/man/emacs-mime.texi +++ b/man/emacs-mime.texi @@ -387,15 +387,15 @@ The program used to start an external terminal. @item mm-enable-external @vindex mm-enable-external -Indicate whether external MIME handlers should be used. +Indicate whether external @acronym{MIME} handlers should be used. -If @code{t}, all defined external MIME handlers are used. If +If @code{t}, all defined external @acronym{MIME} handlers are used. If @code{nil}, files are saved to disk (@code{mailcap-save-binary-file}). If it is the symbol @code{ask}, you are prompted before the external @acronym{MIME} handler is invoked. When you launch an attachment through mailcap (@pxref{mailcap}) an -attempt is made to use a safe viewer with the safest options--this isn't +attempt is made to use a safe viewer with the safest options---this isn't the case if you save it to disk and launch it in a different way (command line or double-clicking). Anyhow, if you want to be sure not to launch any external programs, set this variable to @code{nil} or @@ -1327,8 +1327,8 @@ RFC2047 specifies two forms of encoding---@code{Q} (a Quoted-Printable-like encoding) and @code{B} (base64). This alist specifies which charset should use which encoding. -@item rfc2047-encoding-function-alist -@vindex rfc2047-encoding-function-alist +@item rfc2047-encode-function-alist +@vindex rfc2047-encode-function-alist This is an alist of encoding / function pairs. The encodings are @code{Q}, @code{B} and @code{nil}. @@ -1336,6 +1336,11 @@ This is an alist of encoding / function pairs. The encodings are @vindex rfc2047-encoded-word-regexp When decoding words, this library looks for matches to this regexp. +@item rfc2047-encode-encoded-words +@vindex rfc2047-encode-encoded-words +The boolean variable specifies whether encoded words +(e.g. @samp{=?hello?=}) should be encoded again. + @end table Those were the variables, and these are this functions: @@ -1366,6 +1371,24 @@ Decode the encoded words in the region. @findex rfc2047-decode-string Decode a string and return the results. +@item rfc2047-encode-parameter +@findex rfc2047-encode-parameter +Encode a parameter in the RFC2047-like style. This is a replacement for +the @code{rfc2231-encode-string} function. @xref{rfc2231}. + +When attaching files as @acronym{MIME} parts, we should use the RFC2231 +encoding to specify the file names containing non-@acronym{ASCII} +characters. However, many mail softwares don't support it in practice +and recipients won't be able to extract files with correct names. +Instead, the RFC2047-like encoding is acceptable generally. This +function provides the very RFC2047-like encoding, resigning to such a +regrettable trend. To use it, put the following line in your +@file{~/.gnus.el} file: + +@lisp +(defalias 'mail-header-encode-parameter 'rfc2047-encode-parameter) +@end lisp + @end table diff --git a/man/gnus-faq.texi b/man/gnus-faq.texi index 42266aa4646..742227b64fc 100644 --- a/man/gnus-faq.texi +++ b/man/gnus-faq.texi @@ -1,210 +1,203 @@ -@c Insert "\input texinfo" at 1st line before texing this file alone. -@c -*-texinfo-*- -@c Copyright (C) 1995, 2001, 2003, 2004, 2005 Free Software Foundation, Inc. +@c \input texinfo @c -*-texinfo-*- +@c Uncomment 1st line before texing this file alone. +@c %**start of header +@c Copyright (C) 1995, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. +@c +@c Do not modify this file, it was generated from gnus-faq.xml, available from +@c <URL:http://my.gnus.org/FAQ/>. +@c @setfilename gnus-faq.info - -@c Frequently Asked Questions, FAQ - Introduction, Emacs for Heathens, Top +@settitle Frequently Asked Questions +@c %**end of header +@c @node Frequently Asked Questions -@comment node-name, next, previous, up - -@c @chapter Frequently Asked Questions @section Frequently Asked Questions -@cindex FAQ -@cindex Frequently Asked Questions - -@c - Uncomment @chapter, comment @section -@c - run (texinfo-every-node-update) -@c - revert it. @menu -* FAQ - Introduction:: About Gnus and this FAQ. -* FAQ 1 - Installation:: Installation of Gnus. -* FAQ 2 - Startup / Group buffer:: Start up questions and the first - buffer Gnus shows you. -* FAQ 3 - Getting messages:: Making Gnus read your mail and news. -* FAQ 4 - Reading messages:: How to efficiently read messages. -* FAQ 5 - Composing messages:: Composing mails or Usenet postings. -* FAQ 6 - Old messages:: Importing, archiving, searching - and deleting messages. -* FAQ 7 - Gnus in a dial-up environment:: Reading mail and news while offline. -* FAQ 8 - Getting help:: When this FAQ isn't enough. -* FAQ 9 - Tuning Gnus:: How to make Gnus faster. -* FAQ - Glossary:: Terms used in the FAQ explained. +* FAQ - Changes:: +* FAQ - Introduction:: About Gnus and this FAQ. +* FAQ 1 - Installation FAQ:: Installation of Gnus. +* FAQ 2 - Startup / Group buffer:: Start up questions and the + first buffer Gnus shows you. +* FAQ 3 - Getting Messages:: Making Gnus read your mail + and news. +* FAQ 4 - Reading messages:: How to efficiently read + messages. +* FAQ 5 - Composing messages:: Composing mails or Usenet + postings. +* FAQ 6 - Old messages:: Importing, archiving, + searching and deleting messages. +* FAQ 7 - Gnus in a dial-up environment:: Reading mail and news while + offline. +* FAQ 8 - Getting help:: When this FAQ isn't enough. +* FAQ 9 - Tuning Gnus:: How to make Gnus faster. +* FAQ - Glossary:: Terms used in the FAQ + explained. @end menu - @subheading Abstract - This is the new Gnus Frequently Asked Questions list. If you have a -Web browser, the official hypertext version is at -@uref{http://my.gnus.org/FAQ/}, the Docbook source is available from -@uref{http://sourceforge.net/projects/gnus/}. - +This is the new Gnus Frequently Asked Questions list. +If you have a Web browser, the official hypertext version is at +@uref{http://my.gnus.org/FAQ/}, +the Docbook source is available from +@uref{http://sourceforge.net/projects/gnus/, http://sourceforge.net}. - Please submit features and suggestions to the - @email{faq-discuss@@my.gnus.org,FAQ discussion list}. - The list is protected against junk mail with - @uref{http://smarden.org/qconfirm/index.html,qconfirm, qconfirm}. As - a subscriber, your submissions will automatically pass. You can - also subscribe to the list by sending a blank email to - @email{faq-discuss-subscribe@@my.gnus.org} - and - @uref{http://mail1.kens.com/cgi-bin/ezmlm-browse?command=monthbythread%26list=faq-discuss,browse - the archive, browse the archive}. - -@node FAQ - Introduction, FAQ 1 - Installation, Frequently Asked Questions, Frequently Asked Questions -@comment node-name, next, previous, up -@heading Introduction +Please submit features and suggestions to the +@email{faq-discuss@@my.gnus.org, FAQ discussion list}. +The list is protected against junk mail with +@uref{http://smarden.org/qconfirm/index.html, qconfirm}. As +a subscriber, your submissions will automatically pass. You can +also subscribe to the list by sending a blank email to +@email{faq-discuss-subscribe@@my.gnus.org, faq-discuss-subscribe@@my.gnus.org} +and @uref{http://mail1.kens.com/cgi-bin/ezmlm-browse?command=monthbythread%26list=faq-discuss, browse +the archive}. -This is the Gnus Frequently Asked Questions list. +@node FAQ - Changes +@subheading Changes -Gnus is a Usenet Newsreader and Electronic Mail User Agent implemented - as a part of Emacs. It's been around in some form for almost a decade - now, and has been distributed as a standard part of Emacs for much of - that time. Gnus 5 is the latest (and greatest) incarnation. The - original version was called GNUS, and was written by Masanobu UMEDA. - When autumn crept up in '94, Lars Magne Ingebrigtsen grew bored and - decided to rewrite Gnus. - - Its biggest strength is the fact that it is extremely - customizable. It is somewhat intimidating at first glance, but - most of the complexity can be ignored until you're ready to take - advantage of it. If you receive a reasonable volume of e-mail - (you're on various mailing lists), or you would like to read - high-volume mailing lists but cannot keep up with them, or read - high volume newsgroups or are just bored, then Gnus is what you - want. - - This FAQ was maintained by Justin Sheehy until March 2002. He - would like to thank Steve Baur and Per Abrahamsen for doing a wonderful - job with this FAQ before him. We would like to do the same - thanks, - Justin! - - If you have a Web browser, the official hypertext version is at:@* - @uref{http://my.gnus.org/FAQ/}. - This version is much nicer than the unofficial hypertext - versions that are archived at Utrecht, Oxford, Smart Pages, Ohio - State, and other FAQ archives. See the resources question below - if you want information on obtaining it in another format. - - The information contained here was compiled with the assistance - of the Gnus development mailing list, and any errors or - misprints are the my.gnus.org team's fault, sorry. +@itemize @bullet + +@item +Updated FAQ to reflect release of Gnus 5.10 and start of +No Gnus development. +@end itemize +@node FAQ - Introduction +@subheading Introduction + +This is the Gnus Frequently Asked Questions list. -@ifnottex -@node FAQ 1 - Installation, FAQ 2 - Startup / Group buffer, FAQ - Introduction, Frequently Asked Questions -@end ifnottex -@subsection Installation +Gnus is a Usenet Newsreader and Electronic Mail User Agent implemented +as a part of Emacs. It's been around in some form for almost a decade +now, and has been distributed as a standard part of Emacs for much of +that time. Gnus 5 is the latest (and greatest) incarnation. The +original version was called GNUS, and was written by Masanobu UMEDA. +When autumn crept up in '94, Lars Magne Ingebrigtsen grew bored and +decided to rewrite Gnus. + +Its biggest strength is the fact that it is extremely +customizable. It is somewhat intimidating at first glance, but +most of the complexity can be ignored until you're ready to take +advantage of it. If you receive a reasonable volume of e-mail +(you're on various mailing lists), or you would like to read +high-volume mailing lists but cannot keep up with them, or read +high volume newsgroups or are just bored, then Gnus is what you +want. + +This FAQ was maintained by Justin Sheehy until March 2002. He +would like to thank Steve Baur and Per Abrahamsen for doing a wonderful +job with this FAQ before him. We would like to do the same - thanks, +Justin! + +If you have a Web browser, the official hypertext version is at: +@uref{http://my.gnus.org/FAQ/}. +This version is much nicer than the unofficial hypertext +versions that are archived at Utrecht, Oxford, Smart Pages, Ohio +State, and other FAQ archives. See the resources question below +if you want information on obtaining it in another format. + +The information contained here was compiled with the assistance +of the Gnus development mailing list, and any errors or +misprints are the my.gnus.org team's fault, sorry. + +@node FAQ 1 - Installation FAQ +@subsection Installation FAQ @menu -* [1.1]:: What is the latest version of Gnus? -* [1.2]:: What's new in 5.10? -* [1.3]:: Where and how to get Gnus? -* [1.4]:: What to do with the tarball now? -* [1.5]:: Which version of Emacs do I need? -* [1.6]:: How do I run Gnus on both Emacs and XEmacs? +* [1.1]:: What is the latest version of Gnus? +* [1.2]:: What's new in 5.10? +* [1.3]:: Where and how to get Gnus? +* [1.4]:: What to do with the tarball now? +* [1.5]:: I sometimes read references to No Gnus and Oort Gnus, what + are those? +* [1.6]:: Which version of Emacs do I need? +* [1.7]:: How do I run Gnus on both Emacs and XEmacs? @end menu - -@ifnottex -@node [1.1], [1.2], FAQ 1 - Installation, FAQ 1 - Installation -@end ifnottex -@subsubheading Question 1.1: +@node [1.1] +@subsubheading Question 1.1 What is the latest version of Gnus? -Answer: +@subsubheading Answer - Jingle please: Gnus 5.10 is released, get it while it's - hot! As well as the step in version number is rather - small, Gnus 5.10 has tons of new features which you - shouldn't miss, however if you are cautious, you might - prefer to stay with 5.8.8 respectively 5.9 (they are - basically the same) until some bugfix releases are out. - -@ifnottex -@node [1.2], [1.3], [1.1], FAQ 1 - Installation -@end ifnottex -@subsubheading Question 1.2: +Jingle please: Gnus 5.10 is released, get it while it's +hot! As well as the step in version number is rather +small, Gnus 5.10 has tons of new features which you +shouldn't miss. The current release (5.10.6) should be at +least as stable as the latest release of the 5.8 series. -What's new in 5.10? +@node [1.2] +@subsubheading Question 1.2 -Answer: +What's new in 5.10? - First of all, you should have a look into the file - GNUS-NEWS in the toplevel directory of the Gnus tarball, - there the most important changes are listed. Here's a - short list of the changes I find especially - important/interesting: - +@subsubheading Answer - +First of all, you should have a look into the file +GNUS-NEWS in the toplevel directory of the Gnus tarball, +there the most important changes are listed. Here's a +short list of the changes I find especially +important/interesting: -@itemize @bullet{} +@itemize @bullet @item - Major rewrite of the Gnus agent, Gnus agent is now - active by default. - +Major rewrite of the Gnus agent, Gnus agent is now +active by default. + @item - Many new article washing functions for dealing with - ugly formatted articles. - +Many new article washing functions for dealing with +ugly formatted articles. + @item - Anti Spam features. - +Anti Spam features. + @item - message-utils now included in Gnus. - +Message-utils now included in Gnus. + @item - New format specifiers for summary lines, e.g. %B for - a complex trn-style thread tree. - +New format specifiers for summary lines, e.g. %B for +a complex trn-style thread tree. @end itemize - -@ifnottex -@node [1.3], [1.4], [1.2], FAQ 1 - Installation -@end ifnottex -@subsubheading Question 1.3: + +@node [1.3] +@subsubheading Question 1.3 Where and how to get Gnus? -Answer: +@subsubheading Answer - The latest released version of Gnus isn't included in - Emacs 21 and until now it also isn't available through the - package system of XEmacs 21.4, therefor you should get the - Gnus tarball from - @uref{http://www.gnus.org/dist/gnus.tar.gz} - or via anonymous FTP from - @uref{ftp://ftp.gnus.org/pub/gnus/gnus.tar.gz}. - -@ifnottex -@node [1.4], [1.5], [1.3], FAQ 1 - Installation -@end ifnottex -@subsubheading Question 1.4: +The latest released version of Gnus isn't included in +Emacs 21, therefor you should get the Gnus tarball from +@uref{http://www.gnus.org/dist/gnus.tar.gz} +or via anonymous FTP from +@uref{ftp://ftp.gnus.org/pub/gnus/gnus.tar.gz}. +If you use XEmacs instead of Emacs you can use XEmacs' +package system instead. - What to do with the tarball now? - +@node [1.4] +@subsubheading Question 1.4 -Answer: - - Untar it via @samp{tar xvzf gnus.tar.gz} and do the common - @samp{./configure; make; make install} circle. - (under MS-Windows either get the Cygwin environment from - @uref{http://www.cygwin.com} - which allows you to do what's described above or unpack the - tarball with some packer (e.g. Winace from - @uref{http://www.winace.com}) - and use the batch-file make.bat included in the tarball to install - Gnus. If you don't want to (or aren't allowed to) install Gnus - system-wide, you can install it in your home directory and add the - following lines to your ~/.xemacs/init.el or ~/.emacs: - +What to do with the tarball now? + +@subsubheading Answer + +Untar it via @samp{tar xvzf gnus.tar.gz} and do the common +@samp{./configure; make; make install} circle. +(under MS-Windows either get the Cygwin environment from +@uref{http://www.cygwin.com} +which allows you to do what's described above or unpack the +tarball with some packer (e.g. Winace from +@uref{http://www.winace.com}) +and use the batch-file make.bat included in the tarball to install +Gnus.) If you don't want to (or aren't allowed to) install Gnus +system-wide, you can install it in your home directory and add the +following lines to your ~/.xemacs/init.el or ~/.emacs: @example (add-to-list 'load-path "/path/to/gnus/lisp") @@ -212,436 +205,395 @@ Answer: (add-to-list 'Info-directory-list "/path/to/gnus/texi/") (add-to-list 'Info-default-directory-list "/path/to/gnus/texi/")) @end example - @noindent - Make sure that you don't have any Gnus related stuff - before this line, on MS Windows use something like - "C:/path/to/lisp" (yes, "/"). - -@ifnottex -@node [1.5], [1.6], [1.4], FAQ 1 - Installation -@end ifnottex -@subsubheading Question 1.5: + +Make sure that you don't have any Gnus related stuff +before this line, on MS Windows use something like +"C:/path/to/lisp" (yes, "/"). + +@node [1.5] +@subsubheading Question 1.5 + +I sometimes read references to No Gnus and Oort Gnus, +what are those? + +@subsubheading Answer + +Oort Gnus was the name of the development version of +Gnus, which became Gnus 5.10 in autumn 2003. No Gnus is +the name of the current development version which will +once become Gnus 5.12 or Gnus 6. (If you're wondering why +not 5.11, the odd version numbers are normally used for +the Gnus versions bundled with Emacs) + +@node [1.6] +@subsubheading Question 1.6 Which version of Emacs do I need? -Answer: +@subsubheading Answer - Gnus 5.10 requires an Emacs version that is greater - than or equal to Emacs 20.7 or XEmacs 21.1. - -@ifnottex -@node [1.6], , [1.5], FAQ 1 - Installation -@end ifnottex -@subsubheading Question 1.6: +Gnus 5.10 requires an Emacs version that is greater +than or equal to Emacs 20.7 or XEmacs 21.1. The +development versions of Gnus (aka No Gnus) require Emacs +21 or XEmacs 21.4. + +@node [1.7] +@subsubheading Question 1.7 How do I run Gnus on both Emacs and XEmacs? -Answer: +@subsubheading Answer - You can't use the same copy of Gnus in both as the Lisp - files are byte-compiled to a format which is different - depending on which Emacs did the compilation. Get one copy - of Gnus for Emacs and one for XEmacs. - -@ifnottex -@node FAQ 2 - Startup / Group buffer, FAQ 3 - Getting messages, FAQ 1 - Installation, Frequently Asked Questions -@end ifnottex +You can't use the same copy of Gnus in both as the Lisp +files are byte-compiled to a format which is different +depending on which Emacs did the compilation. Get one copy +of Gnus for Emacs and one for XEmacs. + +@node FAQ 2 - Startup / Group buffer @subsection Startup / Group buffer @menu -* [2.1]:: Every time I start Gnus I get a message - "Gnus auto-save file exists. Do you want to read it?", - what does this mean and how to prevent it? -* [2.2]:: Gnus doesn't remember which groups I'm subscribed to, what's this? -* [2.3]:: How to change the format of the lines in Group buffer? -* [2.4]:: My group buffer becomes a bit crowded, is there a way to sort my - groups into categories so I can easier browse through them? -* [2.5]:: How to manually sort the groups in Group buffer? How to sort the - groups in a topic? +* [2.1]:: Every time I start Gnus I get a message "Gnus auto-save + file exists. Do you want to read it?", what does this mean and + how to prevent it? +* [2.2]:: Gnus doesn't remember which groups I'm subscribed to, + what's this? +* [2.3]:: How to change the format of the lines in Group buffer? +* [2.4]:: My group buffer becomes a bit crowded, is there a way to + sort my groups into categories so I can easier browse through + them? +* [2.5]:: How to manually sort the groups in Group buffer? How to + sort the groups in a topic? @end menu -@ifnottex -@node [2.1], [2.2], FAQ 2 - Startup / Group buffer, FAQ 2 - Startup / Group buffer -@end ifnottex -@subsubheading Question 2.1: +@node [2.1] +@subsubheading Question 2.1 - Every time I start Gnus I get a message "Gnus auto-save - file exists. Do you want to read it?", what does this mean - and how to prevent it? - +Every time I start Gnus I get a message "Gnus auto-save +file exists. Do you want to read it?", what does this mean +and how to prevent it? -Answer: +@subsubheading Answer - This message means that the last time you used Gnus, it - wasn't properly exited and therefor couldn't write its - informations to disk (e.g. which messages you read), you - are now asked if you want to restore those informations - from the auto-save file. - +This message means that the last time you used Gnus, it +wasn't properly exited and therefor couldn't write its +informations to disk (e.g. which messages you read), you +are now asked if you want to restore those informations +from the auto-save file. - To prevent this message make sure you exit Gnus - via @samp{q} in group buffer instead of - just killing Emacs. - -@ifnottex -@node [2.2], [2.3], [2.1], FAQ 2 - Startup / Group buffer -@end ifnottex -@subsubheading Question: 2.2 +To prevent this message make sure you exit Gnus +via @samp{q} in group buffer instead of +just killing Emacs. - Gnus doesn't remember which groups I'm subscribed to, - what's this? - +@node [2.2] +@subsubheading Question 2.2 -Answer: +Gnus doesn't remember which groups I'm subscribed to, +what's this? - You get the message described in the q/a pair above while - starting Gnus, right? It's an other symptom for the same - problem, so read the answer above. - -@ifnottex -@node [2.3], [2.4], [2.2], FAQ 2 - Startup / Group buffer -@end ifnottex -@subsubheading Question 2.3: +@subsubheading Answer - How to change the format of the lines in Group buffer? - +You get the message described in the q/a pair above while +starting Gnus, right? It's an other symptom for the same +problem, so read the answer above. -Answer: +@node [2.3] +@subsubheading Question 2.3 - You've got to tweak the value of the variable - gnus-group-line-format. See the manual node "Group Line - Specification" for information on how to do this. An - example for this (guess from whose .gnus :-)): - +How to change the format of the lines in Group buffer? -@example +@subsubheading Answer +You've got to tweak the value of the variable +gnus-group-line-format. See the manual node "Group Line +Specification" for information on how to do this. An +example for this (guess from whose .gnus :-)): + +@example (setq gnus-group-line-format "%P%M%S[%5t]%5y : %(%g%)\n") - @end example - -@ifnottex -@node [2.4], [2.5], [2.3], FAQ 2 - Startup / Group buffer -@end ifnottex -@subsubheading Question 2.4: - - My group buffer becomes a bit crowded, is there a way to - sort my groups into categories so I can easier browse - through them? - +@noindent -Answer: +@node [2.4] +@subsubheading Question 2.4 - Gnus offers the topic mode, it allows you to sort your - groups in, well, topics, e.g. all groups dealing with - Linux under the topic linux, all dealing with music under - the topic music and all dealing with scottish music under - the topic scottish which is a subtopic of music. - +My group buffer becomes a bit crowded, is there a way to +sort my groups into categories so I can easier browse +through them? - To enter topic mode, just hit t while in Group buffer. Now - you can use @samp{T n} to create a topic - at point and @samp{T m} to move a group to - a specific topic. For more commands see the manual or the - menu. You might want to include the %P specifier at the - beginning of your gnus-group-line-format variable to have - the groups nicely indented. - -@ifnottex -@node [2.5], , [2.4], FAQ 2 - Startup / Group buffer -@end ifnottex -@subsubheading Question 2.5: +@subsubheading Answer - How to manually sort the groups in Group buffer? How to - sort the groups in a topic? - +Gnus offers the topic mode, it allows you to sort your +groups in, well, topics, e.g. all groups dealing with +Linux under the topic linux, all dealing with music under +the topic music and all dealing with scottish music under +the topic scottish which is a subtopic of music. -Answer: +To enter topic mode, just hit t while in Group buffer. Now +you can use @samp{T n} to create a topic +at point and @samp{T m} to move a group to +a specific topic. For more commands see the manual or the +menu. You might want to include the %P specifier at the +beginning of your gnus-group-line-format variable to have +the groups nicely indented. - Move point over the group you want to move and - hit @samp{C-k}, now move point to the - place where you want the group to be and - hit @samp{C-y}. - -@ifnottex -@node FAQ 3 - Getting messages, FAQ 4 - Reading messages, FAQ 2 - Startup / Group buffer, Frequently Asked Questions -@end ifnottex -@subsection Getting messages +@node [2.5] +@subsubheading Question 2.5 + +How to manually sort the groups in Group buffer? How to +sort the groups in a topic? + +@subsubheading Answer + +Move point over the group you want to move and +hit @samp{C-k}, now move point to the +place where you want the group to be and +hit @samp{C-y}. + +@node FAQ 3 - Getting Messages +@subsection Getting Messages @menu -* [3.1]:: I just installed Gnus, started it via M-x gnus but it only says - "nntp (news) open error", what to do? -* [3.2]:: I'm working under Windows and have no idea what ~/.gnus means. -* [3.3]:: My news server requires authentication, how to store user name - and password on disk? -* [3.4]:: Gnus seems to start up OK, but I can't find out how to - subscribe to a group. -* [3.5]:: Gnus doesn't show all groups / Gnus says I'm not allowed to - post on this server as well as I am, what's that? -* [3.6]:: I want Gnus to fetch news from several servers, is this possible? -* [3.7]:: And how about local spool files? -* [3.8]:: OK, reading news works now, but I want to be able to read my mail - with Gnus, too. How to do it? -* [3.9]:: And what about IMAP? -* [3.10]:: At the office we use one of those MS Exchange servers, - can I use Gnus to read my mail from it? -* [3.11]:: Can I tell Gnus not to delete the mails on the server - it retrieves via POP3? +* [3.1]:: I just installed Gnus, started it via @samp{M-x gnus} + but it only says "nntp (news) open error", what to do? +* [3.2]:: I'm working under Windows and have no idea what ~/.gnus.el + means. +* [3.3]:: My news server requires authentication, how to store user + name and password on disk? +* [3.4]:: Gnus seems to start up OK, but I can't find out how to + subscribe to a group. +* [3.5]:: Gnus doesn't show all groups / Gnus says I'm not allowed + to post on this server as well as I am, what's that? +* [3.6]:: I want Gnus to fetch news from several servers, is this + possible? +* [3.7]:: And how about local spool files? +* [3.8]:: OK, reading news works now, but I want to be able to read + my mail with Gnus, too. How to do it? +* [3.9]:: And what about IMAP? +* [3.10]:: At the office we use one of those MS Exchange servers, can + I use Gnus to read my mail from it? +* [3.11]:: Can I tell Gnus not to delete the mails on the server it + retrieves via POP3? @end menu -@ifnottex -@node [3.1], [3.2], FAQ 3 - Getting messages, FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.1: +@node [3.1] +@subsubheading Question 3.1 - I just installed Gnus, started it via - @samp{M-x gnus} - but it only says "nntp (news) open error", what to do? - +I just installed Gnus, started it via +@samp{M-x gnus} +but it only says "nntp (news) open error", what to do? -Answer: +@subsubheading Answer - You've got to tell Gnus where to fetch the news from. Read - the documentation for information on how to do this. As a - first start, put those lines in ~/.gnus: - +You've got to tell Gnus where to fetch the news from. Read +the documentation for information on how to do this. As a +first start, put those lines in ~/.gnus.el: @example (setq gnus-select-method '(nntp "news.yourprovider.net")) (setq user-mail-address "you@@yourprovider.net") (setq user-full-name "Your Name") @end example - -@ifnottex -@node [3.2], [3.3], [3.1], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.2: - - I'm working under Windows and have no idea what ~/.gnus means. - +@noindent -Answer: - - The ~/ means the home directory where Gnus and Emacs look for the -configuration files. However, you don't really need to know what this -means, it suffices that Emacs knows what it means :-) You can type -@samp{C-x C-f ~/.gnus RET } (yes, with the forward slash, even on -Windows), and Emacs will open the right file for you. (It will most -likely be new, and thus empty.) However, I'd discourage you from -doing so, since the directory Emacs chooses will most certainly not be -what you want, so let's do it the correct way. The first thing you've -got to do is to create a suitable directory (no blanks in directory -name please) e.g. @file{c:\myhome}. Then you must set the environment -variable HOME to this directory. To do this under Win9x or Me include -the line - +@node [3.2] +@subsubheading Question 3.2 + +I'm working under Windows and have no idea what ~/.gnus.el means. + +@subsubheading Answer + +The ~/ means the home directory where Gnus and Emacs look +for the configuration files. However, you don't really +need to know what this means, it suffices that Emacs knows +what it means :-) You can type +@samp{C-x C-f ~/.gnus.el RET } +(yes, with the forward slash, even on Windows), and +Emacs will open the right file for you. (It will most +likely be new, and thus empty.) +However, I'd discourage you from doing so, since the +directory Emacs chooses will most certainly not be what +you want, so let's do it the correct way. +The first thing you've got to do is to +create a suitable directory (no blanks in directory name +please) e.g. c:\myhome. Then you must set the environment +variable HOME to this directory. To do this under Win9x +or Me include the line @example - SET HOME=C:\myhome - @end example - @noindent - in your autoexec.bat and reboot. Under NT, 2000 and XP, - hit Winkey+Pause/Break to enter system options (if it - doesn't work, go to Control Panel -> System). There you'll - find the possibility to set environment variables, create - a new one with name HOME and value @file{c:\myhome}, a reboot is - not necessary. - - Now to create ~/.gnus, say - @samp{C-x C-f ~/.gnus RET C-x C-s}. - in Emacs. - -@ifnottex -@node [3.3], [3.4], [3.2], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.3: +in your autoexec.bat and reboot. Under NT, 2000 and XP, +hit Winkey+Pause/Break to enter system options (if it +doesn't work, go to Control Panel -> System). There you'll +find the possibility to set environment variables, create +a new one with name HOME and value C:\myhome, a reboot is +not necessary. - My news server requires authentication, how to store - user name and password on disk? - +Now to create ~/.gnus.el, say +@samp{C-x C-f ~/.gnus.el RET C-x C-s}. +in Emacs. -Answer: +@node [3.3] +@subsubheading Question 3.3 - Create a file ~/.authinfo which includes for each server a line like this - +My news server requires authentication, how to store +user name and password on disk? + +@subsubheading Answer + +Create a file ~/.authinfo which includes for each server a line like this @example machine news.yourprovider.net login YourUserName password YourPassword @end example - @noindent . - Make sure that the file isn't readable to others if you - work on a OS which is capable of doing so. (Under Unix - say - +Make sure that the file isn't readable to others if you +work on a OS which is capable of doing so. (Under Unix +say @example chmod 600 ~/.authinfo @end example - @noindent - in a shell.) - -@ifnottex -@node [3.4], [3.5], [3.3], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.4: - Gnus seems to start up OK, but I can't find out how to - subscribe to a group. - +in a shell.) -Answer: +@node [3.4] +@subsubheading Question 3.4 - If you know the name of the group say @samp{U - name.of.group RET} in group buffer (use the - tab-completion Luke). Otherwise hit ^ in group buffer, - this brings you to the server buffer. Now place point (the - cursor) over the server which carries the group you want, - hit @samp{RET}, move point to the group - you want to subscribe to and say @samp{u} - to subscribe to it. - -@ifnottex -@node [3.5], [3.6], [3.4], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.5: +Gnus seems to start up OK, but I can't find out how to +subscribe to a group. - Gnus doesn't show all groups / Gnus says I'm not allowed to - post on this server as well as I am, what's that? - +@subsubheading Answer -Answer: +If you know the name of the group say @samp{U +name.of.group RET} in group buffer (use the +tab-completion Luke). Otherwise hit ^ in group buffer, +this brings you to the server buffer. Now place point (the +cursor) over the server which carries the group you want, +hit @samp{RET}, move point to the group +you want to subscribe to and say @samp{u} +to subscribe to it. - Some providers allow restricted anonymous access and full - access only after authorization. To make Gnus send authinfo - to those servers append - +@node [3.5] +@subsubheading Question 3.5 + +Gnus doesn't show all groups / Gnus says I'm not allowed to +post on this server as well as I am, what's that? + +@subsubheading Answer + +Some providers allow restricted anonymous access and full +access only after authorization. To make Gnus send authinfo +to those servers append @example force yes @end example - - @noindent - to the line for those servers in ~/.authinfo. -@ifnottex -@node [3.6], [3.7], [3.5], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.6: +to the line for those servers in ~/.authinfo. - I want Gnus to fetch news from several servers, is this possible? - +@node [3.6] +@subsubheading Question 3.6 -Answer: +I want Gnus to fetch news from several servers, is this possible? - Of course. You can specify more sources for articles in the - variable gnus-secondary-select-methods. Add something like - this in ~/.gnus: - +@subsubheading Answer + +Of course. You can specify more sources for articles in the +variable gnus-secondary-select-methods. Add something like +this in ~/.gnus.el: @example -(add-to-list 'gnus-secondary-select-methods +(add-to-list 'gnus-secondary-select-methods '(nntp "news.yourSecondProvider.net")) -(add-to-list 'gnus-secondary-select-methods - '(nntp "news.yourThirdProvider.net")) +(add-to-list 'gnus-secondary-select-methods + '(nntp "news.yourThirdProvider.net")) @end example - -@ifnottex -@node [3.7], [3.8], [3.6], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.7: +@noindent - And how about local spool files? - +@node [3.7] +@subsubheading Question 3.7 -Answer: +And how about local spool files? - No problem, this is just one more select method called - nnspool, so you want this: - +@subsubheading Answer + +No problem, this is just one more select method called +nnspool, so you want this: @example (add-to-list 'gnus-secondary-select-methods '(nnspool "")) @end example - @noindent - Or this if you don't want an NNTP Server as primary news source: - + +Or this if you don't want an NNTP Server as primary news source: @example (setq gnus-select-method '(nnspool "")) @end example - @noindent - Gnus will look for the spool file in /usr/spool/news, if you - want something different, change the line above to something like this: - + +Gnus will look for the spool file in /usr/spool/news, if you +want something different, change the line above to something like this: @example (add-to-list 'gnus-secondary-select-methods - '(nnspool "" (nnspool-directory "/usr/local/myspoolddir"))) + '(nnspool "" + (nnspool-directory "/usr/local/myspoolddir"))) @end example - @noindent - This sets the spool directory for this server only. - You might have to specify more stuff like the program used - to post articles, see the Gnus manual on how to do this. - -@ifnottex -@node [3.8], [3.9], [3.7], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.8: - OK, reading news works now, but I want to be able to read my mail - with Gnus, too. How to do it? - - -Answer: - - That's a bit harder since there are many possible sources - for mail, many possible ways for storing mail and many - different ways for sending mail. The most common cases are - these: 1: You want to read your mail from a pop3 server and - send them directly to a SMTP Server 2: Some program like - fetchmail retrieves your mail and stores it on disk from - where Gnus shall read it. Outgoing mail is sent by - Sendmail, Postfix or some other MTA. Sometimes, you even - need a combination of the above cases. - - - However, the first thing to do is to tell Gnus in which way - it should store the mail, in Gnus terminology which back end - to use. Gnus supports many different back ends, the most - commonly used one is nnml. It stores every mail in one file - and is therefor quite fast. However you might prefer a one - file per group approach if your file system has problems with - many small files, the nnfolder back end is then probably the - choice for you. To use nnml add the following to ~/.gnus: - +This sets the spool directory for this server only. +You might have to specify more stuff like the program used +to post articles, see the Gnus manual on how to do this. + +@node [3.8] +@subsubheading Question 3.8 + +OK, reading news works now, but I want to be able to read my mail +with Gnus, too. How to do it? + +@subsubheading Answer + +That's a bit harder since there are many possible sources +for mail, many possible ways for storing mail and many +different ways for sending mail. The most common cases are +these: 1: You want to read your mail from a pop3 server and +send them directly to a SMTP Server 2: Some program like +fetchmail retrieves your mail and stores it on disk from +where Gnus shall read it. Outgoing mail is sent by +Sendmail, Postfix or some other MTA. Sometimes, you even +need a combination of the above cases. + +However, the first thing to do is to tell Gnus in which way +it should store the mail, in Gnus terminology which back end +to use. Gnus supports many different back ends, the most +commonly used one is nnml. It stores every mail in one file +and is therefor quite fast. However you might prefer a one +file per group approach if your file system has problems with +many small files, the nnfolder back end is then probably the +choice for you. To use nnml add the following to ~/.gnus.el: @example (add-to-list 'gnus-secondary-select-methods '(nnml "")) @end example - @noindent - As you might have guessed, if you want nnfolder, it's - + +As you might have guessed, if you want nnfolder, it's @example (add-to-list 'gnus-secondary-select-methods '(nnfolder "")) @end example - +@noindent - Now we need to tell Gnus, where to get it's mail from. If - it's a POP3 server, then you need something like this: - +Now we need to tell Gnus, where to get it's mail from. If +it's a POP3 server, then you need something like this: @example (eval-after-load "mail-source" @@ -649,75 +601,68 @@ Answer: :user "yourUserName" :password "yourPassword"))) @end example - @noindent - Make sure ~/.gnus isn't readable to others if you store - your password there. If you want to read your mail from a - traditional spool file on your local machine, it's - + +Make sure ~/.gnus.el isn't readable to others if you store +your password there. If you want to read your mail from a +traditional spool file on your local machine, it's @example (eval-after-load "mail-source" - '(add-to-list 'mail-sources '(file :path "/path/to/spool/file"))) + '(add-to-list 'mail-sources '(file :path "/path/to/spool/file")) @end example - @noindent - If it's a Maildir, with one file per message as used by - postfix, Qmail and (optionally) fetchmail it's - + +If it's a Maildir, with one file per message as used by +postfix, Qmail and (optionally) fetchmail it's @example (eval-after-load "mail-source" '(add-to-list 'mail-sources '(maildir :path "/path/to/Maildir/" :subdirs ("cur" "new"))) @end example - @noindent - And finally if you want to read your mail from several files - in one directory, for example because procmail already split your - mail, it's - + +And finally if you want to read your mail from several files +in one directory, for example because procmail already split your +mail, it's @example (eval-after-load "mail-source" - '(add-to-list 'mail-sources '(directory :path "/path/to/procmail-dir/" - :suffix ".prcml")) + '(add-to-list 'mail-sources + '(directory :path "/path/to/procmail-dir/" + :suffix ".prcml"))) @end example - @noindent - Where :suffix ".prcml" tells Gnus only to use files with the - suffix .prcml. - - OK, now you only need to tell Gnus how to send mail. If you - want to send mail via sendmail (or whichever MTA is playing - the role of sendmail on your system), you don't need to do - anything. However, if you want to send your mail to an - SMTP Server you need the following in your ~/.gnus - +Where :suffix ".prcml" tells Gnus only to use files with the +suffix .prcml. + +OK, now you only need to tell Gnus how to send mail. If you +want to send mail via sendmail (or whichever MTA is playing +the role of sendmail on your system), you don't need to do +anything. However, if you want to send your mail to an +SMTP Server you need the following in your ~/.gnus.el @example (setq send-mail-function 'smtpmail-send-it) (setq message-send-mail-function 'smtpmail-send-it) (setq smtpmail-default-smtp-server "smtp.yourProvider.net") @end example - -@ifnottex -@node [3.9], [3.10], [3.8], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.9: +@noindent - And what about IMAP? - +@node [3.9] +@subsubheading Question 3.9 -Answer: +And what about IMAP? - There are two ways of using IMAP with Gnus. The first one is - to use IMAP like POP3, that means Gnus fetches the mail from - the IMAP server and stores it on disk. If you want to do - this (you don't really want to do this) add the following to - ~/.gnus - +@subsubheading Answer + +There are two ways of using IMAP with Gnus. The first one is +to use IMAP like POP3, that means Gnus fetches the mail from +the IMAP server and stores it on disk. If you want to do +this (you don't really want to do this) add the following to +~/.gnus.el @example (add-to-list 'mail-sources '(imap :server "mail.mycorp.com" @@ -728,249 +673,215 @@ Answer: :mailbox "INBOX" :fetchflag "\\Seen")) @end example - @noindent - You might have to tweak the values for stream and/or - authentification, see the Gnus manual node "Mail Source - Specifiers" for possible values. - - If you want to use IMAP the way it's intended, you've got to - follow a different approach. You've got to add the nnimap - back end to your select method and give the information - about the server there. - +You might have to tweak the values for stream and/or +authentification, see the Gnus manual node "Mail Source +Specifiers" for possible values. + +If you want to use IMAP the way it's intended, you've got to +follow a different approach. You've got to add the nnimap +back end to your select method and give the information +about the server there. @example -(add-to-list - 'gnus-secondary-select-methods - '(nnimap "Give the baby a name" - (nnimap-address "imap.yourProvider.net") - (nnimap-port 143) - (nnimap-list-pattern "archive.*"))) +(add-to-list 'gnus-secondary-select-methods + '(nnimap "Give the baby a name" + (nnimap-address "imap.yourProvider.net") + (nnimap-port 143) + (nnimap-list-pattern "archive.*"))) @end example - @noindent - Again, you might have to specify how to authenticate to the - server if Gnus can't guess the correct way, see the Manual - Node "IMAP" for detailed information. - -@ifnottex -@node [3.10], [3.11], [3.9], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.10: - - At the office we use one of those MS Exchange servers, can I use - Gnus to read my mail from it? - - -Answer: - Offer your administrator a pair of new running shoes for - activating IMAP on the server and follow the instructions - above. - -@ifnottex -@node [3.11], , [3.10], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.11: - - Can I tell Gnus not to delete the mails on the server it - retrieves via POP3? - - -Answer: - - First of all, that's not the way POP3 is intended to work, - if you have the possibility, you should use the IMAP - Protocol if you want your messages to stay on the - server. Nevertheless there might be situations where you - need the feature, but sadly Gnus itself has no predefined - functionality to do so. - - - However this is Gnus county so there are possibilities to - achieve what you want. The easiest way is to get an external - program which retrieves copies of the mail and stores them - on disk, so Gnus can read it from there. On Unix systems you - could use e.g. fetchmail for this, on MS Windows you can use - Hamster, an excellent local news and mail server. - - - The other solution would be, to replace the method Gnus - uses to get mail from POP3 servers by one which is capable - of leaving the mail on the server. If you use XEmacs, get - the package mail-lib, it includes an enhanced pop3.el, - look in the file, there's documentation on how to tell - Gnus to use it and not to delete the retrieved mail. For - GNU Emacs look for the file epop3.el which can do the same - (If you know the home of this file, please send me an - e-mail). You can also tell Gnus to use an external program - (e.g. fetchmail) to fetch your mail, see the info node - "Mail Source Specifiers" in the Gnus manual on how to do - it. - - -@ifnottex -@node FAQ 4 - Reading messages, FAQ 5 - Composing messages, FAQ 3 - Getting messages, Frequently Asked Questions -@end ifnottex +Again, you might have to specify how to authenticate to the +server if Gnus can't guess the correct way, see the Manual +Node "IMAP" for detailed information. + +@node [3.10] +@subsubheading Question 3.10 + +At the office we use one of those MS Exchange servers, can I use +Gnus to read my mail from it? + +@subsubheading Answer + +Offer your administrator a pair of new running shoes for +activating IMAP on the server and follow the instructions +above. + +@node [3.11] +@subsubheading Question 3.11 + +Can I tell Gnus not to delete the mails on the server it +retrieves via POP3? + +@subsubheading Answer + +First of all, that's not the way POP3 is intended to work, +if you have the possibility, you should use the IMAP +Protocol if you want your messages to stay on the +server. Nevertheless there might be situations where you +need the feature, but sadly Gnus itself has no predefined +functionality to do so. + +However this is Gnus county so there are possibilities to +achieve what you want. The easiest way is to get an external +program which retrieves copies of the mail and stores them +on disk, so Gnus can read it from there. On Unix systems you +could use e.g. fetchmail for this, on MS Windows you can use +Hamster, an excellent local news and mail server. + +The other solution would be, to replace the method Gnus +uses to get mail from POP3 servers by one which is capable +of leaving the mail on the server. If you use XEmacs, get +the package mail-lib, it includes an enhanced pop3.el, +look in the file, there's documentation on how to tell +Gnus to use it and not to delete the retrieved mail. For +GNU Emacs look for the file epop3.el which can do the same +(If you know the home of this file, please send me an +e-mail). You can also tell Gnus to use an external program +(e.g. fetchmail) to fetch your mail, see the info node +"Mail Source Specifiers" in the Gnus manual on how to do +it. + +@node FAQ 4 - Reading messages @subsection Reading messages @menu -* [4.1]:: When I enter a group, all read messages are gone. - How to view them again? -* [4.2]:: How to tell Gnus to show an important message every time - I enter a group, even when it's read? -* [4.3]:: How to view the headers of a message? -* [4.4]:: How to view the raw unformatted message? -* [4.5]:: How can I change the headers Gnus displays by default at the - top of the article buffer? -* [4.6]:: I'd like Gnus NOT to render HTML-mails but show me the - text part if it's available. How to do it? -* [4.7]:: Can I use some other browser than w3 to render my HTML-mails? -* [4.8]:: Is there anything I can do to make poorly formatted mails - more readable? -* [4.9]:: Is there a way to automatically ignore posts by specific authors - or with specific words in the subject? And can I highlight more - interesting ones in some way? -* [4.10]:: How can I disable threading in some (e.g. mail-) groups, or set - other variables specific for some groups? -* [4.11]:: Can I highlight messages written by me and follow-ups to those? -* [4.12]:: The number of total messages in a group which Gnus displays in - group buffer is by far to high, especially in mail groups. - Is this a bug? -* [4.13]:: I don't like the layout of summary and article buffer, - how to change it? Perhaps even a three pane display? -* [4.14]:: I don't like the way the Summary buffer looks, how to tweak it? -* [4.15]:: How to split incoming mails in several groups? +* [4.1]:: When I enter a group, all read messages are gone. How to + view them again? +* [4.2]:: How to tell Gnus to show an important message every time I + enter a group, even when it's read? +* [4.3]:: How to view the headers of a message? +* [4.4]:: How to view the raw unformatted message? +* [4.5]:: How can I change the headers Gnus displays by default at + the top of the article buffer? +* [4.6]:: I'd like Gnus NOT to render HTML-mails but show me the + text part if it's available. How to do it? +* [4.7]:: Can I use some other browser than w3 to render my + HTML-mails? +* [4.8]:: Is there anything I can do to make poorly formatted mails + more readable? +* [4.9]:: Is there a way to automatically ignore posts by specific + authors or with specific words in the subject? And can I highlight + more interesting ones in some way? +* [4.10]:: How can I disable threading in some (e.g. mail-) groups, + or set other variables specific for some groups? +* [4.11]:: Can I highlight messages written by me and follow-ups to + those? +* [4.12]:: The number of total messages in a group which Gnus + displays in group buffer is by far to high, especially in mail + groups. Is this a bug? +* [4.13]:: I don't like the layout of summary and article buffer, how + to change it? Perhaps even a three pane display? +* [4.14]:: I don't like the way the Summary buffer looks, how to + tweak it? +* [4.15]:: How to split incoming mails in several groups? @end menu -@ifnottex -@node [4.1], [4.2], FAQ 4 - Reading messages, FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.1: +@node [4.1] +@subsubheading Question 4.1 - When I enter a group, all read messages are gone. How to view them again? - +When I enter a group, all read messages are gone. How to view them again? -Answer: +@subsubheading Answer - If you enter the group by saying - @samp{RET} - in group buffer with point over the group, only unread and ticked messages are loaded. Say - @samp{C-u RET} - instead to load all available messages. If you want only the e.g. 300 newest say - @samp{C-u 300 RET} - +If you enter the group by saying +@samp{RET} +in group buffer with point over the group, only unread and ticked messages are loaded. Say +@samp{C-u RET} +instead to load all available messages. If you want only the e.g. 300 newest say +@samp{C-u 300 RET} - Loading only unread messages can be annoying if you have threaded view enabled, say - +Loading only unread messages can be annoying if you have threaded view enabled, say @example (setq gnus-fetch-old-headers 'some) @end example - - @noindent - in ~/.gnus to load enough old articles to prevent teared threads, replace 'some with t to load - all articles (Warning: Both settings enlarge the amount of data which is - fetched when you enter a group and slow down the process of entering a group). +in ~/.gnus.el to load enough old articles to prevent teared threads, replace 'some with t to load +all articles (Warning: Both settings enlarge the amount of data which is +fetched when you enter a group and slow down the process of entering a group). - If you already use Gnus 5.10, you can say - @samp{/o N} - In summary buffer to load the last N messages, this feature is not available in 5.8.8 - +If you already use Gnus 5.10, you can say +@samp{/o N} +In summary buffer to load the last N messages, this feature is not available in 5.8.8 - If you don't want all old messages, but the parent of the message you're just reading, - you can say @samp{^}, if you want to retrieve the whole thread - the message you're just reading belongs to, @samp{A T} is your friend. - -@ifnottex -@node [4.2], [4.3], [4.1], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.2: +If you don't want all old messages, but the parent of the message you're just reading, +you can say @samp{^}, if you want to retrieve the whole thread +the message you're just reading belongs to, @samp{A T} is your friend. - How to tell Gnus to show an important message every time I - enter a group, even when it's read? - +@node [4.2] +@subsubheading Question 4.2 -Answer: +How to tell Gnus to show an important message every time I +enter a group, even when it's read? - You can tick important messages. To do this hit - @samp{u} while point is in summary buffer - over the message. When you want to remove the mark, hit - either @samp{d} (this deletes the tick - mark and set's unread mark) or @samp{M c} - (which deletes all marks for the message). - -@ifnottex -@node [4.3], [4.4], [4.2], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.3: +@subsubheading Answer - How to view the headers of a message? - +You can tick important messages. To do this hit +@samp{u} while point is in summary buffer +over the message. When you want to remove the mark, hit +either @samp{d} (this deletes the tick +mark and set's unread mark) or @samp{M c} +(which deletes all marks for the message). -Answer: +@node [4.3] +@subsubheading Question 4.3 - Say @samp{t} - to show all headers, one more - @samp{t} - hides them again. - -@ifnottex -@node [4.4], [4.5], [4.3], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.4: +How to view the headers of a message? - How to view the raw unformatted message? - +@subsubheading Answer -Answer: +Say @samp{t} +to show all headers, one more +@samp{t} +hides them again. - Say - @samp{C-u g} - to show the raw message - @samp{g} - returns to normal view. - -@ifnottex -@node [4.5], [4.6], [4.4], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.5: +@node [4.4] +@subsubheading Question 4.4 - How can I change the headers Gnus displays by default at - the top of the article buffer? - +How to view the raw unformatted message? -Answer: +@subsubheading Answer + +Say +@samp{C-u g} +to show the raw message +@samp{g} +returns to normal view. + +@node [4.5] +@subsubheading Question 4.5 + +How can I change the headers Gnus displays by default at +the top of the article buffer? + +@subsubheading Answer + +The variable gnus-visible-headers controls which headers +are shown, its value is a regular expression, header lines +which match it are shown. So if you want author, subject, +date, and if the header exists, Followup-To and MUA / NUA +say this in ~/.gnus.el: - The variable gnus-visible-headers controls which headers - are shown, its value is a regular expression, header lines - which match it are shown. So if you want author, subject, - date, and if the header exists, Followup-To and MUA / NUA - say this in ~/.gnus: - @example -(setq gnus-visible-headers - "^\\(From:\\|Subject:\\|Date:\\|Followup-To:\ -\\|X-Newsreader:\\|User-Agent:\\|X-Mailer:\\)") +(setq gnus-visible-headers + '("^From" "^Subject" "^Date" "^Newsgroups" "^Followup-To" + "^User-Agent" "^X-Newsreader" "^X-Mailer")) @end example - -@ifnottex -@node [4.6], [4.7], [4.5], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.6: +@noindent - I'd like Gnus NOT to render HTML-mails but show me the - text part if it's available. How to do it? - +@node [4.6] +@subsubheading Question 4.6 -Answer: +I'd like Gnus NOT to render HTML-mails but show me the +text part if it's available. How to do it? - Say - +@subsubheading Answer + +Say @example (eval-after-load "mm-decode" @@ -978,240 +889,206 @@ Answer: (add-to-list 'mm-discouraged-alternatives "text/html") (add-to-list 'mm-discouraged-alternatives "text/richtext"))) @end example - @noindent - in ~/.gnus. If you don't want HTML rendered, even if there's no text alternative add - + +in ~/.gnus.el. If you don't want HTML rendered, even if there's no text alternative add @example (setq mm-automatic-display (remove "text/html" mm-automatic-display)) @end example - @noindent - too. - -@ifnottex -@node [4.7], [4.8], [4.6], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.7: - Can I use some other browser than w3 to render my HTML-mails? - +too. -Answer: +@node [4.7] +@subsubheading Question 4.7 - Only if you use Gnus 5.10 or younger. In this case you've got the - choice between w3, w3m, links, lynx and html2text, which - one is used can be specified in the variable - mm-text-html-renderer, so if you want links to render your - mail say - +Can I use some other browser than w3 to render my HTML-mails? + +@subsubheading Answer + +Only if you use Gnus 5.10 or younger. In this case you've got the +choice between w3, w3m, links, lynx and html2text, which +one is used can be specified in the variable +mm-text-html-renderer, so if you want links to render your +mail say @example (setq mm-text-html-renderer 'links) @end example - -@ifnottex -@node [4.8], [4.9], [4.7], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.8: - - Is there anything I can do to make poorly formatted mails - more readable? - - -Answer: - - Gnus offers you several functions to "wash" incoming mail, - you can find them if you browse through the menu, item Article->Washing. The most - interesting ones are probably "Wrap long lines" ( - @samp{W w} - ), "Decode ROT13" ( - @samp{W r} - ) and "Outlook Deuglify" which repairs the dumb quoting used - by many users of Microsoft products ( - @samp{W Y f} gives you full deuglify. - See @samp{W Y C-h} or - have a look at the menus for other deuglifications). - Outlook deuglify is only available since Gnus 5.10. - -@ifnottex -@node [4.9], [4.10], [4.8], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.9: - - Is there a way to automatically ignore posts by specific - authors or with specific words in the subject? And can I - highlight more interesting ones in some way? - - -Answer: - - You want Scoring. Scoring means, that you define rules - which assign each message an integer value. Depending on - the value the message is highlighted in summary buffer (if - it's high, say +2000) or automatically marked read (if the - value is low, say -800) or some other action happens. - - - There are basically three ways of setting up rules which assign - the scoring-value to messages. The first and easiest way is to set - up rules based on the article you are just reading. Say you're - reading a message by a guy who always writes nonsense and you want - to ignore his messages in the future. Hit - @samp{L}, to set up a rule which lowers the score. - Now Gnus asks you which the criteria for lowering the Score shall - be. Hit @samp{?} twice to see all possibilities, - we want @samp{a} which means the author (the from - header). Now Gnus wants to know which kind of matching we want. - Hit either @samp{e} for an exact match or - @samp{s} for substring-match and delete afterwards - everything but the name to score down all authors with the given - name no matter which email address is used. Now you need to tell - Gnus when to apply the rule and how long it should last, hit e.g. - @samp{p} to apply the rule now and let it last - forever. If you want to raise the score instead of lowering it say - @samp{I} instead of @samp{L}. - +@noindent - You can also set up rules by hand. To do this say @samp{V - f} in summary buffer. Then you are asked for the name - of the score file, it's name.of.group.SCORE for rules valid in - only one group or all.Score for rules valid in all groups. See the - Gnus manual for the exact syntax, basically it's one big list - whose elements are lists again. the first element of those lists - is the header to score on, then one more list with what to match, - which score to assign, when to expire the rule and how to do the - matching. If you find me very interesting, you could e.g. add the - following to your all.Score: - +@node [4.8] +@subsubheading Question 4.8 + +Is there anything I can do to make poorly formatted mails +more readable? + +@subsubheading Answer + +Gnus offers you several functions to "wash" incoming mail, you can +find them if you browse through the menu, item +Article->Washing. The most interesting ones are probably "Wrap +long lines" (@samp{W w}), "Decode ROT13" +(@samp{W r}) and "Outlook Deuglify" which repairs +the dumb quoting used by many users of Microsoft products +(@samp{W Y f} gives you full deuglify. +See @samp{W Y C-h} or have a look at the menus for +other deuglifications). Outlook deuglify is only available since +Gnus 5.10. + +@node [4.9] +@subsubheading Question 4.9 + +Is there a way to automatically ignore posts by specific +authors or with specific words in the subject? And can I +highlight more interesting ones in some way? + +@subsubheading Answer + +You want Scoring. Scoring means, that you define rules +which assign each message an integer value. Depending on +the value the message is highlighted in summary buffer (if +it's high, say +2000) or automatically marked read (if the +value is low, say -800) or some other action happens. + +There are basically three ways of setting up rules which assign +the scoring-value to messages. The first and easiest way is to set +up rules based on the article you are just reading. Say you're +reading a message by a guy who always writes nonsense and you want +to ignore his messages in the future. Hit +@samp{L}, to set up a rule which lowers the score. +Now Gnus asks you which the criteria for lowering the Score shall +be. Hit @samp{?} twice to see all possibilities, +we want @samp{a} which means the author (the from +header). Now Gnus wants to know which kind of matching we want. +Hit either @samp{e} for an exact match or +@samp{s} for substring-match and delete afterwards +everything but the name to score down all authors with the given +name no matter which email address is used. Now you need to tell +Gnus when to apply the rule and how long it should last, hit e.g. +@samp{p} to apply the rule now and let it last +forever. If you want to raise the score instead of lowering it say +@samp{I} instead of @samp{L}. + +You can also set up rules by hand. To do this say @samp{V +f} in summary buffer. Then you are asked for the name +of the score file, it's name.of.group.SCORE for rules valid in +only one group or all.Score for rules valid in all groups. See the +Gnus manual for the exact syntax, basically it's one big list +whose elements are lists again. the first element of those lists +is the header to score on, then one more list with what to match, +which score to assign, when to expire the rule and how to do the +matching. If you find me very interesting, you could e.g. add the +following to your all.Score: @example (("references" ("hschmi22.userfqdn.rz-online.de" 500 nil s)) ("message-id" ("hschmi22.userfqdn.rz-online.de" 999 nil s))) @end example - @noindent - This would add 999 to the score of messages written by me - and 500 to the score of messages which are a (possibly - indirect) answer to a message written by me. Of course - nobody with a sane mind would do this :-) - - The third alternative is adaptive scoring. This means Gnus - watches you and tries to find out what you find - interesting and what annoying and sets up rules - which reflect this. Adaptive scoring can be a huge help - when reading high traffic groups. If you want to activate - adaptive scoring say - +This would add 999 to the score of messages written by me +and 500 to the score of messages which are a (possibly +indirect) answer to a message written by me. Of course +nobody with a sane mind would do this :-) + +The third alternative is adaptive scoring. This means Gnus +watches you and tries to find out what you find +interesting and what annoying and sets up rules +which reflect this. Adaptive scoring can be a huge help +when reading high traffic groups. If you want to activate +adaptive scoring say @example (setq gnus-use-adaptive-scoring t) @end example - @noindent - in ~/.gnus. - -@ifnottex -@node [4.10], [4.11], [4.9], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.10: - How can I disable threading in some (e.g. mail-) groups, or - set other variables specific for some groups? - +in ~/.gnus.el. -Answer: +@node [4.10] +@subsubheading Question 4.10 - While in group buffer move point over the group and hit - @samp{G c}, this opens a buffer where you - can set options for the group. At the bottom of the buffer - you'll find an item that allows you to set variables - locally for the group. To disable threading enter - gnus-show-threads as name of variable and nil as - value. Hit button done at the top of the buffer when - you're ready. - -@ifnottex -@node [4.11], [4.12], [4.10], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.11: +How can I disable threading in some (e.g. mail-) groups, or +set other variables specific for some groups? - Can I highlight messages written by me and follow-ups to - those? - +@subsubheading Answer -Answer: +While in group buffer move point over the group and hit +@samp{G c}, this opens a buffer where you +can set options for the group. At the bottom of the buffer +you'll find an item that allows you to set variables +locally for the group. To disable threading enter +gnus-show-threads as name of variable and nil as +value. Hit button done at the top of the buffer when +you're ready. - Stop those "Can I ..." questions, the answer is always yes - in Gnus Country :-). It's a three step process: First we - make faces (specifications of how summary-line shall look - like) for those postings, then we'll give them some - special score and finally we'll tell Gnus to use the new - faces. You can find detailed instructions on how to do it on - @uref{http://my.gnus.org/Members/dzimmerm/HowTo%2C2002-07-25%2C1027619165012198456/view,my.gnus.org} - -@ifnottex -@node [4.12], [4.13], [4.11], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.12: - - The number of total messages in a group which Gnus - displays in group buffer is by far to high, especially in - mail groups. Is this a bug? - +@node [4.11] +@subsubheading Question 4.11 -Answer: - - No, that's a matter of design of Gnus, fixing this would - mean reimplementation of major parts of Gnus' - back ends. Gnus thinks "highest-article-number - - lowest-article-number = total-number-of-articles". This - works OK for Usenet groups, but if you delete and move - many messages in mail groups, this fails. To cure the - symptom, enter the group via @samp{C-u RET} - (this makes Gnus get all messages), then - hit @samp{M P b} to mark all messages and - then say @samp{B m name.of.group} to move - all messages to the group they have been in before, they - get new message numbers in this process and the count is - right again (until you delete and move your mail to other - groups again). - -@ifnottex -@node [4.13], [4.14], [4.12], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.13: +Can I highlight messages written by me and follow-ups to +those? - I don't like the layout of summary and article buffer, how - to change it? Perhaps even a three pane display? - +@subsubheading Answer -Answer: +Stop those "Can I ..." questions, the answer is always yes +in Gnus Country :-). It's a three step process: First we +make faces (specifications of how summary-line shall look +like) for those postings, then we'll give them some +special score and finally we'll tell Gnus to use the new +faces. You can find detailed instructions on how to do it on +@uref{http://my.gnus.org/node/view/224, my.gnus.org} - You can control the windows configuration by calling the - function gnus-add-configuration. The syntax is a bit - complicated but explained very well in the manual node - "Window Layout". Some popular examples: - +@node [4.12] +@subsubheading Question 4.12 - Instead 25% summary 75% article buffer 35% summary and 65% - article (the 1.0 for article means "take the remaining - space"): - +The number of total messages in a group which Gnus +displays in group buffer is by far to high, especially in +mail groups. Is this a bug? + +@subsubheading Answer + +No, that's a matter of design of Gnus, fixing this would +mean reimplementation of major parts of Gnus' +back ends. Gnus thinks "highest-article-number - +lowest-article-number = total-number-of-articles". This +works OK for Usenet groups, but if you delete and move +many messages in mail groups, this fails. To cure the +symptom, enter the group via @samp{C-u RET} +(this makes Gnus get all messages), then +hit @samp{M P b} to mark all messages and +then say @samp{B m name.of.group} to move +all messages to the group they have been in before, they +get new message numbers in this process and the count is +right again (until you delete and move your mail to other +groups again). + +@node [4.13] +@subsubheading Question 4.13 + +I don't like the layout of summary and article buffer, how +to change it? Perhaps even a three pane display? + +@subsubheading Answer + +You can control the windows configuration by calling the +function gnus-add-configuration. The syntax is a bit +complicated but explained very well in the manual node +"Window Layout". Some popular examples: + +Instead 25% summary 75% article buffer 35% summary and 65% +article (the 1.0 for article means "take the remaining +space"): @example -(gnus-add-configuration - '(article (vertical 1.0 - (summary .35 point) - (article 1.0)))) +(gnus-add-configuration + '(article (vertical 1.0 (summary .35 point) (article 1.0)))) @end example - +@noindent - A three pane layout, Group buffer on the left, summary - buffer top-right, article buffer bottom-right: - +A three pane layout, Group buffer on the left, summary +buffer top-right, article buffer bottom-right: @example (gnus-add-configuration @@ -1228,46 +1105,40 @@ Answer: (vertical 25 (group 1.0)) (vertical 1.0 - (summary 1.0 point))))) + (summary 1.0 point))))) @end example - -@ifnottex -@node [4.14], [4.15], [4.13], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.14: +@noindent - I don't like the way the Summary buffer looks, how to tweak it? - +@node [4.14] +@subsubheading Question 4.14 -Answer: - - You've got to play around with the variable - gnus-summary-line-format. It's value is a string of - symbols which stand for things like author, date, subject - etc. A list of the available specifiers can be found in the - manual node "Summary Buffer Lines" and the often forgotten - node "Formatting Variables" and it's sub-nodes. There - you'll find useful things like positioning the cursor and - tabulators which allow you a summary in table form, but - sadly hard tabulators are broken in 5.8.8. - +I don't like the way the Summary buffer looks, how to tweak it? - Since 5.10, Gnus offers you some very nice new specifiers, - e.g. %B which draws a thread-tree and %&user-date which - gives you a date where the details are dependent of the - articles age. Here's an example which uses both: - +@subsubheading Answer + +You've got to play around with the variable +gnus-summary-line-format. It's value is a string of +symbols which stand for things like author, date, subject +etc. A list of the available specifiers can be found in the +manual node "Summary Buffer Lines" and the often forgotten +node "Formatting Variables" and it's sub-nodes. There +you'll find useful things like positioning the cursor and +tabulators which allow you a summary in table form, but +sadly hard tabulators are broken in 5.8.8. + +Since 5.10, Gnus offers you some very nice new specifiers, +e.g. %B which draws a thread-tree and %&user-date which +gives you a date where the details are dependent of the +articles age. Here's an example which uses both: @example -(setq gnus-summary-line-format - ":%U%R %B %s %-60=|%4L |%-20,20f |%&user-date; \n") +(setq gnus-summary-line-format ":%U%R %B %s %-60=|%4L |%-20,20f |%&user-date; \n") @end example - @noindent - resulting in: - -@smallexample +resulting in: + +@example :O Re: [Richard Stallman] rfc2047.el | 13 |Lars Magne Ingebrigt |Sat 23:06 :O Re: Revival of the ding-patches list | 13 |Lars Magne Ingebrigt |Sat 23:12 :R > Re: Find correct list of articles for a gro| 25 |Lars Magne Ingebrigt |Sat 23:16 @@ -1280,54 +1151,48 @@ Answer: :R > Re: Gnus still doesn't count messages prope| 23 |Lars Magne Ingebrigt |Sat 23:57 :O \-> ... | 18 |Kai Grossjohann | 0:35 :O \-> ... | 13 |Lars Magne Ingebrigt | 0:56 -@end smallexample - -@ifnottex -@node [4.15], , [4.14], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.15: +@end example +@noindent - How to split incoming mails in several groups? - +@node [4.15] +@subsubheading Question 4.15 -Answer: +How to split incoming mails in several groups? - Gnus offers two possibilities for splitting mail, the easy - nnmail-split-methods and the more powerful Fancy Mail - Splitting. I'll only talk about the first one, refer to - the manual, node "Fancy Mail Splitting" for the latter. - +@subsubheading Answer - The value of nnmail-split-methods is a list, each element - is a list which stands for a splitting rule. Each rule has - the form "group where matching articles should go to", - "regular expression which has to be matched", the first - rule which matches wins. The last rule must always be a - general rule (regular expression .*) which denotes where - articles should go which don't match any other rule. If - the folder doesn't exist yet, it will be created as soon - as an article lands there. By default the mail will be - send to all groups whose rules match. If you - don't want that (you probably don't want), say - +Gnus offers two possibilities for splitting mail, the easy +nnmail-split-methods and the more powerful Fancy Mail +Splitting. I'll only talk about the first one, refer to +the manual, node "Fancy Mail Splitting" for the latter. + +The value of nnmail-split-methods is a list, each element +is a list which stands for a splitting rule. Each rule has +the form "group where matching articles should go to", +"regular expression which has to be matched", the first +rule which matches wins. The last rule must always be a +general rule (regular expression .*) which denotes where +articles should go which don't match any other rule. If +the folder doesn't exist yet, it will be created as soon +as an article lands there. By default the mail will be +send to all groups whose rules match. If you +don't want that (you probably don't want), say @example (setq nnmail-crosspost nil) @end example - @noindent - in ~/.gnus. - - An example might be better than thousand words, so here's - my nnmail-split-methods. Note that I send duplicates in a - special group and that the default group is spam, since I - filter all mails out which are from some list I'm - subscribed to or which are addressed directly to me - before. Those rules kill about 80% of the Spam which - reaches me (Email addresses are changed to prevent spammers - from using them): - +in ~/.gnus.el. + +An example might be better than thousand words, so here's +my nnmail-split-methods. Note that I send duplicates in a +special group and that the default group is spam, since I +filter all mails out which are from some list I'm +subscribed to or which are addressed directly to me +before. Those rules kill about 80% of the Spam which +reaches me (Email addresses are changed to prevent spammers +from using them): @example (setq nnmail-split-methods @@ -1336,133 +1201,114 @@ Answer: ("Gnus-Tut" "^\\(To:\\|CC:\\).*localpart@@socha.bla.*") ("tcsh" "^\\(To:\\|CC:\\).*localpart@@mx.gw.bla.*") ("BAfH" "^\\(To:\\|CC:\\).*localpart@@.*uni-muenchen.bla.*") - ("Hamster-src" - "^\\(CC:\\|To:\\).*hamster-sourcen@@yahoogroups.\\(de\\|com\\).*") + ("Hamster-src" "^\\(CC:\\|To:\\).*hamster-sourcen@@yahoogroups.\\(de\\|com\\).*") ("Tagesschau" "^From: tagesschau <localpart@@www.tagesschau.bla>$") ("Replies" "^\\(CC:\\|To:\\).*localpart@@Frank-Schmitt.bla.*") - ("EK" - "^From:.*\\(localpart@@privateprovider.bla\\|localpart@@workplace.bla\\).*") - ("Spam" - "^Content-Type:.*\\(ks_c_5601-1987\\|EUC-KR\\|big5\\|iso-2022-jp\\).*") - ("Spam" - "^Subject:.*\\(This really work\\|XINGA\\|ADV:\\|XXX\\|adult\\|sex\\).*") - ("Spam" - "^Subject:.*\\(\=\?ks_c_5601-1987\?\\|\=\?euc-kr\?\\|\=\?big5\?\\).*") + ("EK" "^From:.*\\(localpart@@privateprovider.bla\\|localpart@@workplace.bla\\).*") + ("Spam" "^Content-Type:.*\\(ks_c_5601-1987\\|EUC-KR\\|big5\\|iso-2022-jp\\).*") + ("Spam" "^Subject:.*\\(This really work\\|XINGA\\|ADV:\\|XXX\\|adult\\|sex\\).*") + ("Spam" "^Subject:.*\\(\=\?ks_c_5601-1987\?\\|\=\?euc-kr\?\\|\=\?big5\?\\).*") ("Spam" "^X-Mailer:\\(.*BulkMailer.*\\|.*MIME::Lite.*\\|\\)") - ("Spam" - "^X-Mailer:\\(.*CyberCreek Avalanche\\|.*http\:\/\/GetResponse\.com\\)") - ("Spam" - "^From:.*\\(verizon\.net\\|prontomail\.com\\|money\\|ConsumerDirect\\).*") + ("Spam" "^X-Mailer:\\(.*CyberCreek Avalanche\\|.*http\:\/\/GetResponse\.com\\)") + ("Spam" "^From:.*\\(verizon\.net\\|prontomail\.com\\|money\\|ConsumerDirect\\).*") ("Spam" "^Delivered-To: GMX delivery to spamtrap@@gmx.bla$") ("Spam" "^Received: from link2buy.com") ("Spam" "^CC: .*azzrael@@t-online.bla") ("Spam" "^X-Mailer-Version: 1.50 BETA") ("Uni" "^\\(CC:\\|To:\\).*localpart@@uni-koblenz.bla.*") - ("Inbox" - "^\\(CC:\\|To:\\).*\\(my\ name\\|address@@one.bla\\|adress@@two.bla\\)") + ("Inbox" "^\\(CC:\\|To:\\).*\\(my\ name\\|address@@one.bla\\|adress@@two.bla\\)") ("Spam" ""))) @end example - +@noindent -@ifnottex -@node FAQ 5 - Composing messages, FAQ 6 - Old messages, FAQ 4 - Reading messages, Frequently Asked Questions -@end ifnottex +@node FAQ 5 - Composing messages @subsection Composing messages @menu -* [5.1]:: What are the basic commands I need to know for sending mail and - postings? -* [5.2]:: How to enable automatic word-wrap when composing messages? -* [5.3]:: How to set stuff like From, Organization, Reply-To, signature...? -* [5.4]:: Can I set things like From, Signature etc group based on the - group I post too? -* [5.5]:: Is there a spell-checker? Perhaps even on-the-fly spell-checking? -* [5.6]:: Can I set the dictionary based on the group I'm posting to? -* [5.7]:: Is there some kind of address-book, so I needn't remember all - those email addresses? -* [5.8]:: Sometimes I see little images at the top of article buffer. - What's that and how can I send one with my postings, too? -* [5.9]:: Sometimes I accidentally hit r instead of f in newsgroups. - Can Gnus warn me, when I'm replying by mail in newsgroups? -* [5.10]:: How to tell Gnus not to generate a sender header? -* [5.11]:: I want Gnus to locally store copies of my send mail and news, - how to do it? -* [5.12]:: People tell me my Message-IDs are not correct, - why aren't they and how to fix it? +* [5.1]:: What are the basic commands I need to know for sending + mail and postings? +* [5.2]:: How to enable automatic word-wrap when composing messages? +* [5.3]:: How to set stuff like From, Organization, Reply-To, + signature...? +* [5.4]:: Can I set things like From, Signature etc group based on + the group I post too? +* [5.5]:: Is there a spell-checker? Perhaps even on-the-fly + spell-checking? +* [5.6]:: Can I set the dictionary based on the group I'm posting + to? +* [5.7]:: Is there some kind of address-book, so I needn't remember + all those email addresses? +* [5.8]:: Sometimes I see little images at the top of article + buffer. What's that and how can I send one with my postings, too? +* [5.9]:: Sometimes I accidentally hit r instead of f in newsgroups. + Can Gnus warn me, when I'm replying by mail in newsgroups? +* [5.10]:: How to tell Gnus not to generate a sender header? +* [5.11]:: I want Gnus to locally store copies of my send mail and + news, how to do it? +* [5.12]:: People tell me my Message-IDs are not correct, why aren't + they and how to fix it? @end menu -@ifnottex -@node [5.1], [5.2], FAQ 5 - Composing messages, FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.1: +@node [5.1] +@subsubheading Question 5.1 - What are the basic commands I need to know for sending mail and postings? - +What are the basic commands I need to know for sending mail and postings? -Answer: - - To start composing a new mail hit @samp{m} - either in Group or Summary buffer, for a posting, it's - either @samp{a} in Group buffer and - filling the Newsgroups header manually - or @samp{a} in the Summary buffer of the - group where the posting shall be send to. Replying by mail - is - @samp{r} if you don't want to cite the - author, or import the cited text manually and - @samp{R} to cite the text of the original - message. For a follow up to a newsgroup, it's - @samp{f} and @samp{F} - (analog to @samp{r} and - @samp{R}). - +@subsubheading Answer - Enter new headers above the line saying "--text follows - this line--", enter the text below the line. When ready - hit @samp{C-c C-c}, to send the message, - if you want to finish it later hit @samp{C-c - C-d} to save it in the drafts group, where you - can start editing it again by saying @samp{D - e}. - -@ifnottex -@node [5.2], [5.3], [5.1], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.2: +To start composing a new mail hit @samp{m} +either in Group or Summary buffer, for a posting, it's +either @samp{a} in Group buffer and +filling the Newsgroups header manually +or @samp{a} in the Summary buffer of the +group where the posting shall be send to. Replying by mail +is +@samp{r} if you don't want to cite the +author, or import the cited text manually and +@samp{R} to cite the text of the original +message. For a follow up to a newsgroup, it's +@samp{f} and @samp{F} +(analogously to @samp{r} and +@samp{R}). - How to enable automatic word-wrap when composing messages? - +Enter new headers above the line saying "--text follows +this line--", enter the text below the line. When ready +hit @samp{C-c C-c}, to send the message, +if you want to finish it later hit @samp{C-c +C-d} to save it in the drafts group, where you +can start editing it again by saying @samp{D +e}. -Answer: +@node [5.2] +@subsubheading Question 5.2 - Say - +How to enable automatic word-wrap when composing messages? + +@subsubheading Answer + +Say @example (add-hook 'message-mode-hook - (lambda () - (setq fill-column 72) - (turn-on-auto-fill))) + (lambda () + (setq fill-column 72) + (turn-on-auto-fill))) @end example - @noindent - in ~/.gnus. You can reformat a paragraph by hitting - @samp{M-q} (as usual) - -@ifnottex -@node [5.3], [5.4], [5.2], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.3: - How to set stuff like From, Organization, Reply-To, signature...? - +in ~/.gnus.el. You can reformat a paragraph by hitting +@samp{M-q} (as usual) -Answer: +@node [5.3] +@subsubheading Question 5.3 - There are other ways, but you should use posting styles - for this. (See below why). - This example should make the syntax clear: - +How to set stuff like From, Organization, Reply-To, signature...? + +@subsubheading Answer + +There are other ways, but you should use posting styles +for this. (See below why). +This example should make the syntax clear: @example (setq gnus-posting-styles @@ -1474,146 +1320,121 @@ Answer: ("X-SampleHeader" "foobar") (eval (setq some-variable "Foo bar"))))) @end example - @noindent - The ".*" means that this settings are the default ones - (see below), valid values for the first element of the - following lists are signature, signature-file, - organization, address, name or body. The attribute name - can also be a string. In that case, this will be used as - a header name, and the value will be inserted in the - headers of the article; if the value is `nil', the header - name will be removed. You can also say (eval (foo bar)), - then the function foo will be evaluated with argument bar - and the result will be thrown away. - -@ifnottex -@node [5.4], [5.5], [5.3], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.4: - - Can I set things like From, Signature etc group based on the group I post too? - -Answer: - - That's the strength of posting styles. Before, we used ".*" - to set the default for all groups. You can use a regexp - like "^gmane" and the following settings are only applied - to postings you send to the gmane hierarchy, use - ".*binaries" instead and they will be applied to postings - send to groups containing the string binaries in their - name etc. - - - You can instead of specifying a regexp specify a function - which is evaluated, only if it returns true, the - corresponding settings take effect. Two interesting - candidates for this are message-news-p which returns t if - the current Group is a newsgroup and the corresponding - message-mail-p. - - - Note that all forms that match are applied, that means in - the example below, when I post to - gmane.mail.spam.spamassassin.general, the settings under - ".*" are applied and the settings under message-news-p and - those under "^gmane" and those under - "^gmane\\.mail\\.spam\\.spamassassin\\.general$". Because - of this put general settings at the top and specific ones - at the bottom. - +The ".*" means that this settings are the default ones +(see below), valid values for the first element of the +following lists are signature, signature-file, +organization, address, name or body. The attribute name +can also be a string. In that case, this will be used as +a header name, and the value will be inserted in the +headers of the article; if the value is `nil', the header +name will be removed. You can also say (eval (foo bar)), +then the function foo will be evaluated with argument bar +and the result will be thrown away. + +@node [5.4] +@subsubheading Question 5.4 + +Can I set things like From, Signature etc group based on the group I post too? + +@subsubheading Answer + +That's the strength of posting styles. Before, we used ".*" +to set the default for all groups. You can use a regexp +like "^gmane" and the following settings are only applied +to postings you send to the gmane hierarchy, use +".*binaries" instead and they will be applied to postings +send to groups containing the string binaries in their +name etc. + +You can instead of specifying a regexp specify a function +which is evaluated, only if it returns true, the +corresponding settings take effect. Two interesting +candidates for this are message-news-p which returns t if +the current Group is a newsgroup and the corresponding +message-mail-p. + +Note that all forms that match are applied, that means in +the example below, when I post to +gmane.mail.spam.spamassassin.general, the settings under +".*" are applied and the settings under message-news-p and +those under "^gmane" and those under +"^gmane\\.mail\\.spam\\.spamassassin\\.general$". Because +of this put general settings at the top and specific ones +at the bottom. @example (setq gnus-posting-styles '((".*" ;;default (name "Frank Schmitt") (organization "Hamme net, kren mer och nimmi") - (signature-file "~/.signature")) + (signature-file "~/.signature") ) ((message-news-p) ;;Usenet news? (address "mySpamTrap@@Frank-Schmitt.bla") - ("Reply-To" "hereRealRepliesOnlyPlease@@Frank-Schmitt.bla")) + ("Reply-To" "hereRealRepliesOnlyPlease@@Frank-Schmitt.bla") ) ((message-mail-p) ;;mail? - (address "usedForMails@@Frank-Schmitt.bla")) + (address "usedForMails@@Frank-Schmitt.bla") ) ("^gmane" ;;this is mail, too in fact (address "usedForMails@@Frank-Schmitt.net") - ("Reply-To" nil)) + ("Reply-To" nil) ) ("^gmane.mail.spam.spamassassin.general$" (eval (setq mail-envelope-from "Azzrael@@rz-online.de")) - (address "Azzrael@@rz-online.de")))) + (address "Azzrael@@rz-online.de")) )) @end example - -@ifnottex -@node [5.5], [5.6], [5.4], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.5: +@noindent - Is there a spell-checker? Perhaps even on-the-fly spell-checking? - +@node [5.5] +@subsubheading Question 5.5 -Answer: +Is there a spell-checker? Perhaps even on-the-fly spell-checking? -You can use ispell.el to spell-check stuff in Emacs. So the first -thing to do is to make sure that you've got either -@itemize @bullet -@item -@uref{http://fmg-www.cs.ucla.edu/fmg-members/geoff/ispell.html,ispell} -or -@item -@uref{http://aspell.sourceforge.net/,aspell} -@end itemize -@noindent -installed and in your Path. - -Then you need -@uref{http://www.kdstevens.com/~stevens/ispell-page.html,ispell.el,ispell.el} -and for on-the-fly spell-checking -@uref{http://www-sop.inria.fr/mimosa/personnel/Manuel.Serrano/flyspell/flyspell.html,flyspell.el,flyspell.el}. -Ispell.el is shipped with Gnus Emacs and available through the Emacs -package system, flyspell.el is shipped with Emacs and part of XEmacs -text-modes package which is available through the package system, so -there should be no need to install them manually. - +@subsubheading Answer - Ispell.el assumes you use ispell, if you choose aspell say - +You can use ispell.el to spell-check stuff in Emacs. So the +first thing to do is to make sure that you've got either +@uref{http://fmg-www.cs.ucla.edu/fmg-members/geoff/ispell.html, ispell} +or @uref{http://aspell.sourceforge.net/, aspell} +installed and in your Path. Then you need +@uref{http://www.kdstevens.com/~stevens/ispell-page.html, ispell.el} +and for on-the-fly spell-checking +@uref{http://www-sop.inria.fr/mimosa/personnel/Manuel.Serrano/flyspell/flyspell.html, flyspell.el}. +Ispell.el is shipped with Emacs and available through the XEmacs package system, +flyspell.el is shipped with Emacs and part of XEmacs text-modes package which is +available through the package system, so there should be no need to install them +manually. + +Ispell.el assumes you use ispell, if you choose aspell say @example (setq ispell-program-name "aspell") @end example - - @noindent - in your Emacs configuration file. +in your Emacs configuration file. - If you want your outgoing messages to be spell-checked, say - +If you want your outgoing messages to be spell-checked, say @example (add-hook 'message-send-hook 'ispell-message) @end example - @noindent - In your ~/.gnus, if you prefer on-the-fly spell-checking say - + +In your ~/.gnus.el, if you prefer on-the-fly spell-checking say @example (add-hook 'message-mode-hook (lambda () (flyspell-mode 1))) @end example - -@ifnottex -@node [5.6], [5.7], [5.5], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.6: +@noindent - Can I set the dictionary based on the group I'm posting to? - +@node [5.6] +@subsubheading Question 5.6 -Answer: +Can I set the dictionary based on the group I'm posting to? - Yes, say something like - +@subsubheading Answer + +Yes, say something like @example (add-hook 'gnus-select-group-hook @@ -1625,55 +1446,47 @@ Answer: (t (ispell-change-dictionary "english"))))) @end example - - @noindent - in ~/.gnus. Change "^de\\." and "deutsch8" to something - that suits your needs. -@ifnottex -@node [5.7], [5.8], [5.6], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.7: +in ~/.gnus.el. Change "^de\\." and "deutsch8" to something +that suits your needs. - Is there some kind of address-book, so I needn't remember - all those email addresses? - +@node [5.7] +@subsubheading Question 5.7 -Answer: +Is there some kind of address-book, so I needn't remember +all those email addresses? - There's an very basic solution for this, mail aliases. - You can store your mail addresses in a ~/.mailrc file using a simple - alias syntax: - +@subsubheading Answer + +There's an very basic solution for this, mail aliases. +You can store your mail addresses in a ~/.mailrc file using a simple +alias syntax: @example alias al "Al <al@@english-heritage.bla>" @end example - @noindent - Then typing your alias (followed by a space or punctuation - character) on a To: or Cc: line in the message buffer will - cause Gnus to insert the full address for you. See the - node "Mail Aliases" in Message (not Gnus) manual for - details. - - However, what you really want is the Insidious Big Brother - Database bbdb. Get it through the XEmacs package system or from - @uref{http://bbdb.sourceforge.net/,bbdb's homepage}. - Now place the following in ~/.gnus, to activate bbdb for Gnus: - +Then typing your alias (followed by a space or punctuation +character) on a To: or Cc: line in the message buffer will +cause Gnus to insert the full address for you. See the +node "Mail Aliases" in Message (not Gnus) manual for +details. + +However, what you really want is the Insidious Big Brother +Database bbdb. Get it through the XEmacs package system or from +@uref{http://bbdb.sourceforge.net/, bbdb's homepage}. +Now place the following in ~/.gnus.el, to activate bbdb for Gnus: @example (require 'bbdb) (bbdb-initialize 'gnus 'message) @end example - @noindent - Now you probably want some general bbdb configuration, - place them in ~/.emacs: - + +Now you probably want some general bbdb configuration, +place them in ~/.emacs: @example (require 'bbdb) @@ -1689,56 +1502,50 @@ alias al "Al <al@@english-heritage.bla>" ;;No popup-buffers (setq bbdb-use-pop-up nil) @end example - @noindent - Now you should be ready to go. Say @samp{M-x bbdb RET - RET} to open a bbdb buffer showing all - entries. Say @samp{c} to create a new - entry, @samp{b} to search your BBDB and - @samp{C-o} to add a new field to an - entry. If you want to add a sender to the BBDB you can - also just hit `:' on the posting in the summary buffer and - you are done. When you now compose a new mail, - hit @samp{TAB} to cycle through know - recipients. - -@ifnottex -@node [5.8], [5.9], [5.7], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.8: - - Sometimes I see little images at the top of article - buffer. What's that and how can I send one with my - postings, too? - -Answer: - - Those images are called X-Faces. They are 48*48 pixel b/w - pictures, encoded in a header line. If you want to include - one in your posts, you've got to convert some image to a - X-Face. So fire up some image manipulation program (say - Gimp), open the image you want to include, cut out the - relevant part, reduce color depth to 1 bit, resize to - 48*48 and save as bitmap. Now you should get the compface - package from - @uref{ftp://ftp.cs.indiana.edu:/pub/faces/,this site}. - and create the actual X-face by saying - +Now you should be ready to go. Say @samp{M-x bbdb RET +RET} to open a bbdb buffer showing all +entries. Say @samp{c} to create a new +entry, @samp{b} to search your BBDB and +@samp{C-o} to add a new field to an +entry. If you want to add a sender to the BBDB you can +also just hit `:' on the posting in the summary buffer and +you are done. When you now compose a new mail, +hit @samp{TAB} to cycle through know +recipients. + +@node [5.8] +@subsubheading Question 5.8 + +Sometimes I see little images at the top of article +buffer. What's that and how can I send one with my +postings, too? + +@subsubheading Answer + +Those images are called X-Faces. They are 48*48 pixel b/w +pictures, encoded in a header line. If you want to include +one in your posts, you've got to convert some image to a +X-Face. So fire up some image manipulation program (say +Gimp), open the image you want to include, cut out the +relevant part, reduce color depth to 1 bit, resize to +48*48 and save as bitmap. Now you should get the compface +package from +@uref{ftp://ftp.cs.indiana.edu:/pub/faces/, this site}. +and create the actual X-face by saying @example -cat file.xbm | xbm2ikon |compface > file.face -cat ./file.face | sed 's/\\/\\\\/g' | sed 's/\"/\\\"/g' > ./file.face.quoted +cat file.xbm | xbm2ikon | compface > file.face +cat file.face | sed 's/\\/\\\\/g;s/\"/\\\"/g;' > file.face.quoted @end example - @noindent -If you can't use compface, there's an online X-face converter at@* -@uref{http://www.dairiki.org/xface/}. If you use MS Windows, you -could also use the WinFace program from -@uref{http://www.xs4all.nl/~walterln/winface/}. -Now you only have to tell Gnus to include the X-face in your postings -by saying +If you can't use compface, there's an online X-face converter at +@uref{http://www.dairiki.org/xface/}. +If you use MS Windows, you could also use the WinFace program from +@uref{http://www.xs4all.nl/~walterln/winface/}. +Now you only have to tell Gnus to include the X-face in your postings by saying @example (setq message-default-headers @@ -1747,33 +1554,28 @@ by saying (insert-file-contents "~/.xemacs/xface") (buffer-string))) @end example - @noindent - in ~/.gnus. - -@ifnottex -@node [5.9], [5.10], [5.8], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.9: - - Sometimes I accidentally hit r instead of f in - newsgroups. Can Gnus warn me, when I'm replying by mail in - newsgroups? - -Answer: +in ~/.gnus.el. - Put this in ~/.gnus: - +@node [5.9] +@subsubheading Question 5.9 + +Sometimes I accidentally hit r instead of f in +newsgroups. Can Gnus warn me, when I'm replying by mail in +newsgroups? + +@subsubheading Answer + +Put this in ~/.gnus.el: @example (setq gnus-confirm-mail-reply-to-news t) @end example - @noindent - if you already use Gnus 5.10, if you still use 5.8.8 or - 5.9 try this instead: - + +if you already use Gnus 5.10, if you still use 5.8.8 or +5.9 try this instead: @example (eval-after-load "gnus-msg" @@ -1785,44 +1587,37 @@ Answer: (y-or-n-p "Really reply by mail to article author? ")) ad-do-it)))) @end example - -@ifnottex -@node [5.10], [5.11], [5.9], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.10: +@noindent - How to tell Gnus not to generate a sender header? - +@node [5.10] +@subsubheading Question 5.10 -Answer: +How to tell Gnus not to generate a sender header? - Since 5.10 Gnus doesn't generate a sender header by - default. For older Gnus' try this in ~/.gnus: - +@subsubheading Answer + +Since 5.10 Gnus doesn't generate a sender header by +default. For older Gnus' try this in ~/.gnus.el: @example (eval-after-load "message" '(add-to-list 'message-syntax-checks '(sender . disabled))) @end example - - -@ifnottex -@node [5.11], [5.12], [5.10], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.11: +@noindent - I want gnus to locally store copies of my send mail and - news, how to do it? - +@node [5.11] +@subsubheading Question 5.11 -Answer: +I want Gnus to locally store copies of my send mail and +news, how to do it? - You must set the variable gnus-message-archive-group to do - this. You can set it to a string giving the name of the - group where the copies shall go or like in the example - below use a function which is evaluated and which returns - the group to use. - +@subsubheading Answer + +You must set the variable gnus-message-archive-group to do +this. You can set it to a string giving the name of the +group where the copies shall go or like in the example +below use a function which is evaluated and which returns +the group to use. @example (setq gnus-message-archive-group @@ -1830,31 +1625,31 @@ Answer: "nnml:Send-News" "nnml:Send-Mail"))) @end example - - -@ifnottex -@node [5.12], , [5.11], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.12: +@noindent - People tell me my Message-IDs are not correct, why - aren't they and how to fix it? - +@node [5.12] +@subsubheading Question 5.12 + +People tell me my Message-IDs are not correct, why +aren't they and how to fix it? -Answer: +@subsubheading Answer + +The message-ID is an unique identifier for messages you +send. To make it unique, Gnus need to know which machine +name to put after the "@@". If the name of the machine +where Gnus is running isn't suitable (it probably isn't +at most private machines) you can tell Gnus what to use +by saying: - The message-ID is an unique identifier for messages you - send. To make it unique, Gnus need to know which machine - name to put after the "@@". If the name of the machine - where Gnus is running isn't suitable (it probably isn't - at most private machines) you can tell Gnus what to use - by saying @example (setq message-user-fqdn "yourmachine.yourdomain.tld") @end example @noindent - in ~/.gnus. If you use Gnus 5.9 or ealier, you can use this -instead (works for newer versions a well): + +in ~/.gnus.el. If you use Gnus 5.9 or ealier, you can use this +instead (works for newer versions a well): + @example (eval-after-load "message" '(let ((fqdn "yourmachine.yourdomain.tld"));; <-- Edit this! @@ -1865,110 +1660,97 @@ instead (works for newer versions a well): "Return user's fully qualified domain name." fqdn)))) @end example +@noindent - If you have no idea what to insert for - "yourmachine.yourdomain.tld", you've got several - choices. You can either ask your provider if he allows - you to use something like - yourUserName.userfqdn.provider.net, or you can use - somethingUnique.yourdomain.tld if you own the domain - yourdomain.tld, or you can register at a service which - gives private users a FQDN for free, e.g. - @uref{http://www.stura.tu-freiberg.de/~dlx/addfqdn.html}. - (Sorry but this website is in German, if you know of an - English one offering the same, drop me a note). - - - Finally you can tell Gnus not to generate a Message-ID - for News at all (and letting the server do the job) by saying - +If you have no idea what to insert for +"yourmachine.yourdomain.tld", you've got several +choices. You can either ask your provider if he allows +you to use something like +yourUserName.userfqdn.provider.net, or you can use +somethingUnique.yourdomain.tld if you own the domain +yourdomain.tld, or you can register at a service which +gives private users a FQDN for free, e.g. +@uref{http://www.stura.tu-freiberg.de/~dlx/addfqdn.html}. +(Sorry but this website is in German, if you know of an +English one offering the same, drop me a note). + +Finally you can tell Gnus not to generate a Message-ID +for News at all (and letting the server do the job) by saying @example (setq message-required-news-headers (remove' Message-ID message-required-news-headers)) @end example - @noindent - you can also tell Gnus not to generate Message-IDs for mail by saying - + +you can also tell Gnus not to generate Message-IDs for mail by saying @example (setq message-required-mail-headers (remove' Message-ID message-required-mail-headers)) @end example - @noindent - , however some mail servers don't generate proper - Message-IDs, too, so test if your Mail Server behaves - correctly by sending yourself a Mail and looking at the Message-ID. - -@ifnottex -@node FAQ 6 - Old messages, FAQ 7 - Gnus in a dial-up environment, FAQ 5 - Composing messages, Frequently Asked Questions -@end ifnottex +, however some mail servers don't generate proper +Message-IDs, too, so test if your Mail Server behaves +correctly by sending yourself a Mail and looking at the Message-ID. + +@node FAQ 6 - Old messages @subsection Old messages @menu -* [6.1]:: How to import my old mail into Gnus? -* [6.2]:: How to archive interesting messages? -* [6.3]:: How to search for a specific message? -* [6.4]:: How to get rid of old unwanted mail? -* [6.5]:: I want that all read messages are expired (at least in some - groups). How to do it? -* [6.6]:: I don't want expiration to delete my mails but to move them - to another group. +* [6.1]:: How to import my old mail into Gnus? +* [6.2]:: How to archive interesting messages? +* [6.3]:: How to search for a specific message? +* [6.4]:: How to get rid of old unwanted mail? +* [6.5]:: I want that all read messages are expired (at least in some + groups). How to do it? +* [6.6]:: I don't want expiration to delete my mails but to move them + to another group. @end menu -@ifnottex -@node [6.1], [6.2], FAQ 6 - Old messages, FAQ 6 - Old messages -@end ifnottex -@subsubheading Question 6.1: - - How to import my old mail into Gnus? - - -Answer: - - The easiest way is to tell your old mail program to - export the messages in mbox format. Most Unix mailers - are able to do this, if you come from the MS Windows - world, you may find tools at - @uref{http://mbx2mbox.sourceforge.net/}. - - - Now you've got to import this mbox file into Gnus. To do - this, create a nndoc group based on the mbox file by - saying @samp{G f /path/file.mbox RET} in - Group buffer. You now have read-only access to your - mail. If you want to import the messages to your normal - Gnus mail groups hierarchy, enter the nndoc group you've - just created by saying @samp{C-u RET} - (thus making sure all messages are retrieved), mark all - messages by saying @samp{M P b} and - either copy them to the desired group by saying - @samp{B c name.of.group RET} or send them - through nnmail-split-methods (respool them) by saying - @samp{B r}. - -@ifnottex -@node [6.2], [6.3], [6.1], FAQ 6 - Old messages -@end ifnottex -@subsubheading Question 6.2: - - How to archive interesting messages? - - -Answer: - - If you stumble across an interesting message, say in - gnu.emacs.gnus and want to archive it there are several - solutions. The first and easiest is to save it to a file - by saying @samp{O f}. However, wouldn't - it be much more convenient to have more direct access to - the archived message from Gnus? If you say yes, put this - snippet by Frank Haun <pille3003@@fhaun.de> in - ~/.gnus: - +@node [6.1] +@subsubheading Question 6.1 + +How to import my old mail into Gnus? + +@subsubheading Answer + +The easiest way is to tell your old mail program to +export the messages in mbox format. Most Unix mailers +are able to do this, if you come from the MS Windows +world, you may find tools at +@uref{http://mbx2mbox.sourceforge.net/}. + +Now you've got to import this mbox file into Gnus. To do +this, create a nndoc group based on the mbox file by +saying @samp{G f /path/file.mbox RET} in +Group buffer. You now have read-only access to your +mail. If you want to import the messages to your normal +Gnus mail groups hierarchy, enter the nndoc group you've +just created by saying @samp{C-u RET} +(thus making sure all messages are retrieved), mark all +messages by saying @samp{M P b} and +either copy them to the desired group by saying +@samp{B c name.of.group RET} or send them +through nnmail-split-methods (respool them) by saying +@samp{B r}. + +@node [6.2] +@subsubheading Question 6.2 + +How to archive interesting messages? + +@subsubheading Answer + +If you stumble across an interesting message, say in +gnu.emacs.gnus and want to archive it there are several +solutions. The first and easiest is to save it to a file +by saying @samp{O f}. However, wouldn't +it be much more convenient to have more direct access to +the archived message from Gnus? If you say yes, put this +snippet by Frank Haun <pille3003@@fhaun.de> in +~/.gnus.el: @example (defun my-archive-article (&optional n) @@ -1987,624 +1769,531 @@ more then one article." (replace-regexp-in-string "^.*:" "" gnus-newsgroup-name))))) (gnus-summary-copy-article n archive-name))) @end example - @noindent - You can now say @samp{M-x - my-archive-article} in summary buffer to - archive the article under the cursor in a nnml - group. (Change nnml to your preferred back end) - - Of course you can also make sure the cache is enabled by saying - +You can now say @samp{M-x +my-archive-article} in summary buffer to +archive the article under the cursor in a nnml +group. (Change nnml to your preferred back end) + +Of course you can also make sure the cache is enabled by saying @example (setq gnus-use-cache t) @end example - @noindent - then you only have to set either the tick or the dormant - mark for articles you want to keep, setting the read - mark will remove them from cache. - -@ifnottex -@node [6.3], [6.4], [6.2], FAQ 6 - Old messages -@end ifnottex -@subsubheading Question 6.3: - - How to search for a specific message? - - -Answer: - - There are several ways for this, too. For a posting from - a Usenet group the easiest solution is probably to ask - @uref{http://groups.google.com,groups.google.com}, - if you found the posting there, tell Google to display - the raw message, look for the message-id, and say - @samp{M-^ the@@message.id RET} in a - summary buffer. - Since Gnus 5.10 there's also a Gnus interface for - groups.google.com which you can call with - @samp{G W}) in group buffer. - - - Another idea which works for both mail and news groups - is to enter the group where the message you are - searching is and use the standard Emacs search - @samp{C-s}, it's smart enough to look at - articles in collapsed threads, too. If you want to - search bodies, too try @samp{M-s} - instead. Further on there are the - gnus-summary-limit-to-foo functions, which can help you, - too. - - Of course you can also use grep to search through your - local mail, but this is both slow for big archives and - inconvenient since you are not displaying the found mail - in Gnus. Here comes nnir into action. Nnir is a front end - to search engines like swish-e or swish++ and - others. You index your mail with one of those search - engines and with the help of nnir you can search trough - the indexed mail and generate a temporary group with all - messages which met your search criteria. If this sound - cool to you get nnir.el from the contrib directory of the Gnus - distribution or - @uref{http://quimby.gnus.org/cgi-bin/cvsweb.cgi/~checkout~/gnus/contrib/nnir.el?rev=HEAD&content-type=text/plain} - Instructions on how to use it are at the top of the file. - -@ifnottex -@node [6.4], [6.5], [6.3], FAQ 6 - Old messages -@end ifnottex -@subsubheading Question 6.4: - - How to get rid of old unwanted mail? - - -Answer: - - You can of course just mark the mail you don't need - anymore by saying @samp{#} with point - over the mail and then say @samp{B DEL} - to get rid of them forever. You could also instead of - actually deleting them, send them to a junk-group by - saying @samp{B m nnml:trash-bin} which - you clear from time to time, but both are not the intended - way in Gnus. - - - In Gnus, we let mail expire like news expires on a news - server. That means you tell Gnus the message is - expirable (you tell Gnus "I don't need this mail - anymore") by saying @samp{E} with point - over the mail in summary buffer. Now when you leave the - group, Gnus looks at all messages which you marked as - expirable before and if they are old enough (default is - older than a week) they are deleted. - -@ifnottex -@node [6.5], [6.6], [6.4], FAQ 6 - Old messages -@end ifnottex -@subsubheading Question 6.5: - - I want that all read messages are expired (at least in - some groups). How to do it? - - -Answer: - - If you want all read messages to be expired (e.g. in - mailing lists where there's an online archive), you've - got two choices: auto-expire and - total-expire. Auto-expire means, that every article - which has no marks set and is selected for reading is - marked as expirable, Gnus hits @samp{E} - for you every time you read a message. Total-expire - follows a slightly different approach, here all article - where the read mark is set are expirable. - - - To activate auto-expire, include auto-expire in the - Group parameters for the group. (Hit @samp{G - c} in summary buffer with point over the - group to change group parameters). For total-expire add - total-expire to the group-parameters. - - - Which method you choose is merely a matter of taste: - Auto-expire is faster, but it doesn't play together with - Adaptive Scoring, so if you want to use this feature, - you should use total-expire. - - - If you want a message to be excluded from expiration in - a group where total or auto expire is active, set either - tick (hit @samp{u}) or dormant mark (hit - @samp{u}), when you use auto-expire, you - can also set the read mark (hit - @samp{d}). - -@ifnottex -@node [6.6], , [6.5], FAQ 6 - Old messages -@end ifnottex -@subsubheading Question 6.6: - - I don't want expiration to delete my mails but to move them - to another group. - - -Answer: - - Say something like this in ~/.gnus: - +then you only have to set either the tick or the dormant +mark for articles you want to keep, setting the read +mark will remove them from cache. + +@node [6.3] +@subsubheading Question 6.3 + +How to search for a specific message? + +@subsubheading Answer + +There are several ways for this, too. For a posting from +a Usenet group the easiest solution is probably to ask +@uref{http://groups.google.com, groups.google.com}, +if you found the posting there, tell Google to display +the raw message, look for the message-id, and say +@samp{M-^ the@@message.id RET} in a +summary buffer. +Since Gnus 5.10 there's also a Gnus interface for +groups.google.com which you can call with +@samp{G W}) in group buffer. + +Another idea which works for both mail and news groups +is to enter the group where the message you are +searching is and use the standard Emacs search +@samp{C-s}, it's smart enough to look at +articles in collapsed threads, too. If you want to +search bodies, too try @samp{M-s} +instead. Further on there are the +gnus-summary-limit-to-foo functions, which can help you, +too. + +Of course you can also use grep to search through your +local mail, but this is both slow for big archives and +inconvenient since you are not displaying the found mail +in Gnus. Here comes nnir into action. Nnir is a front end +to search engines like swish-e or swish++ and +others. You index your mail with one of those search +engines and with the help of nnir you can search trough +the indexed mail and generate a temporary group with all +messages which met your search criteria. If this sound +cool to you get nnir.el from +@uref{ftp://ls6-ftp.cs.uni-dortmund.de/pub/src/emacs/} +or @uref{ftp://ftp.is.informatik.uni-duisburg.de/pub/src/emacs/}. +Instructions on how to use it are at the top of the file. + +@node [6.4] +@subsubheading Question 6.4 + +How to get rid of old unwanted mail? + +@subsubheading Answer + +You can of course just mark the mail you don't need +anymore by saying @samp{#} with point +over the mail and then say @samp{B DEL} +to get rid of them forever. You could also instead of +actually deleting them, send them to a junk-group by +saying @samp{B m nnml:trash-bin} which +you clear from time to time, but both are not the intended +way in Gnus. + +In Gnus, we let mail expire like news expires on a news +server. That means you tell Gnus the message is +expirable (you tell Gnus "I don't need this mail +anymore") by saying @samp{E} with point +over the mail in summary buffer. Now when you leave the +group, Gnus looks at all messages which you marked as +expirable before and if they are old enough (default is +older than a week) they are deleted. + +@node [6.5] +@subsubheading Question 6.5 + +I want that all read messages are expired (at least in +some groups). How to do it? + +@subsubheading Answer + +If you want all read messages to be expired (e.g. in +mailing lists where there's an online archive), you've +got two choices: auto-expire and +total-expire. Auto-expire means, that every article +which has no marks set and is selected for reading is +marked as expirable, Gnus hits @samp{E} +for you every time you read a message. Total-expire +follows a slightly different approach, here all article +where the read mark is set are expirable. + +To activate auto-expire, include auto-expire in the +Group parameters for the group. (Hit @samp{G +c} in summary buffer with point over the +group to change group parameters). For total-expire add +total-expire to the group-parameters. + +Which method you choose is merely a matter of taste: +Auto-expire is faster, but it doesn't play together with +Adaptive Scoring, so if you want to use this feature, +you should use total-expire. + +If you want a message to be excluded from expiration in +a group where total or auto expire is active, set either +tick (hit @samp{u}) or dormant mark (hit +@samp{u}), when you use auto-expire, you +can also set the read mark (hit +@samp{d}). + +@node [6.6] +@subsubheading Question 6.6 + +I don't want expiration to delete my mails but to move them +to another group. + +@subsubheading Answer + +Say something like this in ~/.gnus.el: @example (setq nnmail-expiry-target "nnml:expired") @end example - @noindent - (If you want to change the value of nnmail-expiry-target - on a per group basis see the question "How can I disable - threading in some (e.g. mail-) groups, or set other - variables specific for some groups?") - -@ifnottex -@node FAQ 7 - Gnus in a dial-up environment, FAQ 8 - Getting help, FAQ 6 - Old messages, Frequently Asked Questions -@end ifnottex +(If you want to change the value of nnmail-expiry-target +on a per group basis see the question "How can I disable +threading in some (e.g. mail-) groups, or set other +variables specific for some groups?") + +@node FAQ 7 - Gnus in a dial-up environment @subsection Gnus in a dial-up environment @menu -* [7.1]:: I don't have a permanent connection to the net, how can I - minimize the time I've got to be connected? -* [7.2]:: So what was this thing about the Agent? -* [7.3]:: I want to store article bodies on disk, too. How to do it? -* [7.4]:: How to tell Gnus not to try to send mails / postings while - I'm offline? +* [7.1]:: I don't have a permanent connection to the net, how can I + minimize the time I've got to be connected? +* [7.2]:: So what was this thing about the Agent? +* [7.3]:: I want to store article bodies on disk, too. How to do it? +* [7.4]:: How to tell Gnus not to try to send mails / postings while + I'm offline? @end menu - -@ifnottex -@node [7.1], [7.2], FAQ 7 - Gnus in a dial-up environment, FAQ 7 - Gnus in a dial-up environment -@end ifnottex -@subsubheading Question 7.1: - - I don't have a permanent connection to the net, how can - I minimize the time I've got to be connected? - - -Answer: - - You've got basically two options: Either you use the - Gnus Agent (see below) for this, or you can install - programs which fetch your news and mail to your local - disk and Gnus reads the stuff from your local - machine. - - - If you want to follow the second approach, you need a - program which fetches news and offers them to Gnus, a - program which does the same for mail and a program which - receives the mail you write from Gnus and sends them - when you're online. - - -Let's talk about Unix systems first: For the news part, the easiest -solution is a small nntp server like -@uref{http://www.leafnode.org/,Leafnode} or -@uref{http://infa.abo.fi/~patrik/sn/,sn}, of course you can also -install a full featured news server like -@uref{http://www.isc.org/products/INN/,inn}. - -Then you want to fetch your Mail, popular choices are -@itemize @bullet -@item -@uref{http://www.catb.org/~esr/fetchmail/,fetchmail} and -@item -@uref{http://www.qcc.ca/~charlesc/software/getmail-3.0/,getmail}. -@end itemize -You should tell those to write the mail to your disk and Gnus to read -it from there. Last but not least the mail sending part: This can be -done with every MTA like @uref{http://www.sendmail.org/,sendmail}, -@uref{http://www.qmail.org/,postfix}, @uref{http://www.exim.org/,exim} -or @uref{http://www.qmail.org/,qmail}. - - - On windows boxes I'd vote for - @uref{http://www.tglsoft.de/,Hamster}, - it's a small freeware, open-source program which fetches - your mail and news from remote servers and offers them - to Gnus (or any other mail and/or news reader) via nntp - respectively POP3 or IMAP. It also includes a smtp - server for receiving mails from Gnus. - -@ifnottex -@node [7.2], [7.3], [7.1], FAQ 7 - Gnus in a dial-up environment -@end ifnottex -@subsubheading Question 7.2: - - So what was this thing about the Agent? - - -Answer: - - The Gnus agent is part of Gnus, it allows you to fetch - mail and news and store them on disk for reading them - later when you're offline. It kind of mimics offline - newsreaders like e.g. Forte Agent. If you want to use - the Agent place the following in ~/.gnus if you are - still using 5.8.8 or 5.9 (it's the default since 5.10): - +@node [7.1] +@subsubheading Question 7.1 + +I don't have a permanent connection to the net, how can +I minimize the time I've got to be connected? + +@subsubheading Answer + +You've got basically two options: Either you use the +Gnus Agent (see below) for this, or you can install +programs which fetch your news and mail to your local +disk and Gnus reads the stuff from your local +machine. + +If you want to follow the second approach, you need a +program which fetches news and offers them to Gnus, a +program which does the same for mail and a program which +receives the mail you write from Gnus and sends them +when you're online. + +Let's talk about Unix systems first: For the news part, +the easiest solution is a small nntp server like +@uref{http://www.leafnode.org/, Leafnode} or +@uref{http://infa.abo.fi/~patrik/sn/, sn}, +of course you can also install a full featured news +server like +@uref{http://www.isc.org/products/INN/, inn}. +Then you want to fetch your Mail, popular choices +are @uref{http://www.catb.org/~esr/fetchmail/, fetchmail} +and @uref{http://www.qcc.ca/~charlesc/software/getmail-3.0/, getmail}. +You should tell those to write the mail to your disk and +Gnus to read it from there. Last but not least the mail +sending part: This can be done with every MTA like +@uref{http://www.sendmail.org/, sendmail}, +@uref{http://www.qmail.org/, postfix}, +@uref{http://www.exim.org/, exim} or +@uref{http://www.qmail.org/, qmail}. + +On windows boxes I'd vote for +@uref{http://www.tglsoft.de/, Hamster}, +it's a small freeware, open-source program which fetches +your mail and news from remote servers and offers them +to Gnus (or any other mail and/or news reader) via nntp +respectively POP3 or IMAP. It also includes a smtp +server for receiving mails from Gnus. + +@node [7.2] +@subsubheading Question 7.2 + +So what was this thing about the Agent? + +@subsubheading Answer + +The Gnus agent is part of Gnus, it allows you to fetch +mail and news and store them on disk for reading them +later when you're offline. It kind of mimics offline +newsreaders like e.g. Forte Agent. If you want to use +the Agent place the following in ~/.gnus.el if you are +still using 5.8.8 or 5.9 (it's the default since 5.10): @example (setq gnus-agent t) @end example - +@noindent - Now you've got to select the servers whose groups can be - stored locally. To do this, open the server buffer - (that is press @samp{^} while in the - group buffer). Now select a server by moving point to - the line naming that server. Finally, agentize the - server by typing @samp{J a}. If you - make a mistake, or change your mind, you can undo this - action by typing @samp{J r}. When - you're done, type 'q' to return to the group buffer. - Now the next time you enter a group on a agentized - server, the headers will be stored on disk and read from - there the next time you enter the group. - -@ifnottex -@node [7.3], [7.4], [7.2], FAQ 7 - Gnus in a dial-up environment -@end ifnottex -@subsubheading Question 7.3: +Now you've got to select the servers whose groups can be +stored locally. To do this, open the server buffer +(that is press @samp{^} while in the +group buffer). Now select a server by moving point to +the line naming that server. Finally, agentize the +server by typing @samp{J a}. If you +make a mistake, or change your mind, you can undo this +action by typing @samp{J r}. When +you're done, type 'q' to return to the group buffer. +Now the next time you enter a group on a agentized +server, the headers will be stored on disk and read from +there the next time you enter the group. + +@node [7.3] +@subsubheading Question 7.3 + +I want to store article bodies on disk, too. How to do it? + +@subsubheading Answer + +You can tell the agent to automatically fetch the bodies +of articles which fulfill certain predicates, this is +done in a special buffer which can be reached by +saying @samp{J c} in group +buffer. Please refer to the documentation for +information which predicates are possible and how +exactly to do it. + +Further on you can tell the agent manually which +articles to store on disk. There are two ways to do +this: Number one: In the summary buffer, process mark a +set of articles that shall be stored in the agent by +saying @samp{#} with point over the +article and then type @samp{J s}. The +other possibility is to set, again in the summary +buffer, downloadable (%) marks for the articles you +want by typing @samp{@@} with point over +the article and then typing @samp{J u}. +What's the difference? Well, process marks are erased as +soon as you exit the summary buffer while downloadable +marks are permanent. You can actually set downloadable +marks in several groups then use fetch session ('J s' in +the GROUP buffer) to fetch all of those articles. The +only downside is that fetch session also fetches all of +the headers for every selected group on an agentized +server. Depending on the volume of headers, the initial +fetch session could take hours. + +@node [7.4] +@subsubheading Question 7.4 + +How to tell Gnus not to try to send mails / postings +while I'm offline? + +@subsubheading Answer + +All you've got to do is to tell Gnus when you are online +(plugged) and when you are offline (unplugged), the rest +works automatically. You can toggle plugged/unplugged +state by saying @samp{J j} in group +buffer. To start Gnus unplugged say @samp{M-x +gnus-unplugged} instead of +@samp{M-x gnus}. Note that for this to +work, the agent must be active. + +@node FAQ 8 - Getting help +@subsection Getting help - I want to store article bodies on disk, too. How to do it? - +@menu +* [8.1]:: How to find information and help inside Emacs? +* [8.2]:: I can't find anything in the Gnus manual about X (e.g. + attachments, PGP, MIME...), is it not documented? +* [8.3]:: Which websites should I know? +* [8.4]:: Which mailing lists and newsgroups are there? +* [8.5]:: Where to report bugs? +* [8.6]:: I need real-time help, where to find it? +@end menu -Answer: +@node [8.1] +@subsubheading Question 8.1 - You can tell the agent to automatically fetch the bodies - of articles which fulfill certain predicates, this is - done in a special buffer which can be reached by - saying @samp{J c} in group - buffer. Please refer to the documentation for - information which predicates are possible and how - exactly to do it. - +How to find information and help inside Emacs? - Further on you can tell the agent manually which - articles to store on disk. There are two ways to do - this: Number one: In the summary buffer, process mark a - set of articles that shall be stored in the agent by - saying @samp{#} with point over the - article and then type @samp{J s}. The - other possibility is to set, again in the summary - buffer, downloadable (%) marks for the articles you - want by typing @samp{@@} with point over - the article and then typing @samp{J u}. - What's the difference? Well, process marks are erased as - soon as you exit the summary buffer while downloadable - marks are permanent. You can actually set downloadable - marks in several groups then use fetch session ('J s' in - the GROUP buffer) to fetch all of those articles. The - only downside is that fetch session also fetches all of - the headers for every selected group on an agentized - server. Depending on the volume of headers, the initial - fetch session could take hours. - -@ifnottex -@node [7.4], , [7.3], FAQ 7 - Gnus in a dial-up environment -@end ifnottex -@subsubheading Question 7.4: +@subsubheading Answer - How to tell Gnus not to try to send mails / postings - while I'm offline? - +The first stop should be the Gnus manual (Say +@samp{C-h i d m Gnus RET} to start the +Gnus manual, then walk through the menus or do a +full-text search with @samp{s}). Then +there are the general Emacs help commands starting with +C-h, type @samp{C-h ? ?} to get a list +of all available help commands and their meaning. Finally +@samp{M-x apropos-command} lets you +search through all available functions and @samp{M-x +apropos} searches the bound variables. -Answer: +@node [8.2] +@subsubheading Question 8.2 - All you've got to do is to tell Gnus when you are online - (plugged) and when you are offline (unplugged), the rest - works automatically. You can toggle plugged/unplugged - state by saying @samp{J j} in group - buffer. To start Gnus unplugged say @samp{M-x - gnus-unplugged} instead of - @samp{M-x gnus}. Note that for this to - work, the agent must be active. - +I can't find anything in the Gnus manual about X +(e.g. attachments, PGP, MIME...), is it not documented? -@ifnottex -@node FAQ 8 - Getting help, FAQ 9 - Tuning Gnus, FAQ 7 - Gnus in a dial-up environment, Frequently Asked Questions -@end ifnottex -@subsection Getting help +@subsubheading Answer -@menu -* [8.1]:: How to find information and help inside Emacs? -* [8.2]:: I can't find anything in the Gnus manual about X - (e.g. attachments, PGP, MIME...), is it not documented? -* [8.3]:: Which websites should I know? -* [8.4]:: Which mailing lists and newsgroups are there? -* [8.5]:: Where to report bugs? -* [8.6]:: I need real-time help, where to find it? -@end menu +There's not only the Gnus manual but also the manuals +for message, emacs-mime, sieve and pgg. Those packages +are distributed with Gnus and used by Gnus but aren't +really part of core Gnus, so they are documented in +different info files, you should have a look in those +manuals, too. -@ifnottex -@node [8.1], [8.2], FAQ 8 - Getting help, FAQ 8 - Getting help -@end ifnottex -@subsubheading Question 8.1: +@node [8.3] +@subsubheading Question 8.3 - How to find information and help inside Emacs? - +Which websites should I know? -Answer: - - The first stop should be the Gnus manual (Say - @samp{C-h i d m Gnus RET} to start the - Gnus manual, then walk through the menus or do a - full-text search with @samp{s}). Then - there are the general Emacs help commands starting with - C-h, type @samp{C-h ? ?} to get a list - of all available help commands and their meaning. Finally - @samp{M-x apropos-command} lets you - search through all available functions and @samp{M-x - apropos} searches the bound variables. - -@ifnottex -@node [8.2], [8.3], [8.1], FAQ 8 - Getting help -@end ifnottex -@subsubheading Question 8.2: +@subsubheading Answer - I can't find anything in the Gnus manual about X - (e.g. attachments, PGP, MIME...), is it not documented? - +The two most important ones are the +@uref{http://www.gnus.org, official Gnus website}. +and it's sister site +@uref{http://my.gnus.org, my.gnus.org (MGO)}, +hosting an archive of lisp snippets, howtos, a (not +really finished) tutorial and this FAQ. -Answer: +Tell me about other sites which are interesting. - There's not only the Gnus manual but also the manuals - for message, emacs-mime, sieve and pgg. Those packages - are distributed with Gnus and used by Gnus but aren't - really part of core Gnus, so they are documented in - different info files, you should have a look in those - manuals, too. - -@ifnottex -@node [8.3], [8.4], [8.2], FAQ 8 - Getting help -@end ifnottex -@subsubheading Question 8.3: +@node [8.4] +@subsubheading Question 8.4 - Which websites should I know? - +Which mailing lists and newsgroups are there? -Answer: +@subsubheading Answer - The two most important ones are the - @uref{http://www.gnus.org,official Gnus website}. - and it's sister site - @uref{http://my.gnus.org,my.gnus.org (MGO)}, - hosting an archive of lisp snippets, howtos, a (not - really finished) tutorial and this FAQ. - +There's the newsgroup gnu.emacs.gnus (pull it from +e.g. news.gnus.org) which deals with general questions and the +ding mailing list (ding@@gnus.org) dealing with development of +Gnus. You can read the ding list via NNTP, too under the name +gmane.emacs.gnus.general from news.gmane.org. - Tell me about other sites which are interesting. - -@ifnottex -@node [8.4], [8.5], [8.3], FAQ 8 - Getting help -@end ifnottex -@subsubheading Question 8.4: +If you want to stay in the big8, +news.software.newssreaders is also read by some Gnus +users (but chances for qualified help are much better in +the above groups) and if you speak German, there's +de.comm.software.gnus. - Which mailing lists and newsgroups are there? - +@node [8.5] +@subsubheading Question 8.5 -Answer: +Where to report bugs? - There's the newsgroup gnu.emacs.gnus (pull it from - e.g. news.gnus.org) which deals with general questions - and the ding mailing list (ding@@gnus.org) dealing with - development of Gnus. You can read the ding list via - NNTP, too under the name gnus.ding from news.gnus.org. - +@subsubheading Answer - If you want to stay in the big8, - news.software.newssreaders is also read by some Gnus - users (but chances for qualified help are much better in - the above groups) and if you speak German, there's - de.comm.software.gnus. - -@ifnottex -@node [8.5], [8.6], [8.4], FAQ 8 - Getting help -@end ifnottex -@subsubheading Question 8.5: +Say @samp{M-x gnus-bug}, this will start +a message to the +@email{bugs@@gnus.org, gnus bug mailing list} +including information about your environment which make +it easier to help you. - Where to report bugs? - +@node [8.6] +@subsubheading Question 8.6 -Answer: +I need real-time help, where to find it? -Say @samp{M-x gnus-bug}, this will start a message to the -@email{bugs@@gnus.org,gnus bug mailing list} including information -about your environment which make it easier to help you. - -@ifnottex -@node [8.6], , [8.5], FAQ 8 - Getting help -@end ifnottex -@subsubheading Question 8.6: +@subsubheading Answer - I need real-time help, where to find it? - - -Answer: - - Point your IRC client to irc.my.gnus.org channel - #mygnus. Don't be afraid if people there speak German, - they are willing and capable of switching to - English when people from outside Germany enter. - +Point your IRC client to irc.my.gnus.org channel +#mygnus. Don't be afraid if people there speak German, +they are willing and capable of switching to +English when people from outside Germany enter. -@ifnottex -@node FAQ 9 - Tuning Gnus, FAQ - Glossary, FAQ 8 - Getting help, Frequently Asked Questions -@end ifnottex +@node FAQ 9 - Tuning Gnus @subsection Tuning Gnus @menu -* [9.1]:: Starting Gnus is really slow, how to speed it up? -* [9.2]:: How to speed up the process of entering a group? -* [9.3]:: Sending mail becomes slower and slower, what's up? +* [9.1]:: Starting Gnus is really slow, how to speed it up? +* [9.2]:: How to speed up the process of entering a group? +* [9.3]:: Sending mail becomes slower and slower, what's up? @end menu -@ifnottex -@node [9.1], [9.2], FAQ 9 - Tuning Gnus, FAQ 9 - Tuning Gnus -@end ifnottex -@subsubheading Question 9.1: +@node [9.1] +@subsubheading Question 9.1 - Starting Gnus is really slow, how to speed it up? - +Starting Gnus is really slow, how to speed it up? -Answer: - - The reason for this could be the way Gnus reads it's - active file, see the node "The Active File" in the Gnus - manual for things you might try to speed the process up. - An other idea would be to byte compile your ~/.gnus (say - @samp{M-x byte-compile-file RET ~/.gnus - RET} to do it). Finally, if you have require - statements in your .gnus, you could replace them with - eval-after-load, which loads the stuff not at startup - time, but when it's needed. Say you've got this in your - ~/.gnus: - +@subsubheading Answer + +The reason for this could be the way Gnus reads it's +active file, see the node "The Active File" in the Gnus +manual for things you might try to speed the process up. +An other idea would be to byte compile your ~/.gnus.el (say +@samp{M-x byte-compile-file RET ~/.gnus.el +RET} to do it). Finally, if you have require +statements in your .gnus, you could replace them with +eval-after-load, which loads the stuff not at startup +time, but when it's needed. Say you've got this in your +~/.gnus.el: @example (require 'message) (add-to-list 'message-syntax-checks '(sender . disabled)) @end example - @noindent - then as soon as you start Gnus, message.el is loaded. If - you replace it with - + +then as soon as you start Gnus, message.el is loaded. If +you replace it with @example (eval-after-load "message" '(add-to-list 'message-syntax-checks '(sender . disabled))) @end example - @noindent - it's loaded when it's needed. - -@ifnottex -@node [9.2], [9.3], [9.1], FAQ 9 - Tuning Gnus -@end ifnottex -@subsubheading Question 9.2: - How to speed up the process of entering a group? - +it's loaded when it's needed. -Answer: +@node [9.2] +@subsubheading Question 9.2 - A speed killer is setting the variable - gnus-fetch-old-headers to anything different from nil, - so don't do this if speed is an issue. To speed up - building of summary say - +How to speed up the process of entering a group? + +@subsubheading Answer + +A speed killer is setting the variable +gnus-fetch-old-headers to anything different from nil, +so don't do this if speed is an issue. To speed up +building of summary say @example (gnus-compile) @end example - @noindent - at the bottom of your ~/.gnus, this will make gnus - byte-compile things like - gnus-summary-line-format. - then you could increase the value of gc-cons-threshold - by saying something like - + +at the bottom of your ~/.gnus.el, this will make gnus +byte-compile things like +gnus-summary-line-format. +then you could increase the value of gc-cons-threshold +by saying something like @example (setq gc-cons-threshold 3500000) @end example - @noindent - in ~/.emacs. If you don't care about width of CJK - characters or use Gnus 5.10 or younger together with a - recent GNU Emacs, you should say - + +in ~/.emacs. If you don't care about width of CJK +characters or use Gnus 5.10 or younger together with a +recent GNU Emacs, you should say @example -(setq gnus-use-correct-string-widths nil) +(setq gnus-use-correct-string-widths nil) @end example - - @noindent - in ~/.gnus (thanks to Jesper harder for the last - two suggestions). Finally if you are still using 5.8.8 - or 5.9 and experience speed problems with summary - buffer generation, you definitely should update to - 5.10 since there quite some work on improving it has - been done. -@ifnottex -@node [9.3], , [9.2], FAQ 9 - Tuning Gnus -@end ifnottex -@subsubheading Question 9.3: +in ~/.gnus.el (thanks to Jesper harder for the last +two suggestions). Finally if you are still using 5.8.8 +or 5.9 and experience speed problems with summary +buffer generation, you definitely should update to +5.10 since there quite some work on improving it has +been done. - Sending mail becomes slower and slower, what's up? - +@node [9.3] +@subsubheading Question 9.3 -Answer: +Sending mail becomes slower and slower, what's up? - The reason could be that you told Gnus to archive the - messages you wrote by setting - gnus-message-archive-group. Try to use a nnml group - instead of an archive group, this should bring you back - to normal speed. - +@subsubheading Answer -@ifnottex -@node FAQ - Glossary, , FAQ 9 - Tuning Gnus, Frequently Asked Questions -@end ifnottex +The reason could be that you told Gnus to archive the +messages you wrote by setting +gnus-message-archive-group. Try to use a nnml group +instead of an archive group, this should bring you back +to normal speed. + +@node FAQ - Glossary @subsection Glossary @table @dfn -@item ~/.gnus - When the term ~/.gnus is used it just means your Gnus - configuration file. You might as well call it ~/.gnus.el or - specify another name. - +@item ~/.gnus.el +When the term ~/.gnus.el is used it just means your Gnus +configuration file. You might as well call it ~/.gnus or +specify another name. @item Back End - In Gnus terminology a back end is a virtual server, a layer - between core Gnus and the real NNTP-, POP3-, IMAP- or - whatever-server which offers Gnus a standardized interface - to functions like "get message", "get Headers" etc. - +In Gnus terminology a back end is a virtual server, a layer +between core Gnus and the real NNTP-, POP3-, IMAP- or +whatever-server which offers Gnus a standardized interface +to functions like "get message", "get Headers" etc. @item Emacs - When the term Emacs is used in this FAQ, it means either GNU - Emacs or XEmacs. - +When the term Emacs is used in this FAQ, it means either GNU +Emacs or XEmacs. @item Message - In this FAQ message means a either a mail or a posting to a - Usenet Newsgroup or to some other fancy back end, no matter - of which kind it is. - +In this FAQ message means a either a mail or a posting to a +Usenet Newsgroup or to some other fancy back end, no matter +of which kind it is. @item MUA - MUA is an acronym for Mail User Agent, it's the program you - use to read and write e-mails. - +MUA is an acronym for Mail User Agent, it's the program you +use to read and write e-mails. @item NUA - NUA is an acronym for News User Agent, it's the program you - use to read and write Usenet news. - -@end table +NUA is an acronym for News User Agent, it's the program you +use to read and write Usenet news. -@c @bye +@end table @ignore - arch-tag: 64dc5692-edb4-4848-a965-7aa0181acbb8 +arch-tag: 64dc5692-edb4-4848-a965-7aa0181acbb8 @end ignore diff --git a/man/message.texi b/man/message.texi index 5e488b0e7cf..8a10ea2445d 100644 --- a/man/message.texi +++ b/man/message.texi @@ -8,7 +8,7 @@ @copying This file documents Message, the Emacs message composition mode. -Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 +Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. @quotation |