+Sun Mar 29 09:56:00 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Gnus v5.6.4 is released.
+
+Sun Mar 29 09:47:58 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nnkiboze.el (nnkiboze-request-delete-group): Would bug out when
+ deleting files.
+
+Sat Mar 28 08:48:31 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nntp.el (nntp-encode-text): Use `nntp-end-of-line'.
+
+Thu Mar 26 15:29:51 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-agent.el (gnus-agent-expire): Check size of history file.
+
+ * message.el (message-mode): Doc fix.
+
+Mon Mar 23 14:21:34 1998 Mike McEwan <mike@lotusland.demon.co.uk>
+
+ * gnus-score.el (gnus-score-default-type): Doc fix.
+
+Mon Mar 23 14:12:01 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-int.el (gnus-request-body): Do the same as HEAD.
+
+ * gnus-art.el (gnus-article-edit-article-hook): Removed.
+
+Mon Mar 23 14:09:56 1998 jari aalto <jari.aalto@poboxes.com>
+
+ * gnus-art.el (gnus-article-edit-article-hook): New hook.
+
+1998-03-19 Jan Vroonhof <vroonhof@math.ethz.ch>
+
+ * nntp.el (nntp-open-rlogin): Wrap in save-excursion
+
+Thu Mar 19 16:43:59 1998 Joe Buehler <jhpb@hekimian.com>
+
+ * gnus-util.el (gnus-date-iso8601): Use simple string.
+
Thu Mar 19 15:18:00 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
* gnus.el: Gnus v5.6.3 is released.
(set-buffer
(setq gnus-agent-current-history
(setq history (gnus-agent-history-buffer))))
- (goto-char (point-min))
- (while (not (eobp))
- (skip-chars-forward "^\t")
- (if (> (read (current-buffer)) day)
- ;; New article; we don't expire it.
- (forward-line 1)
- ;; Old article. Schedule it for possible nuking.
- (while (not (eolp))
- (setq sym (let ((obarray expiry-hashtb))
- (read (current-buffer))))
- (if (boundp sym)
- (set sym (cons (cons (read (current-buffer)) (point))
- (symbol-value sym)))
- (set sym (list (cons (read (current-buffer)) (point)))))
- (skip-chars-forward " "))
- (forward-line 1)))
- ;; We now have all articles that can possibly be expired.
- (mapatoms
- (lambda (sym)
- (setq group (symbol-name sym)
- articles (sort (symbol-value sym) 'car-less-than-car)
- low (car (gnus-active group))
- info (gnus-get-info group)
- unreads (ignore-errors (gnus-list-of-unread-articles group))
- marked (nconc (gnus-uncompress-range
- (cdr (assq 'ticked (gnus-info-marks info))))
- (gnus-uncompress-range
- (cdr (assq 'dormant (gnus-info-marks info)))))
- nov-file (gnus-agent-article-name ".overview" group))
- (gnus-message 5 "Expiring articles in %s" group)
- (set-buffer overview)
- (erase-buffer)
- (when (file-exists-p nov-file)
- (insert-file-contents nov-file))
- (goto-char (point-min))
- (while (setq elem (pop articles))
- (setq article (car elem))
- (when (or (null low)
- (< article low)
- gnus-agent-expire-all
- (and (not (memq article unreads))
- (not (memq article marked))))
- ;; Find and nuke the NOV line.
- (while (and (not (eobp))
- (< (setq art (read (current-buffer))) article))
- (forward-line 1))
- (if (or (eobp)
- (/= art article))
- (beginning-of-line)
- (gnus-delete-line))
- ;; Nuke the article.
- (when (file-exists-p (setq file (gnus-agent-article-name
- (number-to-string article)
- group)))
- (delete-file file))
- ;; Schedule the history line for nuking.
- (push (cdr elem) histories)))
- (write-region (point-min) (point-max) nov-file nil 'silent))
- expiry-hashtb)
- (set-buffer history)
- (setq histories (nreverse (sort histories '<)))
- (while histories
- (goto-char (pop histories))
- (gnus-delete-line))
- (gnus-agent-save-history)
- (gnus-agent-close-history))
- (gnus-message 4 "Expiry...done"))))
+ (unless (zerop (buffer-size))
+ (goto-char (point-min))
+ (while (not (eobp))
+ (skip-chars-forward "^\t")
+ (if (> (read (current-buffer)) day)
+ ;; New article; we don't expire it.
+ (forward-line 1)
+ ;; Old article. Schedule it for possible nuking.
+ (while (not (eolp))
+ (setq sym (let ((obarray expiry-hashtb))
+ (read (current-buffer))))
+ (if (boundp sym)
+ (set sym (cons (cons (read (current-buffer)) (point))
+ (symbol-value sym)))
+ (set sym (list (cons (read (current-buffer)) (point)))))
+ (skip-chars-forward " "))
+ (forward-line 1)))
+ ;; We now have all articles that can possibly be expired.
+ (mapatoms
+ (lambda (sym)
+ (setq group (symbol-name sym)
+ articles (sort (symbol-value sym) 'car-less-than-car)
+ low (car (gnus-active group))
+ info (gnus-get-info group)
+ unreads (ignore-errors (gnus-list-of-unread-articles group))
+ marked (nconc (gnus-uncompress-range
+ (cdr (assq 'ticked (gnus-info-marks info))))
+ (gnus-uncompress-range
+ (cdr (assq 'dormant
+ (gnus-info-marks info)))))
+ nov-file (gnus-agent-article-name ".overview" group))
+ (gnus-message 5 "Expiring articles in %s" group)
+ (set-buffer overview)
+ (erase-buffer)
+ (when (file-exists-p nov-file)
+ (insert-file-contents nov-file))
+ (goto-char (point-min))
+ (while (setq elem (pop articles))
+ (setq article (car elem))
+ (when (or (null low)
+ (< article low)
+ gnus-agent-expire-all
+ (and (not (memq article unreads))
+ (not (memq article marked))))
+ ;; Find and nuke the NOV line.
+ (while (and (not (eobp))
+ (< (setq art (read (current-buffer))) article))
+ (forward-line 1))
+ (if (or (eobp)
+ (/= art article))
+ (beginning-of-line)
+ (gnus-delete-line))
+ ;; Nuke the article.
+ (when (file-exists-p (setq file (gnus-agent-article-name
+ (number-to-string article)
+ group)))
+ (delete-file file))
+ ;; Schedule the history line for nuking.
+ (push (cdr elem) histories)))
+ (write-region (point-min) (point-max) nov-file nil 'silent))
+ expiry-hashtb)
+ (set-buffer history)
+ (setq histories (nreverse (sort histories '<)))
+ (while histories
+ (goto-char (pop histories))
+ (gnus-delete-line))
+ (gnus-agent-save-history)
+ (gnus-agent-close-history))
+ (gnus-message 4 "Expiry...done")))))
;;;###autoload
(defun gnus-agent-batch ()
(defun gnus-request-body (article group)
"Request the body of ARTICLE in GROUP."
- (let ((gnus-command-method (gnus-find-method-for-group group)))
- (funcall (gnus-get-function gnus-command-method 'request-body)
- article (gnus-group-real-name group)
- (nth 1 gnus-command-method))))
+ (let* ((gnus-command-method (gnus-find-method-for-group group))
+ (head (gnus-get-function gnus-command-method 'request-body t))
+ res clean-up)
+ (cond
+ ;; Check the cache.
+ ((and gnus-use-cache
+ (numberp article)
+ (gnus-cache-request-article article group))
+ (setq res (cons group article)
+ clean-up t))
+ ;; Use `head' function.
+ ((fboundp head)
+ (setq res (funcall head article (gnus-group-real-name group)
+ (nth 1 gnus-command-method))))
+ ;; Use `article' function.
+ (t
+ (setq res (gnus-request-article article group)
+ clean-up t)))
+ (when clean-up
+ (save-excursion
+ (set-buffer nntp-server-buffer)
+ (goto-char (point-min))
+ (when (search-forward "\n\n" nil t)
+ (delete-region (point-min) (1- (point))))))
+ res))
(defun gnus-request-post (gnus-command-method)
"Post the current buffer using GNUS-COMMAND-METHOD."
f: fuzzy string
r: regexp string
b: before date
- a: at date
+ a: after date
n: this date
<: less than number
>: greater than number
(const :tag "fuzzy string" f)
(const :tag "regexp string" r)
(const :tag "before date" b)
- (const :tag "at date" a)
+ (const :tag "after date" a)
(const :tag "this date" n)
(const :tag "less than number" <)
(const :tag "greater than number" >)
(?z s "substring" body-string)
(?p r "regexp string" body-string)
(?b before "before date" date)
- (?a at "at date" date)
- (?n now "this date" date)
+ (?a after "after date" date)
+ (?n at "this date" date)
(?< < "less than number" number)
(?> > "greater than number" number)
(?= = "equal to number" number)))
(?x ,(macroexpand '(mail-header-xref gnus-tmp-header)) ?s)
(?D ,(macroexpand '(mail-header-date gnus-tmp-header)) ?s)
(?d (gnus-dd-mmm (mail-header-date gnus-tmp-header)) ?s)
- (?o (gnus-date-iso8601 gnus-tmp-header) ?s)
+ (?o (gnus-date-iso8601 (mail-header-date gnus-tmp-header)) ?s)
(?M ,(macroexpand '(mail-header-id gnus-tmp-header)) ?s)
(?r ,(macroexpand '(mail-header-references gnus-tmp-header)) ?s)
(?c (or (mail-header-chars gnus-tmp-header) 0) ?d)
"Return a string of TIME in YYMMDDTHHMMSS format."
(format-time-string "%Y%m%dT%H%M%S" time))
-(defun gnus-date-iso8601 (header)
- "Convert the date field in HEADER to YYMMDDTHHMMSS"
+(defun gnus-date-iso8601 (date)
+ "Convert the DATE to YYMMDDTHHMMSS"
(condition-case ()
- (gnus-time-iso8601 (gnus-date-get-time (mail-header-date header)))
+ (gnus-time-iso8601 (gnus-date-get-time date))
(error "")))
(defun gnus-mode-string-quote (string)
:link '(custom-manual "(gnus)Exiting Gnus")
:group 'gnus)
-(defconst gnus-version-number "5.6.3"
+(defconst gnus-version-number "5.6.4"
"Version number for this version of Gnus.")
(defconst gnus-version (format "Gnus v%s" gnus-version-number)
C-c C-y message-yank-original (insert current message, if any).
C-c C-q message-fill-yanked-message (fill what was yanked).
C-c C-e message-elide-region (elide the text between point and mark).
+C-c C-z message-kill-to-signature (kill the text up to the signature).
C-c C-r message-caesar-buffer-body (rot13 the message body)."
(interactive)
(kill-all-local-variables)
(deffoo nnkiboze-request-delete-group (group &optional force server)
(nnkiboze-possibly-change-group group)
(when force
- (let ((files (list (nnkiboze-nov-file-name)
- (concat nnkiboze-directory
- (nnheader-translate-file-chars
- (concat group ".newsrc")))
- (nnkiboze-score-file group))))
+ (let ((files (nconc
+ (nnkiboze-score-file group)
+ (list (nnkiboze-nov-file-name)
+ (concat nnkiboze-directory
+ (nnheader-translate-file-chars
+ (concat group ".newsrc")))))))
(while files
(and (file-exists-p (car files))
(file-writable-p (car files))
(delete-file (car files)))
(setq files (cdr files)))))
- (setq nnkiboze-current-group nil))
+ (setq nnkiboze-current-group nil)
+ t)
(nnoo-define-skeleton nnkiboze)
(goto-char (point-min))
(while (not (eobp))
(end-of-line)
- (insert "\r")
- (forward-line 1))))
+ (delete-char 1)
+ (insert nntp-end-of-line)
+ (forward-line 1))
+ (forward-char -1)
+ (unless (eq (char-after (1- (point))) ?\r)
+ (insert "\r"))))
(defun nntp-retrieve-headers-with-xover (articles &optional fetch-old)
(set-buffer nntp-server-buffer)
(apply 'start-process
"nntpd" buffer nntp-rlogin-program nntp-address
nntp-rlogin-parameters))))
- (set-buffer buffer)
- (nntp-wait-for-string "^\r*20[01]")
- (beginning-of-line)
- (delete-region (point-min) (point))
- proc))
+ (save-excursion
+ (set-buffer buffer)
+ (nntp-wait-for-string "^\r*20[01]")
+ (beginning-of-line)
+ (delete-region (point-min) (point))
+ proc)))
(defun nntp-find-group-and-number ()
(save-excursion
+Sat Mar 28 08:57:46 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.texi (Example Methods): Addition.
+
+Thu Mar 26 15:47:54 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.texi (Limiting): Mention `/ *'.
+
Thu Mar 19 13:02:20 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
* gnus.texi (NNTP): Addition.
\input texinfo @c -*-texinfo-*-
@setfilename gnus
-@settitle Gnus 5.6.3 Manual
+@settitle Gnus 5.6.4 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Gnus 5.6.3 Manual
+@title Gnus 5.6.4 Manual
@author by Lars Magne Ingebrigtsen
@page
spool or your mbox file. All at the same time, if you want to push your
luck.
-This manual corresponds to Gnus 5.6.3.
+This manual corresponds to Gnus 5.6.4.
@end ifinfo
@findex gnus-summary-limit-include-dormant
Display all dormant articles (@code{gnus-summary-limit-include-dormant}).
+@item / *
+@kindex / * (Summary)
+@findex gnus-summary-limit-include-cached
+Display all cached articles (@code{gnus-summary-limit-include-cached}).
+
@item / d
@kindex / d (Summary)
@findex gnus-summary-limit-exclude-dormant
("telnet" "the.real.nntp.host" "nntp")))
@end lisp
+If you want to use the wonderful @code{ssh} program to provide a
+compressed connection over the modem line, you could create a virtual
+server that would look something like this:
+
+@lisp
+(nntp "news"
+ (nntp-address "copper.uio.no")
+ (nntp-rlogin-program "ssh")
+ (nntp-open-connection-function nntp-open-rlogin)
+ (nntp-end-of-line "\n")
+ (nntp-rlogin-parameters
+ ("telnet" "news.uio.no" "nntp")))
+@end lisp
+
+This means that you have to have set up @code{ssh-agent} correctly to
+provide automatic authorization, of course. And to get a compressed
+connection, you have to have the @samp{Compression} option in the
+@code{ssh} @file{config} file.
@node Creating a Virtual Server
Before date.
@item a
-At date.
+After date.
@item n
This date.
Barry A. Warsaw,
Christoph Wedler,
Joe Wells,
+Katsumi Yamaoka, @c Yamaoka
and
-Katsumi Yamaoka. @c Yamaoka
+Shenghuo Zhu. @c Zhu
For a full overview of what each person has done, the ChangeLogs
included in the Gnus alpha distributions should give ample reading
* 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.3.
+* Quassia Gnus:: Two times two is four, or Gnus 5.6.4.
@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.3:
+New features in Gnus 5.6.4:
@itemize @bullet
A command to send a mail to the admin-address group param.
@item
+A Date scoring type that will match if the article
+is less than a certain number of days old.
+
+@item
Solve the halting problem.
@c TODO
\input texinfo @c -*-texinfo-*-
@setfilename message
-@settitle Message 5.6.3 Manual
+@settitle Message 5.6.4 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Message 5.6.3 Manual
+@title Message 5.6.4 Manual
@author by Lars Magne Ingebrigtsen
@page
* Key Index:: List of Message mode keys.
@end menu
-This manual corresponds to Message 5.6.3. Message is distributed with
+This manual corresponds to Message 5.6.4. Message is distributed with
the Gnus distribution bearing the same version number as this manual
has.