*** empty log message ***
authorLars Magne Ingebrigtsen <larsi@gnus.org>
Tue, 4 Mar 1997 08:51:53 +0000 (08:51 +0000)
committerLars Magne Ingebrigtsen <larsi@gnus.org>
Tue, 4 Mar 1997 08:51:53 +0000 (08:51 +0000)
12 files changed:
lisp/ChangeLog
lisp/gnus-ems.el
lisp/gnus-gl.el
lisp/gnus-setup.el
lisp/gnus-xmas.el
lisp/gnus.el
lisp/message.el
lisp/nndoc.el
lisp/nnml.el
lisp/nnvirtual.el
texi/ChangeLog
texi/gnus.texi

index 882829e..441edd6 100644 (file)
@@ -1,5 +1,50 @@
+Tue Apr  9 00:15:43 1996  Brad Miller  <bmiller@cs.umn.edu>
+
+       * gnus-gl.el: New version.
+
+Mon Apr  8 23:55:19 1996  Lars Magne Ingebrigtsen  <larsi@aegir.ifi.uio.no>
+
+       * nnvirtual.el (nnvirtual-create-mapping): Would include `(0 . 0)'
+       groups.
+
+Tue Apr  9 01:40:56 1996  Lars Magne Ingebrigtsen  <larsi@aegir.ifi.uio.no>
+
+       * gnus.el (gnus-article-goto-next-page): Would bug out under
+       XEmacs. 
+       (gnus-get-unread-articles): Wouldn't update virtual groups.
+
+       * gnus-ems.el ('gnus-character-to-event): New alias.
+       * gnus-xmas.el (gnus-xmas-redefine): Redefine.
+
+Mon Apr  8 21:55:15 1996  Lars Magne Ingebrigtsen  <larsi@aegir.ifi.uio.no>
+
+       * message.el (message-user-mail-address): New function.
+       (message-make-address): Use it.
+
+Mon Apr  8 19:18:14 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * message.el (message-make-fqdm): mail-host-address may be
+       unbound. 
+
+       * nndoc.el (nndoc-type-alist): Unquote dashes in forwards.
+
+Mon Apr  8 19:14:05 1996  ISO-2022-JP  <morioka@jaist.ac.jp>
+
+       * gnus-ems.el (gnus-mule-max-width-function): Use
+       `truncate-string'. 
+
+Sat Apr  6 15:03:39 1996  Steven L. Baur  <steve@miranova.com>
+
+       * gnus-setup.el (gnus-use-sc): Arrange for autoload of supercite
+       if necessary.
+
+       * nnml.el (nnml-server-variables): Obey user preferences for
+       nnml-prepare-save-mail-hook.
+
 Sun Apr  7 20:14:50 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
 
+       * gnus.el: September Gnus v0.67 is released.
+
        * gnus.el (gnus-group-get-new-news-this-group): Would update
        groups twice.
 
index 1508375..8f234a3 100644 (file)
@@ -41,6 +41,7 @@
 (defalias 'gnus-appt-select-lowest-window 'appt-select-lowest-window)
 (defalias 'gnus-mail-strip-quoted-names 'mail-strip-quoted-names)
 (defalias 'gnus-make-local-hook 'make-local-hook)
