+Thu Oct 10 23:36:32 1996 Jan Vroonhof <vroonhof@math.ethz.ch>
+
+ * gnus-nocem.el (gnus-nocem): Typo.
+
+Thu Oct 10 23:16:57 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
+
+ * gnus-group.el (gnus-group-clear-data-on-native-groups): Only
+ clear data on native groups.
+
+Thu Oct 10 14:11:18 1996 Per Abrahamsen <abraham@dina.kvl.dk>
+
+ * gnus-cus.el (gnus-group-customize): Allow unknown entries.
+ (gnus-score-customize): Ditto.
+ (gnus-score-string-convert): Ditto.
+ (gnus-score-parameters): Added `touched'.
+
+Thu Oct 10 23:06:42 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
+
+ * gnus-start.el (gnus-read-active-file): Don't bug out on null
+ methods.
+
+Thu Oct 10 22:29:05 1996 Randell Jesup <Randell.Jesup@scala.com>
+
+ * article.el (article-hide-boring-headers): Reversed `date'
+ check.
+
+Thu Oct 10 15:24:08 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
+
+ * gnus-xmas.el (gnus-xmas-define): Removed gnus-display-type.
+
+ * gnus-group.el (gnus-group-new-mail): Strip prefix.
+
+ * nnmail.el (nnmail-new-mail-p): Didn't work.
+
+ * gnus-score.el (gnus-score-adaptive): Use
+ gnus-adaptive-word-score-alist.
+
+ * nnoo.el (nnoo-define-skeleton-1): Define
+ request-list-newsgroups.
+
+ * nnweb.el (w3-forms): Removed.
+
+ * gnus-uu.el (gnus-uu-digest-mail-forward): Use directory form.
+
+Tue Oct 8 14:30:53 1996 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.el: Red Gnus v0.49 is released.
+
Tue Oct 8 00:15:04 1996 Per Abrahamsen <abraham@dina.kvl.dk>
* gnus-nocem.el: Added customize support.
"^Approved:" "^Sender:" "^Received:" "^Mail-from:")
"All headers that match this regexp will be hidden.
This variable can also be a list of regexps of headers to be ignored.
-If `article-visible-headers' is non-nil, this variable will be ignored."
+If `gnus-visible-headers' is non-nil, this variable will be ignored."
:type '(choice :custom-show nil
regexp
(repeat regexp))
"^Gnus-Warning:" "^Resent-")
"All headers that do not match this regexp will be hidden.
This variable can also be a list of regexp of headers to remain visible.
-If this variable is non-nil, `gnus-article-ignored-headers' will be ignored."
+If this variable is non-nil, `gnus-ignored-headers' will be ignored."
:type '(choice :custom-show nil
(repeat regexp)
regexp)
((eq elem 'date)
(let ((date (message-fetch-field "date")))
(when (and date
- (< (gnus-days-between date (current-time-string))
+ (< (gnus-days-between (current-time-string) date)
4))
(article-hide-header "date")))))))))))
;;
;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
;; Keywords: help, faces
-;; Version: 0.992
+;; Version: 0.993
;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
;;; Commentary:
(cond ((eq escape ?s)
(setq child (widget-create-child-and-convert
widget 'custom-level
- :format "(%[sample%])\n"
+ :format "(%[show%])\n"
:button-face symbol)))
(t
(custom-format-handler widget escape)))
;;
;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
;; Keywords: help, faces
-;; Version: 0.992
+;; Version: 0.993
;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
;;; Commentary:
(defun custom-declare-variable (symbol value doc &rest args)
"Like `defcustom', but SYMBOL and VALUE are evaluated as notmal arguments."
(unless (default-boundp symbol)
- (set-default symbol (eval value)))
+ (set-default symbol (if (get symbol 'saved-value)
+ (eval (car (get symbol 'saved-value)))
+ (eval value))))
(put symbol 'factory-value (list value))
(when doc
(put symbol 'variable-documentation doc))
(defun custom-declare-face (face spec doc &rest args)
"Like `defface', but FACE is evaluated as a normal argument."
(put face 'factory-face spec)
- (let ((value (or (get face 'saved-face) spec)))
- (custom-face-display-set face value))
+ (unless (facep face)
+ ;; If the user has already created the face, respect that.
+ (let ((value (or (get face 'saved-face) spec)))
+ (custom-face-display-set face value)))
(when doc
(put face 'face-documentation doc))
(while args
(let* ((name (nth 0 atts))
(value (nth 1 atts))
(fun (nth 2 (assq name custom-face-attributes))))
- (setq atts (cdr (cdr atts)))
- (funcall fun face value))))
+ (setq atts (cdr (cdr atts)))
+ (condition-case nil
+ (funcall fun face value)
+ (error nil)))))
(defun custom-set-face-bold (face value &optional frame)
"Set the bold property of FACE to VALUE."
- (condition-case nil
- (if value
- (make-face-bold face frame)
- (make-face-unbold face frame))
- (error nil)))
+ (if value
+ (make-face-bold face frame)
+ (make-face-unbold face frame)))
(defun custom-set-face-italic (face value &optional frame)
"Set the italic property of FACE to VALUE."
- (condition-case nil
- (if value
- (make-face-italic face frame)
- (make-face-unitalic face frame))
- (error nil)))
+ (if value
+ (make-face-italic face frame)
+ (make-face-unitalic face frame)))
;;;###autoload
(defun custom-initialize-faces (&optional frame)
(while args
(let ((symbol (nth 0 args))
(value (nth 1 args)))
- (set-default symbol (eval value))
(put symbol 'saved-value (list value)))
(setq args (cdr (cdr args)))))
(while args
(let ((face (nth 0 args))
(spec (nth 1 args)))
- (put face 'saved-face spec)
- (custom-face-display-set face spec))
+ (put face 'saved-face spec))
(setq args (cdr (cdr args)))))
;;; Meta Customization
,@types)
'(repeat :inline t
:tag "Variables"
- :format "%t:\n%h%v%i"
+ :format "%t:\n%h%v%i\n\n"
:doc "\
Set variables local to the group you are entering.
(group :value (nil nil)
(symbol :tag "Variable")
(sexp :tag
- "Value")))))
+ "Value")))
+
+ '(repeat :inline t
+ :tag "Unknown entries"
+ sexp)))
(widget-insert "\n\nYou can also edit the ")
(widget-create 'info-link
:tag "select method"
Each VAR will be made buffer-local to the current summary buffer,
and set to the value specified. This is a convenient, if somewhat
strange, way of setting variables in some groups if you don't like
-hooks much."))
+hooks much.")
+ (touched (sexp :format "Touched\n") "Internal variable."))
"Alist of valid symbolic score parameters.
Each entry has the form (NAME TYPE DOC), where NAME is the parameter
:tag ,tag
:doc ,doc
:format "%t:\n%h%v%i\n\n"
- ,group))))
+ (choice :format "%v"
+ :value ("" nil nil s)
+ ,group
+ sexp)))))
widget)
(define-widget 'gnus-score-integer 'group
Note that using this may lead to undeterministic scores of the
articles in the thread.
")
- ,@types)))
+ ,@types)
+ '(repeat :inline t
+ :tag "Unknown entries"
+ sexp)))
(use-local-map widget-keymap)
(widget-setup)))
"String or function to be executed to display an X-Face header.
If it is a string, the command will be executed in a sub-shell
asynchronously. The compressed face will be piped to this command.")
-
- ;; Added by Per Abrahamsen <amanda@iesd.auc.dk>.
- (defvar gnus-display-type
- (condition-case nil
- (let ((display-resource (x-get-resource ".displayType" "DisplayType")))
- (cond (display-resource (intern (downcase display-resource)))
- ((x-display-color-p) 'color)
- ((x-display-grayscale-p) 'grayscale)
- (t 'mono)))
- (error 'mono))
- "A symbol indicating the display Emacs is running under.
-The symbol should be one of `color', `grayscale' or `mono'. If Emacs
-guesses this display attribute wrongly, either set this variable in
-your `~/.emacs' or set the resource `Emacs.displayType' in your
-`~/.Xdefaults'. See also `gnus-background-mode'.
-
-This is a meta-variable that will affect what default values other
-variables get. You would normally not change this variable, but
-pounce directly on the real variables themselves.")
-
- (defvar gnus-background-mode
- (condition-case nil
- (let ((bg-resource (x-get-resource ".backgroundMode"
- "BackgroundMode"))
- (params (frame-parameters)))
- (cond (bg-resource (intern (downcase bg-resource)))
- ((and (cdr (assq 'background-color params))
- (< (apply '+ (x-color-values
- (cdr (assq 'background-color params))))
- (* (apply '+ (x-color-values "white")) .6)))
- 'dark)
- (t 'light)))
- (error 'light))
- "A symbol indicating the Emacs background brightness.
-The symbol should be one of `light' or `dark'.
-If Emacs guesses this frame attribute wrongly, either set this variable in
-your `~/.emacs' or set the resource `Emacs.backgroundMode' in your
-`~/.Xdefaults'.
-See also `gnus-display-type'.
-
-This is a meta-variable that will affect what default values other
-variables get. You would normally not change this variable, but
-pounce directly on the real variables themselves."))
+)
(cond
((string-match "XEmacs\\|Lucid" emacs-version)
(get-text-property (gnus-point-at-bol) 'gnus-unread))
(defun gnus-group-new-mail (group)
- (if (nnmail-new-mail-p group)
+ (if (nnmail-new-mail-p (gnus-group-real-name group))
gnus-new-mail-mark
? ))
(let ((alist (cdr gnus-newsrc-alist))
info)
(while (setq info (pop alist))
- (gnus-info-clear-data info))
+ (when (gnus-group-native-p (gnus-info-group info))
+ (gnus-info-clear-data info)))
(gnus-get-unread-articles))))
(defun gnus-info-clear-data (info)
(require 'gnus-art)
(require 'gnus-range)
-(defgroup 'gnus-nocem nil
+(defgroup gnus-nocem nil
"NoCeM pseudo-cancellation treatment"
:group 'gnus-score)
(setq score
(cdr (assq
(gnus-data-mark d)
- gnus-default-adaptive-word-score-alist))))
+ gnus-adaptive-word-score-alist))))
;; This article has a mark that should lead to
;; adaptive word rules, so we insert the subject
;; and find all words in that string.
(gnus-active-to-gnus-format method gnus-active-hashtb))
(t
(gnus-groups-to-gnus-format method gnus-active-hashtb))))))
+ ((null method)
+ t)
(t
(if (not (gnus-request-list method))
(unless (equal method gnus-message-archive-method)
"Digests and forwards all articles in this series."
(interactive "P")
(let ((gnus-uu-save-in-digest t)
- (file (make-temp-name (concat gnus-uu-tmp-dir "forward")))
+ (file (make-temp-name (nnheader-concat gnus-uu-tmp-dir "forward")))
buf subject from newsgroups)
(setq gnus-uu-digest-from-subject nil)
(gnus-uu-decode-save n file)
(if (compiled-function-p fval)
(list 'funcall fval)
(cons 'progn (cdr (cdr fval))))))
-
- ;; Fix by "jeff (j.d.) sparkes" <jsparkes@bnr.ca>.
- (defvar gnus-display-type (device-class)
- "A symbol indicating the display Emacs is running under.
-The symbol should be one of `color', `grayscale' or `mono'. If Emacs
-guesses this display attribute wrongly, either set this variable in
-your `~/.emacs' or set the resource `Emacs.displayType' in your
-`~/.Xdefaults'. See also `gnus-background-mode'.
-
-This is a meta-variable that will affect what default values other
-variables get. You would normally not change this variable, but
-pounce directly on the real variables themselves.")
-
(fset 'gnus-x-color-values
(if (fboundp 'x-color-values)
'x-color-values
(lambda (color)
(color-instance-rgb-components
- (make-color-instance color)))))
-
- (defvar gnus-background-mode
- (let* ((bg-resource
- (condition-case ()
- (x-get-resource ".backgroundMode" "BackgroundMode" 'string)
- (error nil)))
- (params (frame-parameters))
- (color (condition-case ()
- (or (assq 'background-color params)
- (color-instance-name
- (specifier-instance
- (face-background 'default))))
- (error nil))))
- (cond (bg-resource (intern (downcase bg-resource)))
- ((and color
- (< (apply '+ (gnus-x-color-values color))
- (/ (apply '+ (gnus-x-color-values "white")) 3)))
- 'dark)
- (t 'light)))
- "A symbol indicating the Emacs background brightness.
-The symbol should be one of `light' or `dark'.
-If Emacs guesses this frame attribute wrongly, either set this variable in
-your `~/.emacs' or set the resource `Emacs.backgroundMode' in your
-`~/.Xdefaults'.
-See also `gnus-display-type'.
-
-This is a meta-variable that will affect what default values other
-variables get. You would normally not change this variable, but
-pounce directly on the real variables themselves.")
- )
-
+ (make-color-instance color))))))
(defun gnus-xmas-redefine ()
"Score and kill file handling."
:group 'gnus )
-(defconst gnus-version-number "0.49"
+(defconst gnus-version-number "0.50"
"Version number for this version of Gnus.")
(defconst gnus-version (format "Red Gnus v%s" gnus-version-number)
&optional group spool-func)
"Read new incoming mail."
;; Nix out the previous split history.
- (setq nnmail-split-history nil)
+ (unless group
+ (setq nnmail-split-history nil))
(let* ((spools (nnmail-get-spool-files group))
(group-in group)
incoming incomings spool)
(let ((his nnmail-split-history)
found)
(while his
- (when (member group (pop his))
+ (when (assoc group (pop his))
(setq found t
his nil)))
found))
(setq nnmh-current-directory nil)
t))))
+(nnoo-define-skeleton nnmh)
+
\f
;;; Internal functions.
(let ((functions '(retrieve-headers
request-close request-article
open-group request-group close-group
- request-list request-post))
+ request-list request-post request-list-newsgroups))
function fun)
(while (setq function (pop functions))
(when (not (fboundp (setq fun (nnoo-symbol backend function))))
(require 'message)
(require 'gnus-util)
(require 'w3)
-(require 'w3-forms)
(require 'url)
(nnoo-declare nnweb)
;;
;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
;; Keywords: extensions
-;; Version: 0.992
+;; Version: 0.993
;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
;;; Commentary:
;;
;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
;; Keywords: help, extensions, faces, hypermedia
-;; Version: 0.992
+;; Version: 0.993
;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
;;; Commentary:
+Fri Oct 11 12:38:59 1996 Lars Magne Ingebrigtsen <larsi@ylfing.ifi.uio.no>
+
+ * gnus.texi (Adaptive Scoring): Addition.
+
Tue Oct 8 13:16:41 1996 Lars Magne Ingebrigtsen <larsi@ylfing.ifi.uio.no>
* Makefile (all): Make custom.
EMACS=emacs
MAKEINFO=$(EMACS) -batch -q -no-site-file
INFOSWI=-l texinfmt -f texinfo-every-node-update -f texinfo-format-buffer -f save-buffer
+XINFOSWI=-eval '(find-file "custom.texi")' -l texinfmt -f texinfo-every-node-update -f texinfo-format-buffer -f save-buffer
LATEX=latex
DVIPS=dvips
PERL=perl
most: texi2latexi.elc latex latexps
gnus: gnus.texi
- $(MAKEINFO) gnus.texi $(INFOSWI)
+ $(MAKEINFO) gnus.texi $(XINFOSWI)
custom: custom.texi
- $(MAKEINFO) custom.texi $(INFOSWI)
+ $(MAKEINFO) custom.texi $(XINFOSWI)
widget: widget.texi
- $(MAKEINFO) widget.texi $(INFOSWI)
+ $(MAKEINFO) widget.texi $(XINFOSWI)
message: message.texi
- $(MAKEINFO) message.texi $(INFOSWI)
+ $(MAKEINFO) message.texi $(XINFOSWI)
dvi: gnus.dvi message.dvi
makeinfo:
makeinfo -o gnus gnus.texi
makeinfo -o message message.texi
+ makeinfo -o widget widget.texi
+ makeinfo -o custom custom.texi
texi2latexi.elc:
$(EMACS) -batch -l bytecomp -f batch-byte-recompile-directory
\input texinfo @c -*-texinfo-*-
@setfilename gnus
-@settitle Red Gnus 0.49 Manual
+@settitle Red Gnus 0.50 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Red Gnus 0.49 Manual
+@title Red Gnus 0.50 Manual
@author by Lars Magne Ingebrigtsen
@page
millions, of functions you can put in this hook. For an overview of
functions @pxref{Article Highlighting}, @pxref{Article Hiding},
@pxref{Article Washing}, @pxref{Article Buttons} and @pxref{Article
-Date}.
+Date}. Note that the order of functions in this hook might affect
+things, so you may have to fiddle a bit to get the desired results.
You can, of course, write your own functions. The functions are called
from the article buffer, and you can do anything you like, pretty much.
Another way to have auto-expiry happen is to have the element
@code{auto-expire} in the group parameters of the group.
+If you use adaptive scoring (@pxref{Adaptive Scoring}) and
+auto-expiring, you'll have problems. Auto-expiring and adaptive scoring
+doesn't really mix very well.
+
@vindex nnmail-expiry-wait
The @code{nnmail-expiry-wait} variable supplies the default time an
expirable article has to live. The default is seven days.
and mail from servers to home machines and back again. It can be a bit
fiddly.
+First some terminology:
+
+@table @dfn
+
+@item server
+This is the machine that is connected to the outside world and where you
+get news and/or mail from.
+
+@item home machine
+This is the machine that you want to do the actual reading and responding
+on. It is typically not connected to the rest of the world in any way.
+
+@item packet
+Something that contains messages and/or commands. There are two kinds
+of packets:
+
+@table @dfn
+@item message packets
+These are packets made at the server, and typically contains lots of
+messages for you to read. These are called @file{SoupoutX.tgz} by
+default, where @var{X} is a number.
+
+@item response packets
+These are packets made at the home machine, and typically contains
+replies that you've written. These are called @file{SoupinX.tgz} by
+default, where @var{X} is a number.
+
+@end table
+
+@end table
+
+
@enumerate
@item
You log in on the server and create a @sc{soup} packet. You can either
-use a dedicated @sc{soup} thingie, or you can use Gnus to create the
-packet with the @kbd{O s} command.
+use a dedicated @sc{soup} thingie (like the @code{awk} program), or you
+can use Gnus to create the packet with its @sc{soup} commands (@kbd{O
+s} and/or @kbd{G s b}; and then @kbd{G s p}) (@pxref{SOUP Commands}).
@item
You transfer the packet home. Rail, boat, car or modem will do fine.
You put the packet in your home directory.
@item
-You fire up Gnus using the @code{nnsoup} backend as the native server.
+You fire up Gnus on your home machine using the @code{nnsoup} backend as
+the native or secondary server.
@item
You read articles and mail and answer and followup to the things you
-want.
+want (@pxref{SOUP Replies}).
@item
You do the @kbd{G s r} command to pack these replies into a @sc{soup}
@node SOUP Commands
@subsubsection SOUP Commands
+These are commands for creating and manipulating @sc{soup} packets.
+
@table @kbd
@item G s b
@kindex G s b (Group)
@item G s w
@kindex G s w (Group)
@findex gnus-soup-save-areas
-Save all data files (@code{gnus-soup-save-areas}).
+Save all @sc{soup} data files (@code{gnus-soup-save-areas}).
@item G s s
@kindex G s s (Group)
@findex gnus-soup-add-article
This summary-mode command adds the current article to a @sc{soup} packet
(@code{gnus-soup-add-article}). It understands the process/prefix
-convention.
+convention (@pxref{Process/Prefix}).
@end table
That means that that subject will get a score of ten times -1, which
should be, unless I'm much mistaken, -10.
+If you have auto-expirable (mail) groups (@pxref{Expiring Mail}), all
+the read articles will be marked with the @samp{E} mark. This'll
+probably make adaptive scoring slightly impossible, so auto-expiring and
+adaptive scoring doesn't really mix very well.
+
The headers you can score on are @code{from}, @code{subject},
@code{message-id}, @code{references}, @code{xref}, @code{lines},
@code{chars} and @code{date}. In addition, you can score on
@lisp
(add-hook 'gnus-article-display-hook
- 'gnus-article-hide-boring-headers)
+ 'gnus-article-hide-boring-headers t)
@end lisp
@item
And much, much, much more. There is more to come than has already been
implemented. (But that's always true, isn't it?)
-@file{<URL:http://www.ifi.uio.no/~larsi/sgnus/todo>} is where the actual
+@file{<URL:http://www.ifi.uio.no/~larsi/rgnus/todo>} is where the actual
up-to-the-second todo list is located, so if you're really curious, you
could point your Web browser over that-a-way.