+Wed Jul 1 13:33:26 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Gnus v5.6.23 is released.
+
+Wed Jul 1 12:52:32 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nntp.el (nntp-record-command): Give more precise time info.
+ (nntp-next-result-arrived-p): Look for the end of error lines.
+
+Wed Jul 1 12:24:06 1998 François Pinard <pinard@iro.umontreal.ca>
+
+ * gnus-util.el (gnus-delete-if): Would do the opposite.
+
+Wed Jul 1 01:53:31 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-sum.el (gnus-build-sparse-threads): Didn't work at all.
+
+Tue Jun 30 15:56:54 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nntp.el (nntp-send-authinfo): Store the user name.
+ (nntp-authinfo-user): New variable.
+
+ * gnus-sum.el (gnus-summary-limit-mark-excluded-as-read): Would
+ mark some articles as unread.
+
+ * gnus-agent.el (gnus-agent-expire): Don't sort lines.
+
+Tue Jun 30 15:56:31 1998 Mike McEwan <mike@lotusland.demon.co.uk>
+
+ * gnus-agent.el (gnus-agent-expire): Use a fresh hash table.
+
+Mon Jun 29 22:49:49 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Gnus v5.6.22 is released.
+
+Mon Jun 29 21:22:46 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-salt.el (gnus-pick-mode-map): Remove gnus-mouse.
+
+ * gnus-sum.el (gnus-dependencies-add-header): `debug' left in.
+ Eh. Eh.
+
+ * gnus-salt.el (gnus-summary-pick-line-format): Missing %.-
+
+ * gnus-topic.el (gnus-topic-rename): Fix error message.
+
+Sun Jun 28 14:32:08 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-spec.el (gnus-face-face-function): Double quoting removed.
+
Sun Jun 28 09:54:52 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
* gnus.el: Gnus v5.6.21 is released.
(interactive)
(let ((methods gnus-agent-covered-methods)
(day (- (gnus-time-to-day (current-time)) gnus-agent-expire-days))
- (expiry-hashtb (gnus-make-hashtable 1023))
gnus-command-method sym group articles
history overview file histories elem art nov-file low info
unreads marked article)
(save-excursion
(setq overview (get-buffer-create " *expire overview*"))
(while (setq gnus-command-method (pop methods))
+ (let ((expiry-hashtb (gnus-make-hashtable 1023)))
(gnus-agent-open-history)
(set-buffer
(setq gnus-agent-current-history
(< art article)))
(if (file-exists-p
(gnus-agent-article-name
- (number-to-string article) group))
+ (number-to-string art) group))
(forward-line 1)
;; Remove old NOV lines that have no articles.
(gnus-delete-line)))
(gnus-delete-line))
(gnus-agent-save-history)
(gnus-agent-close-history))
- (gnus-message 4 "Expiry...done")))))
+ (gnus-message 4 "Expiry...done"))))))
;;;###autoload
(defun gnus-agent-batch ()
:group 'gnus-summary-pick)
(defcustom gnus-summary-pick-line-format
- "-5P %U\%R\%z\%I\%(%[%4L: %-20,20n%]%) %s\n"
+ "%-5P %U\%R\%z\%I\%(%[%4L: %-20,20n%]%) %s\n"
"*The format specification of the lines in pick buffers.
It accepts the same format specs that `gnus-summary-line-format' does."
:type 'string
"E" gnus-uu-mark-by-regexp
"b" gnus-uu-mark-buffer
"B" gnus-uu-unmark-buffer
- gnus-mouse-2 gnus-pick-mouse-pick
"X" gnus-pick-start-reading
))
(defun gnus-face-face-function (form type)
`(gnus-add-text-properties
(point) (progn ,@form (point))
- '(gnus-face t
- face ',(symbol-value (intern (format "gnus-face-%d" type))))))
+ '(gnus-face t face ,(symbol-value (intern (format "gnus-face-%d" type))))))
(defun gnus-tilde-max-form (el max-width)
"Return a form that limits EL to MAX-WIDTH."
(require 'gnus-range)
(require 'gnus-int)
(require 'gnus-undo)
+(require 'gnus-util)
(require 'mime-view)
(autoload 'gnus-summary-limit-include-cached "gnus-cache" nil t)
;; Yuk! This is a reference loop. Make the article be a
;; root article.
(progn
- (debug)
(mail-header-set-references (car (symbol-value id-dep)) "none")
(setq ref nil))
(setq ref (gnus-parent-id (mail-header-references ref-header)))))
(defun gnus-build-sparse-threads ()
(let ((headers gnus-newsgroup-headers)
+ (gnus-summary-ignore-duplicates t)
header references generation relations
cthread subject child end pthread relation new-child date)
;; First we create an alist of generations/relations, where
generation 0)
(while (search-backward ">" nil t)
(setq end (1+ (point)))
- (if (search-backward "<" nil t)
- (push (list (incf generation)
- child (setq child new-child)
- subject date)
- relations)))
- (push (list (1+ generation) child nil subject) relations)
+ (when (search-backward "<" nil t)
+ (setq new-child (buffer-substring (point) end))
+ (push (list (incf generation)
+ child (setq child new-child)
+ subject date)
+ relations)))
+ (when child
+ (push (list (1+ generation) child nil subject) relations))
(erase-buffer)))
(kill-buffer (current-buffer)))
;; Sort over trustworthiness.
'<)
(sort gnus-newsgroup-limit '<)))
article)
- (setq gnus-newsgroup-unreads gnus-newsgroup-limit)
+ (setq gnus-newsgroup-unreads
+ (delete-duplicates (append gnus-newsgroup-unreads
+ gnus-newsgroup-limit)))
(if all
(setq gnus-newsgroup-dormant nil
gnus-newsgroup-marked nil
(read-string (format "Rename %s to: " topic)))))
;; Check whether the new name exists.
(when (gnus-topic-find-topology new-name)
- (error "Topic '%s' already exists"))
+ (error "Topic '%s' already exists" new-name))
;; "nil" is an invalid name, for reasons I'd rather not go
;; into here. Trust me.
(when (equal new-name "nil")
(setcar entry new-name))
(forward-line -1)
(gnus-dribble-touch)
- (gnus-group-list-groups)))
+ (gnus-group-list-groups)
+ (forward-line 1)))
(defun gnus-topic-indent (&optional unindent)
"Indent a topic -- make it a sub-topic of the previous topic.
"Delete elements from LIST that satisfy PREDICATE."
(let (out)
(while list
- (when (funcall predicate (car list))
+ (unless (funcall predicate (car list))
(push (car list) out))
(pop list))
(nreverse out)))
:link '(custom-manual "(gnus)Exiting Gnus")
:group 'gnus)
-(defconst gnus-version-number "6.7.7"
+(defconst gnus-version-number "6.7.9"
"Version number for this version of gnus.")
(defconst gnus-version
- (format "Semi-gnus %s (based on Gnus 5.6.20; for SEMI 1.8)"
+ (format "Semi-gnus %s (based on Gnus 5.6.23; for SEMI 1.8)"
gnus-version-number)
"Version string for this version of gnus.")
(require 'message)
(require 'nnmail)
(require 'nnoo)
+(require 'gnus-util)
(eval-when-compile (require 'cl))
(nnoo-declare nndoc)
(defun nnmail-purge-split-history (group)
"Remove all instances of GROUP from `nnmail-split-history'."
- (let ((history nnmail-split-history)
- prev)
+ (let ((history nnmail-split-history))
(while history
(setcar history (gnus-delete-if (lambda (e) (string= (car e) group))
(car history)))
(defvoo nntp-last-command-time nil)
(defvoo nntp-last-command nil)
(defvoo nntp-authinfo-password nil)
+(defvoo nntp-authinfo-user nil)
(defvar nntp-connection-list nil)
(save-excursion
(set-buffer (get-buffer-create "*nntp-log*"))
(goto-char (point-max))
- (insert (format-time-string "%Y%m%dT%H%M%S" (current-time))
- " " nntp-address " " string "\n")))
+ (let ((time (current-time)))
+ (insert (format-time-string "%Y%m%dT%H%M%S" time)
+ "." (format "%03d" (/ (nth 2 time) 1000))
+ " " nntp-address " " string "\n"))))
(defsubst nntp-wait-for (process wait-for buffer &optional decode discard)
"Wait for WAIT-FOR to arrive from PROCESS."
(nnoo-define-basics nntp)
(defsubst nntp-next-result-arrived-p ()
- (let ((point (point)))
- (cond
- ((eq (following-char) ?2)
- (if (re-search-forward "\n\\.\r?\n" nil t)
- t
- (goto-char point)
- nil))
- ((looking-at "[34]")
- (forward-line 1)
- t)
- (t
- nil))))
+ (cond
+ ;; A result that starts with a 2xx code is terminated by
+ ;; a line with only a "." on it.
+ ((eq (following-char) ?2)
+ (if (re-search-forward "\n\\.\r?\n" nil t)
+ t
+ nil))
+ ;; A result that startx with a 3xx or 4xx code is terminated
+ ;; by a newline.
+ ((looking-at "[34]")
+ (if (search-forward "\n" nil t)
+ t
+ nil))
+ ;; No result here.
+ (t
+ nil)))
(deffoo nntp-retrieve-headers (articles &optional group server fetch-old)
"Retrieve the headers of ARTICLES."
force)
(nntp-send-command
"^3.*\r?\n" "AUTHINFO USER"
- (or user (read-string (format "NNTP (%s) user name: " nntp-address))))
+ (or user
+ nntp-authinfo-user
+ (setq nntp-authinfo-user
+ (read-string (format "NNTP (%s) user name: " nntp-address)))))
(nntp-send-command
"^2.*\r?\n" "AUTHINFO PASS"
(or passwd
+Tue Jun 30 16:11:27 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.texi (Topic Commands): Addition.
+
+Mon Jun 29 21:46:13 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.texi (Article Keymap): Typo.
+
+Sun Jun 28 17:41:10 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.texi (Formatting Fonts): Typo fix.
+
Sat Jun 27 04:37:14 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
* gnus.texi (Mail-To-News Gateways): Addition.
+ (Mail-To-News Gateways): Typo.
Fri Jun 26 13:33:00 1998 Yoshiki Hayashi <g740685@komaba.ecc.u-tokyo.ac.jp>
\input texinfo @c -*-texinfo-*-
@setfilename gnus
-@settitle Semi-gnus 6.7.5 Manual
+@settitle Semi-gnus 6.7.9 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Semi-gnus 6.7.5 Manual
+@title Semi-gnus 6.7.9 Manual
@author by Lars Magne Ingebrigtsen
@page
API. So Semi-gnus does not discriminate various language communities.
Oh, if you are a Klingon, please wait Unicode Next Generation.
-This manual corresponds to Semi-gnus 6.7.5.
+This manual corresponds to Semi-gnus 6.7.9.
@end ifinfo
@kindex T D (Topic)
@findex gnus-topic-remove-group
Remove a group from the current topic (@code{gnus-topic-remove-group}).
+This command is mainly useful if you have the same group in several
+topics and wish to remove it from one of the topics. You may also
+remove a group from all topics, but in that case, Gnus will add it to
+the root topic the next time you start Gnus. In fact, all new groups
+(which, naturally, don't belong to any topic) will show up in the root
+topic.
+
This command uses the process/prefix convention
(@pxref{Process/Prefix}).
@kindex C-c ^ (Article)
@findex gnus-article-refer-article
If point is in the neighborhood of a @code{Message-ID} and you press
-@kbd{r}, gnus will try to get that article from the server
+@kbd{C-c ^}, gnus will try to get that article from the server
(@code{gnus-article-refer-article}).
@item C-c C-m
@enumerate
@item
-@samp{group}: If the split is a string, that will be taken as a group name.
+@samp{group}: If the split is a string, that will be taken as a group
+name. Normal regexp match expansion will be done. See below for
+examples.
@item
@var{(FIELD VALUE SPLIT)}: If the split is a list, the first element of
(any "debian-\\(\\w*\\)@@lists.debian.org" "mail.debian.\\1")
@end example
+If the string contains the element @samp{\&}, then the previously
+matched string will be substituted. Similarly, the elements @samp{\1}
+up to @samp{\9} will be substituted with the text matched by the
+groupings 1 through 9.
+
+
@node Mail and Procmail
@subsection Mail and Procmail
@cindex procmail
@lisp
(setq gnus-post-method
- '(nngateway "mail2news@replay.com"
+ '(nngateway "mail2news@@replay.com"
(nngateway-header-transformation
nngateway-mail2news-header-transformation)))
@end lisp
The kill to score conversion package isn't included in Gnus by default.
You can fetch it from
-@file{http://www.ifi.uio.no/~larsi/ding-other/gnus-kill-to-score}.
+@file{http://www.stud.ifi.uio.no/~larsi/ding-other/gnus-kill-to-score}.
If your old kill files are very complex---if they contain more
non-@code{gnus-kill} forms than not, you'll have to convert them by
highlighted (with @code{gnus-mouse-face}) when you put the mouse pointer
over it.
-Text inside the @samp{%[} and @samp{%]} specifiers will have their
+Text inside the @samp{%@{} and @samp{%@}} specifiers will have their
normal faces set using @code{gnus-face-0}, which is @code{bold} by
-default. If you say @samp{%1[}, you'll get @code{gnus-face-1} instead,
+default. If you say @samp{%1@{}, you'll get @code{gnus-face-1} instead,
and so on. Create as many faces as you wish. The same goes for the
@code{mouse-face} specs---you can say @samp{%3(hello%)} to have
@samp{hello} mouse-highlighted with @code{gnus-mouse-face-3}.
If you want to investigate the person responsible for this outrage, you
can point your (feh!) web browser to
-@file{http://www.ifi.uio.no/~larsi/}. This is also the primary
+@file{http://www.stud.ifi.uio.no/~larsi/}. This is also the primary
distribution point for the new and spiffy versions of Gnus, and is known
as The Site That Destroys Newsrcs And Drives People Mad.
* ding Gnus:: New things in Gnus 5.0/5.1, the first new Gnus.
* September Gnus:: The Thing Formally Known As Gnus 5.3/5.3.
* Red Gnus:: Third time best---Gnus 5.4/5.5.
-* Quassia Gnus:: Two times two is four, or Gnus 5.6.20.
+* Quassia Gnus:: Two times two is four, or Gnus 5.6.23.
@end menu
These lists are, of course, just @emph{short} overviews of the
@node Quassia Gnus
@subsubsection Quassia Gnus
-New features in Gnus 5.6.20:
+New features in Gnus 5.6.23:
@itemize @bullet
dummy root instead of the first article.
@item
+Propagate all group properties (marks, article numbers, etc) up to the
+topics for displaying.
+
+@item
+`n' in the group buffer with topics should go to the next group
+with unread articles, even if that group is hidden in a topic.
+
+@item
Solve the halting problem.
@c TODO
\input texinfo @c -*-texinfo-*-
@setfilename message
-@settitle Message 5.6.20 Manual
+@settitle Message 5.6.23 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Message 5.6.20 Manual
+@title Message 5.6.23 Manual
@author by Lars Magne Ingebrigtsen
@page
* Key Index:: List of Message mode keys.
@end menu
-This manual corresponds to Message 5.6.20. Message is distributed with
+This manual corresponds to Message 5.6.23. Message is distributed with
the Gnus distribution bearing the same version number as this manual
has.