+(defalias 'gnus-character-to-event 'identity)
 
 (eval-and-compile 
   (autoload 'gnus-xmas-define "gnus-xmas")
 
 ;;; Mule functions.
 
-(defun gnus-mule-truncate-string (str width)
-  (let ((w (string-width str))
-       (col 0) (idx 0) (p-idx 0) chr)
-    (if (<= w width)
-       str
-      (while (< col width)
-       (setq chr (aref str idx)
-             col (+ col (char-width chr))
-             p-idx idx
-             idx (+ idx (char-bytes chr))
-             ))
-      (substring str 0 (if (= col width)
-                          idx
-                        p-idx)))))
-
 (defun gnus-mule-cite-add-face (number prefix face)
   ;; At line NUMBER, ignore PREFIX and add FACE to the rest of the line.
   (if face
@@ -89,7 +75,7 @@
            (valstr (if (numberp val)
                        (int-to-string val) val)))
        (if (> (length valstr) (, max-width))
-          (gnus-truncate-string valstr (, max-width))
+          (truncate-string valstr (, max-width))
         valstr))))
 
 (eval-and-compile
@@ -205,9 +191,7 @@ pounce directly on the real variables themselves."))
 
    ((boundp 'MULE)
     ;; Mule definitions
-    (defalias 'gnus-truncate-string
-      (if (fboundp 'truncate-string)
-         'truncate-string 'gnus-mule-truncate-string))
+    (defalias 'gnus-truncate-string 'truncate-string)
 
     (fset 'gnus-summary-make-display-table (lambda () nil))
     (fset 'gnus-cite-add-face 'gnus-mule-cite-add-face)
@@ -229,7 +213,7 @@ pounce directly on the real variables themselves."))
          (format "%4d: %-20s" 
                  gnus-tmp-lines 
                  (if (> (length gnus-tmp-name) 20) 
-                     (gnus-truncate-string gnus-tmp-name 20) 
+                     (truncate-string gnus-tmp-name 20) 
                    gnus-tmp-name))
          gnus-tmp-closing-bracket)
         (point))
index 9be5a3b..a101698 100644 (file)
 ;; As of version 2.5, grouplens now works as a minor mode of 
 ;; gnus-summary-mode.  To get make that work you just need a couple of
 ;; hooks.
-;; In addition, there are a few gnus-*-hooks that need to be set:
-;; (add-hook 'gnus-startup-hook 'bbb-login)
-;; (add-hook 'gnus-summary-mode-hook 'gnus-grouplens-mode)
-;;
-;; If you want to see grouplens scores using our format you might want to
-;; add a %uG to the gnus-summary-line-format.  For example, I use:
-;; (setq gnus-summary-line-format "%U%R%uG%I%(%[%4L: %-20,20uB%]%) %s\n")
-;; The above format also assumes that you are using gnus-bbdb  You can
-;; just as easily ad %uG to whatever format string you use.  Or add
-;; a %i to just see a simple numeric version of the predictions that
-;; uses less space on the summary line.  If you use %uG you have several
-;; choices for how things look.  See the doc string for the
-;; grouplens-prediction-display variable.
-;; (setq grouplens-prediction-display 'prediction-bar)
-;;
-;; If you use %uI on your group-line-format you will get (GroupLens Enhanced)
-;; after the names of newsgroups supported by GroupLens.
-;; (setq gnus-group-line-format "%M%S%p%5y: %(%g%) %uI\n")
+;; (setq gnus-use-grouplens t)
+;; (setq grouplens-pseudonym "")
+;; (setq grouplens-bbb-host "grouplens.cs.umn.edu")
 ;;
 ;; (setq gnus-summary-default-score 0)
 ;;
-;; In addition there are some GroupLens user variables to set
-;; (setq grouplens-pseudonym "foobar")
-;; If you are using a bbb other than twain.cs.umn.edu you will need to
-;; set the grouplens-bbb-host variable, and possibly the
-;; grouplens-bbb-port variable. 
-;;
-;;(setq grouplens-newsgroups '("comp.lang.c++" "rec.humor" "rec.food.recipes"))
-;; This sets up the groups for which you will get predictions and ratings.
-;;
 ;;                              USING GROUPLENS
 ;; How do I Rate an article??
 ;;   Before you type n to go to the next article, hit a number from 1-5
@@ -776,7 +752,7 @@ recommend using both scores and grouplens predictions together."
 ;;          BUG REPORTING
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-(defconst gnus-gl-version "gnus-gl.el 2.10")
+(defconst gnus-gl-version "gnus-gl.el 2.11")
 (defconst gnus-gl-maintainer-address "grouplens-bug@cs.umn.edu")
 (defun gnus-gl-submit-bug-report ()
   "Submit via mail a bug report on gnus-gl"
@@ -860,7 +836,7 @@ recommend using both scores and grouplens predictions together."
                   '(lambda() 
                      (bbb-build-mid-scores-alist gnus-newsgroup-name))))
       (make-local-variable 'gnus-summary-line-format)
-      (if gnus-grouplens-override-scoring
+      (if (null gnus-grouplens-override-scoring)
        
          (setq gnus-summary-line-format gnus-summary-grouplens-lab-line-format))
       (make-local-variable 'gnus-summary-line-format-spec)
index 4156f62..2478624 100644 (file)
 (if gnus-use-sc
     (progn
       (add-hook 'mail-citation-hook 'sc-cite-original)
-      (setq message-cite-function 'sc-cite-original)))
+      (setq message-cite-function 'sc-cite-original)
+      (autoload 'sc-cite-original "supercite")))
 \f
 ;;;### (autoloads (gnus-batch-score gnus-fetch-group gnus gnus-slave gnus-no-server gnus-update-format) "gnus" "lisp/gnus.el" (12473 2137))
 ;;; Generated autoloads from lisp/gnus.el
index 733bdd9..f5a4b29 100644 (file)
@@ -424,6 +424,7 @@ pounce directly on the real variables themselves.")
        'gnus-xmas-appt-select-lowest-window)
   (fset 'gnus-mail-strip-quoted-names 'gnus-xmas-mail-strip-quoted-names)
   (fset 'gnus-make-local-hook 'make-local-variable)
+  (fset 'gnus-character-to-event 'character-to-event)
 
   (add-hook 'gnus-group-mode-hook 'gnus-xmas-group-menu-add)
   (add-hook 'gnus-summary-mode-hook 'gnus-xmas-summary-menu-add)
index 760d9a3..fe4a74c 100644 (file)
@@ -1695,7 +1695,7 @@ variable (string, integer, character, etc).")
   "gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls + Boys)"
   "The mail address of the Gnus maintainers.")
 
-(defconst gnus-version "September Gnus v0.67"
+(defconst gnus-version "September Gnus v0.68"
   "Version number for this version of Gnus.")
 
 (defvar gnus-info-nodes
@@ -14283,12 +14283,12 @@ If given a numerical ARG, move forward ARG pages."
   "Show the next page of the article."
   (interactive)
   (when (gnus-article-next-page)
-    (gnus-article-read-summary-keys nil ?n)))
+    (gnus-article-read-summary-keys nil (gnus-character-to-event ?n))))
 
 (defun gnus-article-goto-prev-page ()
   "Show the next page of the article."
   (interactive)
-  (if (bobp) (gnus-article-read-summary-keys nil ?n)
+  (if (bobp) (gnus-article-read-summary-keys nil (gnus-character-to-event ?n))
     (gnus-article-prev-page nil)))
 
 (defun gnus-article-next-page (&optional lines)
@@ -15610,7 +15610,7 @@ newsgroup."
                   info active
                   (and method
                        (fboundp (intern (concat (symbol-name (car method))
-                                                "-request-scan"))))))
+                                                "-request-update-info"))))))
        ;; The group couldn't be reached, so we nix out the number of
        ;; unread articles and stuff.
        (gnus-set-active group nil)
index 757f28b..d30b3f6 100644 (file)
@@ -62,8 +62,9 @@ If `parens', they look like:
        king@grassland.com (Elvis Parsley)
 If `angles', they look like:
        Elvis Parsley <king@grassland.com>
-Otherwise, most addresses look like `angles', but they look like `parens'
-       if `angles' would need quoting and `parens' would not.")
+
+Otherwise, most addresses look like `angles', but they look like
+`parens' if `angles' would need quoting and `parens' would not.")
 
 ;;;###autoload
 (defvar message-syntax-checks
@@ -1635,9 +1636,16 @@ give as trustworthy answer as possible."
 
 (defun message-make-address ()
   "Make the address of the user."
-  (or user-mail-address
+  (or (message-user-mail-address)
       (concat (user-login-name) "@" (message-make-domain))))
 
+(defun message-user-mail-address ()
+  "Return the pertinent part of `user-mail-address'."
+  (when (string-match
+        "\\(\\`\\|[ \t]\\)\\([^ \t@]+@[^ \t]+\\)\\(\\'\\|[ \t]\\)" 
+        user-mail-address)
+    (match-string 2 user-mail-address)))
+
 (defun message-make-fqdm ()
   "Return user's fully qualified domain name."
   (let ((system-name (system-name)))
@@ -1649,7 +1657,9 @@ give as trustworthy answer as possible."
      ((string-match "@\\([^\\s-]+\\)\\(\\'\\|\\W\\)" user-mail-address)
       (match-string 1 user-mail-address))
      ;; Try `mail-host-address'.
-     (mail-host-address mail-host-address)
+     ((and (boundp 'mail-host-address)
+          mail-host-address)
+      mail-host-address)
      ;; Default to this bogus thing.
      (t
       (concat system-name ".i-have-a-misconfigured-system-so-shoot-me")))))
index 77f8fa5..d2bab2d 100644 (file)
@@ -63,7 +63,8 @@ One of `mbox', `babyl', `digest', `news', `rnews', `mmdf', `forward',
      (head-begin . "^[0-9].*\n"))
     (forward
      (article-begin . "^-+ Start of forwarded message -+\n+")
-     (body-end . "^-+ End of forwarded message -+\n"))
+     (body-end . "^-+ End of forwarded message -+\n")
+     (prepare-body . nndoc-unquote-dashes))
     (clari-briefs
      (article-begin . "^ \\*")
      (body-end . "^\t------*[ \t]^*\n^ \\*")
@@ -77,7 +78,7 @@ One of `mbox', `babyl', `digest', `news', `rnews', `mmdf', `forward',
      (body-end-function . nndoc-digest-body-end)
      (body-begin . "^ ?$")
      (file-end . "^End of")
-     (prepare-body . nndoc-prepare-digest-body))
+     (prepare-body . nndoc-unquote-dashes))
     (mime-digest
      (article-begin . "")
      (head-end . "^ ?$")
@@ -86,7 +87,7 @@ One of `mbox', `babyl', `digest', `news', `rnews', `mmdf', `forward',
     (standard-digest
      (first-article . ,(concat "^" (make-string 70 ?-) "\n\n+"))
      (article-begin . ,(concat "\n\n" (make-string 30 ?-) "\n\n+"))
-     (prepare-body . nndoc-prepare-digest-body)
+     (prepare-body . nndoc-unquote-dashes)
      (body-end-function . nndoc-digest-body-end)
      (head-end . "^ ?$")
      (body-begin . "^ ?\n")
@@ -438,7 +439,7 @@ One of `mbox', `babyl', `digest', `news', `rnews', `mmdf', `forward',
                      (count-lines body-begin body-end))
                nndoc-dissection-alist))))))
 
-(defun nndoc-prepare-digest-body ()
+(defun nndoc-unquote-dashes ()
   "Unquote quoted non-separators in digests."
   (while (re-search-forward "^- -"nil t)
     (replace-match "-" t t)))
index 5bfba0d..e8f0c6e 100644 (file)
@@ -97,7 +97,7 @@ all. This may very well take some time.")
     (nnml-current-directory nil)
     (nnml-generate-active-function ,nnml-generate-active-function)
     (nnml-article-file-alist nil)
-    (nnml-prepare-save-mail-hook nil)
+    (nnml-prepare-save-mail-hook ,nnml-prepare-save-mail-hook)
     (nnml-current-group nil)
     (nnml-inhibit-expiry ,nnml-inhibit-expiry)
     (nnml-status-string "")
index 256d76b..85a0430 100644 (file)
@@ -267,7 +267,7 @@ virtual group.")
        (if (cdadr mr)
            (setq mr (cdr mr))
          (setcdr mr (cddr mr))))
-      
+
       ;; Enter these new marks into the info of the group.
       (if (nthcdr 3 info)
          (setcar (nthcdr 3 info) marks)
@@ -325,6 +325,14 @@ virtual group.")
   (let ((inf t))
     (when (or (not (equal group nnvirtual-current-group))
              check)
+      (setq inf (assoc group nnvirtual-group-alist))
+      (when nnvirtual-current-group
+       ;; Push the old group variables onto the alist.
+       (setq nnvirtual-group-alist
+             (cons (list nnvirtual-current-group
+                         nnvirtual-component-groups
+                         nnvirtual-mapping)
+                   (delq inf nnvirtual-group-alist))))
       (if check
          ;; We nix out the variables.
          (setq nnvirtual-current-group nil
@@ -333,14 +341,6 @@ virtual group.")
                nnvirtual-group-alist
                (delq (assoc group nnvirtual-group-alist)
                      nnvirtual-group-alist))
-       (setq inf (assoc group nnvirtual-group-alist))
-       (when nnvirtual-current-group
-         ;; Push the old group variables onto the alist.
-         (setq nnvirtual-group-alist
-               (cons (list nnvirtual-current-group
-                           nnvirtual-component-groups
-                           nnvirtual-mapping)
-                     (delq inf nnvirtual-group-alist))))
        (setq nnvirtual-current-group nil
              nnvirtual-component-groups nil
              nnvirtual-mapping nil)
@@ -420,7 +420,8 @@ virtual group.")
                'nconc
                (mapcar
                 (lambda (g)
-                  (when (setq active (gnus-activate-group g))
+                  (when (and (setq active (gnus-activate-group g))
+                             (> (cdr active) (car active)))
                     (setq unreads (gnus-list-of-unread-articles g)
                           marks (gnus-uncompress-marks
                                  (gnus-info-marks (gnus-get-info g))))
index a9d6b4d..d9ff48d 100644 (file)
@@ -1,3 +1,11 @@
+Tue Apr  9 00:17:33 1996  Brad Miller  <bmiller@cs.umn.edu>
+
+       * gnus.texi (GroupLens): New section.
+
+Mon Apr  8 22:48:46 1996  Wes Hardaker  <hardaker@ece.ucdavis.edu>
+
+       * gnus.texi (Picons Pictures): New section.
+
 Sat Mar  9 07:00:48 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
 
        * gnus.texi (Fancy Mail Splitting): Addition.
index e7523f0..460d11e 100644 (file)
@@ -10429,6 +10429,8 @@ A hook called in kill-file mode buffers.
 * Buttons::                    Get tendonitis in ten easy steps!
 * Daemons::                    Gnus can do things behind your back.
 * NoCeM::                      How to avoid spam and other fatty foods.
+* Picons Pictures::            How to display pictures of what your reading.
+* GroupLens::                  Getting predictions on what you like to read.
 * Various Various::            Things that are really various.
 @end menu
 
@@ -11192,6 +11194,269 @@ might then see old spam.
 @end table
 
 
+@node Picons Pictures
+@section Picons Pictures
+
+So...  You want to slow down your news reader even more!  This is a
+good way to do so.  Its also a great way to impress people staring
+over your shoulder as you read news.
+
+@menu
+* Picons::                 What are Picons and How do I get them.
+* Picons Requirements::    Don't go further if you aren't using XEmacs.
+* Picons Easy::            Displaying Picons -- the easy way.
+* Picons Hard::            The way you should do it.  You'll learn something.
+* Picons Configuration::   Other variables you can trash/tweak/munge/play with.
+@end menu
+
+
+@node Picons
+@subsection Picons
+
+What are Picons?  To quote directly from the Picons Web site
+(@samp{http://www.cs.indiana.edu/picons/ftp/index.html}):
+
+@quotation 
+@dfn{Picons} is short for ``personal icons''.  They're small,
+constrained images used to represent users and domains on the net,
+organized into databases so that the appropriate image for a given
+e-mail address can be found.  Besides users and domains, there are
+picons databases for Usenet newsgroups and weather forecasts. The picons
+are in either monochrome XBM format or color XPM and GIF formats.
+@end quotation
+
+Please see the above mentioned web site for instructions on obtaining
+and installing the picons databases, or the following ftp site:
+@samp{http://www.cs.indiana.edu/picons/ftp/index.html}.
+
+@vindex gnus-picons-database
+Gnus expects picons to be installed into a location pointed to by
+@code{gnus-picons-database}.
+
+
+@node Picons Requirements
+@subsection Picons Requirements
+
+To use have gnus display Picons for you, you must be running XEmacs
+19.13 or greater since all other versions of Emacs aren't yet able to
+display images.
+
+Additionally, you must have xpm support compiled into XEmacs.  
+
+If you want to display faces from X-Face: headers, you must have the
+netpbm utilities installed, or munge the
+@code{gnus-picons-convert-x-face} variable to use something else.
+
+
+@node Picons Easy 
+@subsection Picons Easy 
+
+To enable the displaying of picons, simply put the followings line in
+your @file{~/.gnus} file and start gnus.
+
+@lisp
+(setq gnus-use-picons t)
+(add-hook 'gnus-article-display-hook 'gnus-article-display-picons t)
+(add-hook 'gnus-summary-prepare-hook 'gnus-group-display-picons t)
+(add-hook 'gnus-article-display-hook 'gnus-picons-article-display-x-face)
+@end lisp
+
+
+@node Picons Hard 
+@subsection Picons Hard 
+
+Gnus can display "Picons" for you as you enter and leave groups
+and articles.  It knows how to interact with three sections of the
+picons database.  Namely, it can display the picons newsgroup
+pictures, author's face picture(s), and the authors domain.  To enable
+this feature, you need to first decide where to display them.
+
+@table @code 
+@item gnus-picons-display-where 
+@vindex gnus-picons-display-where 
+Where the Picons images should be displayed.  It is @code{'picons} by
+default (which by default maps to the buffer "*Picons*").  Other valid
+places could be @code{'article}, @code{'summary}, or @code{"*scratch*"}
+for all I care.  Just make sure that you've made the buffer visible
+using the @xref{Windows Configuration} routines.
+
+@end table
+
+Note: If you set @code{gnus-use-picons} to @code{t}, it will set up your
+windows configuration for you to include the @code{picons} buffer.
+
+Now that you've made that decision, you need to add the following
+functions to the appropriate hooks so these pictures will get
+displayed at the right time.
+
+@table @code
+@item gnus-article-display-picons
+@findex gnus-article-display-picons
+Looks up and display the picons for the author and the author's domain
+in the @code{gnus-picons-display-where} buffer.  Should be added to
+the @code{gnus-article-display-hook}.
+
+@item gnus-group-display-picons
+@findex gnus-article-display-picons
+Displays picons representing the current group.  This function should
+be added to the @code{gnus-summary-prepare-hook} or to the
+@code{gnus-article-display-hook} if @code{gnus-picons-display-where}
+is set to @code{'article}.
+
+@item gnus-picons-article-display-x-face
+@findex gnus-article-display-picons
+Decodes and displays the X-Face header if present.  This function
+should be added to @code{gnus-article-display-hook}.
+
+@end table
+
+Note:  You must append them to the hook, so make sure to specify 't'
+to the append flag of @code{add-hook}:
+
+@lisp
+(add-hook 'gnus-article-display-hook 'gnus-article-display-picons t)
+@end lisp
+
+@node Picons Configuration
+@subsection Picons Configuration
+
+The following variables offer further control over how things are
+done, where things are located, and other useless stuff you really
+don't need to worry about.
+
+@table @code
+@item gnus-picons-database
+@vindex gnus-picons-database
+The location of the picons database.  Should point to a directory
+containing the "news", "domains", "users", etc... subdirectories.
+Defaults to "/usr/local/faces".
+
+@item gnus-picons-news-directory
+@vindex gnus-picons-news-directory
+Sub-directory of the faces database containing the icons for
+newsgroups.
+
+@item gnus-picons-user-directories
+@vindex gnus-picons-user-directories
+List of subdirectories to search in @code{gnus-picons-database} for
+user faces.  Defaults to @code{'("local" "users" "usenix"
+"misc/MISC")}.
+
+@item gnus-picons-domain-directories
+@vindex gnus-picons-domain-directories
+List of subdirectories to search in @code{gnus-picons-database} for
+domain name faces.  Defaults to @code{'("domains")}.  Some people may
+want to add @code{"unknown"} to this list.
+
+@item gnus-picons-convert-x-face
+@vindex gnus-picons-convert-x-face
+The command to use to convert the x-face header to a X bitmap (xbm).
+Defaults to @code{(format "@{ echo '/* Width=48, Height=48 */'; uncompface; @} | icontopbm | pbmtoxbm > %s" gnus-picons-x-face-file-name)}
+
+@item gnus-picons-x-face-file-name
+@vindex gnus-picons-x-face-file-name
+Names a temporary file to store the x-face bitmap in.  Defaults to
+@code{(format "/tmp/picon-xface.%s.xbm" (user-login-name))}.
+
+@item gnus-picons-buffer
+@vindex gnus-picons-buffer
+The name of the buffer that @code{'picons} points to.  Defaults to
+"*Icon Buffer*".
+
+@end table
+
+
+@node GroupLens
+@section GroupLens
+@cindex GroupLens
+GroupLens is a collaborative filtering system that helps you work
+together with other people to find the quality news articles out of the
+huge volume of news articles generated every day.
+
+To accomplish this the GroupLens system combines your opinions about
+articles you have already read with the opinions of others who have
+done likewise and gives you a personalized prediction for each unread
+news article.  Think of GroupLens as a matchmaker.  GroupLens watches
+how you rate articles, and finds other people that rate articles the
+same way. Once it has found for you some people you agree with it tells
+you, in the form of a prediction, what they thought of the article.
+You can use this prediction to help you decide whether or not you want
+to read the article. 
+
+@section Configuring gnus to use GroupLens
+
+To use GroupLens you must register a pseudonym with your local Better
+Bit Bureau (BBB).  At the moment the only better bit in town is at
+@code{http://www.cs.umn.edu/Research/GroupLens/bbb.html}.
+Once you have registered you'll need to set a couple of variables 
+@lisp
+(setq gnus-use-grouplens t)
+(setq grouplens-pseudonym my-pseudonym)
+(setq grouplens-newsgroups "comp.lang.c++" "rec.humor")
+@end lisp
+
+Thats the minimum of what you need to get up and running with
+GroupLens.  Once you've registered, GroupLens will start giving you
+scores for articles based on the average of what other people think.
+But, to get the real benefit of grouplens you need to start rating
+articles yourself.  Then the scores GroupLens gives you will be
+personalized for you, based on how the people you usually agree with
+have already rated.
+
+@section Rating Articles in GroupLens
+In GroupLens, an article is rated on a scale from 1..5.  Where 1 means
+something like this article is a waste of bandwidth.  and 5 means that
+the article was really good.  The basic question to ask yourself is, "on
+a scale from 1 to 5 would I like to see more articles like this one?"
+There are four ways to enter a rating for an article in GroupLens.
+@table @kbd
+
+@item r
+@findex bbb-summary-rate-article
+This function will prompt you for a rating on a scale of one-to five
+
+@item N n
+@findex grouplens-next-unread-article
+Rate the article and go to the next unread article.
+
+@item N n
+@findex grouplens-best-unread-article
+Rate the article and go to the next unread article with the highest score
+
+@item k
+@findex grouplens-score-thread
+This function will prompt you for a rating, and rate all the articles in
+the thread.  This is really useful for some of those long running giant
+threads in rec.humor.
+
+@end table
+
+@section Displaying predictions in grouplens
+There are two ways to display predictions in grouplens.  One is to have
+the grouplens scores contribute to, or override the regular gnus scoring
+mechanism.  This behavior is the default; however, some people prefer to
+see the gnus scores plus the grouplens scores.  To get the separate
+scoring behavior you need to set 
+@code{(setq gnus-grouplens-override-scoring nil)}
+
+In either case, GroupLens gives you a few choices for how you would like
+to see your predictions displayed.  The display of predictions is
+controlled by the variable @code{grouplens-prediction-display}
+
+ prediction-spot -- an * corresponding to the prediction between 1 and 5, 
+ confidence-interval -- a numeric confidence interval
+ prediction-bar --  |#####     | the longer the bar, the better the article,
+ confidence-bar --  |  -----   | the prediction is in the middle of the bar,
+ confidence-spot -- |  *       | the spot gets bigger with more confidence,
+ prediction-num  --   plain-old numeric value,
+ confidence-plus-minus  -- prediction +/i confidence")
+
+----------------------------------------------------------------
+In particular, I'm pretty sure these last few lines will not look very
+pretty without some additional texinfo magic, magic that is beyond me at
+this time of the day.
+
+
 @node Various Various
 @section Various Various
 @cindex mode lines