+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.
(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
(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
((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)
(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))
;; 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
;; 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"
'(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)
(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
'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)
"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
"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)
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)
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
(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)))
((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")))))
(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^ \\*")
(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 . "^ ?$")
(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")
(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)))
(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 "")
(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)
(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
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)
'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))))
+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.
* 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
@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