+lispdir = @lispdir@
srcdir = @srcdir@
@SET_MAKE@
-EMACS = emacs
+EMACS = @EMACS@
XEMACS = xemacs
all: lick info
lick:
- cd lisp && $(MAKE) EMACS=$(EMACS) all
+ cd lisp && $(MAKE) EMACS=$(EMACS) lispdir=$(lispdir) all
install:
- cd lisp && $(MAKE) EMACS=$(EMACS) install
+ cd lisp && $(MAKE) EMACS=$(EMACS) lispdir=$(lispdir) install
cd texi && $(MAKE) EMACS=$(EMACS) install
# Rule for Lars and nobody else.
+Fri Apr 24 21:32:14 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Gnus v5.6.5 is released.
+
+Fri Apr 24 21:19:21 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-msg.el (gnus-post-method): Doc fix.
+ (gnus-post-method): Reversed semantics.
+
+1998-04-01 Jan Vroonhof <vroonhof@math.ethz.ch>
+
+ * gnus-msg.el (gnus-post-method): Customized. Added 'native
+ option. In the function, added support for new value.
+
+Fri Apr 24 20:04:15 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nnmbox.el (nnmbox-request-create-group): New function.
+
+Sun Apr 12 07:55:16 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-agent.el (gnus-agent-save-group-info): Only do those that
+ are covered.
+
+Tue Apr 7 11:26:31 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nntp.el (nntp-authinfo-file): Doc fix.
+
+1998-03-31 Ken Raeburn <raeburn@cygnus.com>
+
+ * nnml.el (nnml-request-expire-articles): Sort active-articles,
+ then only expire the intersection of that set with the requested
+ articles.
+
+Wed Apr 1 16:01:44 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * message.el (message-supersede): Check Sender.
+ (message-cancel-news): Fix Sender check.
+
+Sun Mar 29 11:54:33 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nnkiboze.el (nnkiboze-generate-group): Would mess up newsrs
+ hashtb.
+ (nnkiboze-enter-nov): Created bogus Xrefs headers.
+
+ * gnus-agent.el (gnus-agent-save-group-info): New function.
+
+ * gnus-start.el (gnus-get-unread-articles): Use it.
+
+ * message.el (message-expand-group): Allow completion from in the
+ middle of strings.
+ (message-font-lock-keywords): Work when mail-header-separator is
+ "".
+
Sun Mar 29 09:56:00 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
* gnus.el: Gnus v5.6.4 is released.
(when (file-exists-p (gnus-agent-lib-file "active"))
(delete-file (gnus-agent-lib-file "active"))))
+(defun gnus-agent-save-group-info (method group active)
+ (when (gnus-agent-method-p method)
+ (let* ((gnus-command-method method)
+ (file (gnus-agent-lib-file "active")))
+ (gnus-make-directory (file-name-directory file))
+ (nnheader-temp-write file
+ (insert-file-contents file)
+ (goto-char (point-min))
+ (when (re-search-forward "^" (regexp-quote group) " " nil t)
+ (gnus-delete-line))
+ (insert group " " (number-to-string (cdr active)) " "
+ (number-to-string (car active)) "\n")))))
+
(defun gnus-agent-group-path (group)
"Translate GROUP into a path."
(if nnmail-use-long-file-names
(require 'message)
(require 'gnus-art)
-;; Added by Sudish Joseph <joseph@cis.ohio-state.edu>.
-(defvar gnus-post-method nil
+(defcustom gnus-post-method nil
"*Preferred method for posting USENET news.
-If this variable is nil, Gnus will use the current method to decide
-which method to use when posting. If it is non-nil, it will override
-the current method. This method will not be used in mail groups and
-the like, only in \"real\" newsgroups.
-The value must be a valid method as discussed in the documentation of
-`gnus-select-method'. It can also be a list of methods. If that is
-the case, the user will be queried for what select method to use when
-posting.")
+If this variable is `current', Gnus will use the \"current\" select
+method when posting. If it is nil (which is the default), Gnus will
+use the native posting method of the server.
+
+This method will not be used in mail groups and the like, only in
+\"real\" newsgroups.
+
+If not nil nor `native', the value must be a valid method as discussed
+in the documentation of `gnus-select-method'. It can also be a list of
+methods. If that is the case, the user will be queried for what select
+method to use when posting."
+ :group 'gnus-group-foreign
+ :type `(choice (const nil)
+ (const native)
+ (sexp :tag "Methods" ,gnus-select-method)))
(defvar gnus-outgoing-message-group nil
"*All outgoing messages will be put in this group.
;; If the group-method is nil (which shouldn't happen) we use
;; the default method.
((null group-method)
- (or gnus-post-method gnus-select-method message-post-method))
- ;; We want this group's method.
+ (or (and (null (eq gnus-post-method 'active)) gnus-post-method)
+ gnus-select-method message-post-method))
+ ;; We want the inverse of the default
((and arg (not (eq arg 0)))
- group-method)
+ (if (eq gnus-post-method 'active)
+ gnus-select-method
+ group-method))
;; We query the user for a post method.
((or arg
(and gnus-post-method
+ (not (eq gnus-post-method 'current))
(listp (car gnus-post-method))))
(let* ((methods
;; Collect all methods we know about.
(append
- (when gnus-post-method
+ (when (and gnus-post-method
+ (not (eq gnus-post-method 'current)))
(if (listp (car gnus-post-method))
gnus-post-method
(list gnus-post-method)))
(cons (or gnus-last-posting-server "") 0))))
method-alist))))
;; Override normal method.
+ ((eq gnus-post-method 'current)
+ group-method)
(gnus-post-method
gnus-post-method)
;; Use the normal select method.
info (inline (gnus-find-method-for-group
(gnus-info-group info)))))
(gnus-activate-group (gnus-info-group info) nil t))
+
(let* ((range (gnus-info-read info))
(num 0))
;; If a cache is present, we may have to alter the active info.
;; These groups are foreign. Check the level.
(when (<= (gnus-info-level info) foreign-level)
(setq active (gnus-activate-group group 'scan))
+ ;; Let the Gnus agent save the active file.
+ (when (and gnus-agent gnus-plugged)
+ (gnus-agent-save-group-info
+ method (gnus-group-real-name group) active))
(unless (inline (gnus-virtual-group-p group))
(inline (gnus-close-group group)))
(when (fboundp (intern (concat (symbol-name (car method))
(defun gnus-ignored-newsgroups-has-to-p ()
- "T only when gnus-ignored-newsgroups includes \"^to\\\\.\" as an element."
+ "Non-nil iff gnus-ignored-newsgroups includes \"^to\\\\.\" as an element."
;; note this regexp is the same as:
;; (concat (regexp-quote "^to\\.") "\\($\\|" (regexp-quote "\\|") "\\)")
- (string-match "\\^to\\\\\\.\\($\\|\\\\|\\)"
- gnus-ignored-newsgroups))
+ (string-match "\\^to\\\\\\.\\($\\|\\\\|\\)" gnus-ignored-newsgroups))
;; Read an active file and place the results in `gnus-active-hashtb'.
(defun gnus-active-to-gnus-format (&optional method hashtb ignore-errors
(gnus-summary-copy-article n nil method)))
(defun gnus-summary-import-article (file)
- "Import a random file into a mail newsgroup."
+ "Import an arbitrary file into a mail newsgroup."
(interactive "fImport file: ")
(let ((group gnus-newsgroup-name)
(now (current-time))
;; This package allows arbitrary undoing in Gnus buffers. As all the
;; Gnus buffers aren't very text-oriented (what is in the buffers is
-;; just some random representation of the actual data), normal Emacs
+;; just some arbitrary representation of the actual data), normal Emacs
;; undoing doesn't work at all for Gnus.
;;
;; This package works by letting Gnus register functions for reversing
:link '(custom-manual "(gnus)Exiting Gnus")
:group 'gnus)
-(defconst gnus-version-number "5.6.4"
+(defconst gnus-version-number "5.6.5"
"Version number for this version of Gnus.")
(defconst gnus-version (format "Gnus v%s" gnus-version-number)
("gnus-agent" gnus-open-agent gnus-agent-get-function
gnus-agent-save-groups gnus-agent-save-active gnus-agent-method-p
gnus-agent-get-undownloaded-list gnus-agent-fetch-session
- gnus-summary-set-agent-mark)
+ gnus-summary-set-agent-mark gnus-agent-save-group-info)
("gnus-agent" :interactive t
gnus-unplugged gnus-agentize gnus-agent-batch)
("gnus-vm" :interactive t gnus-summary-save-in-vm
(,(concat "^\\(X-[A-Za-z0-9-]+\\|In-Reply-To\\):" content)
(1 'message-header-name-face)
(2 'message-header-name-face))
- (,(concat "^\\(" (regexp-quote mail-header-separator) "\\)$")
- 1 'message-separator-face)
+ ,@(if (and mail-header-separator
+ (not (equal mail-header-separator "")))
+ `((,(concat "^\\(" (regexp-quote mail-header-separator) "\\)$")
+ 1 'message-separator-face))
+ nil)
(,(concat "^[ \t]*"
"\\([" cite-prefix "]+[" cite-suffix "]*\\)?"
"[:>|}].*")
(unless (string-equal
(downcase
(or sender (cadr (mail-extract-address-components from))))
- (downcase (message-make-address)))
+ (downcase (message-make-sender)))
(error "This article is not yours"))
;; Make control message.
(setq buf (set-buffer (get-buffer-create " *message cancel*")))
(let ((cur (current-buffer)))
;; Check whether the user owns the article that is to be superseded.
(unless (string-equal
- (downcase (cadr (mail-extract-address-components
- (message-fetch-field "from"))))
- (downcase (message-make-address)))
+ (downcase (or (message-fetch-field "sender")
+ (cadr (mail-extract-address-components
+ (message-fetch-field "from")))))
+ (downcase (message-make-sender)))
(error "This article is not yours"))
;; Get a normal message buffer.
(message-pop-to-buffer (message-buffer-name "supersede"))
(defvar gnus-active-hashtb)
(defun message-expand-group ()
- "Expand the group name under point." (let* ((b (save-excursion
+ "Expand the group name under point."
+ (let* ((b (save-excursion
(save-restriction
(narrow-to-region
(save-excursion
(point))
(skip-chars-backward "^, \t\n") (point))))
(completion-ignore-case t)
- (string (buffer-substring b (point)))
+ (string (buffer-substring b (progn (skip-chars-forward "^,\t\n ")
+ (point))))
(hashtb (and (boundp 'gnus-active-hashtb) gnus-active-hashtb))
(completions (all-completions string hashtb))
(cur (current-buffer))
(nnmail-activate 'nnbabyl)
(unless (assoc group nnbabyl-group-alist)
(push (list group (cons 1 0))
- nnbabyl-group-alist)
+ nnbabyl-group-alist)
(nnmail-save-active nnbabyl-group-alist nnbabyl-active-file))
t)
-;;; nneething.el --- random file access for Gnus
+;;; nneething.el --- arbitrary file access for Gnus
;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
(save-excursion
(set-buffer nntp-server-buffer)
(erase-buffer)
+ (unless (file-exists-p nov-file)
+ (nnkiboze-request-scan group))
(if (not (file-exists-p nov-file))
(nnheader-report 'nnkiboze "Can't select group %s" group)
(nnheader-insert-file-contents nov-file)
(gnus-verbose (min gnus-verbose 3))
gnus-select-group-hook gnus-summary-prepare-hook
gnus-thread-sort-functions gnus-show-threads
- gnus-visual gnus-suppress-duplicates)
+ gnus-visual gnus-suppress-duplicates num-unread)
(unless info
(error "No such group: %s" group))
;; Load the kiboze newsrc file for this group.
(gnus-group-jump-to-group (caar newsrc))
(gnus-message 3 "nnkiboze: Checking %s..." (caar newsrc))
(setq ginfo (gnus-get-info (gnus-group-group-name))
- orig-info (gnus-copy-sequence ginfo))
+ orig-info (gnus-copy-sequence ginfo)
+ num-unread (car (gnus-gethash (caar newsrc)
+ gnus-newsrc-hashtb)))
(unwind-protect
(progn
;; We set all list of article marks to nil. Since we operate
gnus-newsgroup-name))
(setq gnus-newsgroup-scored (cdr gnus-newsgroup-scored)))
;; That's it. We exit this group.
- (gnus-summary-exit-no-update)))
+ (when (eq major-mode 'gnus-summary-mode)
+ (kill-buffer (current-buffer)))))
;; Restore the proper info.
(when ginfo
- (setcdr ginfo (cdr orig-info)))))
+ (setcdr ginfo (cdr orig-info)))
+ (setcar (gnus-gethash (caar newsrc) gnus-newsrc-hashtb)
+ num-unread)))
(setcdr (car newsrc) (car active))
(gnus-message 3 "nnkiboze: Checking %s...done" (caar newsrc))
(setq newsrc (cdr newsrc))))
(nnheader-temp-write newsrc-file
(insert "(setq nnkiboze-newsrc '")
(gnus-prin1 nnkiboze-newsrc)
- (insert ")\n"))
- t))
+ (insert ")\n")))
+ (save-excursion
+ (set-buffer gnus-group-buffer)
+ (gnus-group-list-groups))
+ t)
(defun nnkiboze-enter-nov (buffer header group)
(save-excursion
;; The first Xref has to be the group this article
;; really came for - this is the article nnkiboze
;; will request when it is asked for the article.
- (insert group ":"
+ (insert " " group ":"
(int-to-string (mail-header-number header)) " ")
(while (re-search-forward " [^ ]+:[0-9]+" nil t)
(goto-char (1+ (match-beginning 0)))
;;; nnmbox.el --- mail mbox access for Gnus
;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-;; Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
-;; Keywords: news, mail
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
+;; Author: Lars Magne Ingebrignnmbox2, or (at your option)
;; any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
(deffoo nnmbox-close-group (group &optional server)
t)
+(deffoo nnmbox-request-create-group (group &optional server args)
+ (nnmail-activate 'nnmbox)
+ (unless (assoc group nnmbox-group-alist)
+ (push (list group (cons 1 0))
+ nnmbox-group-alist)
+ (nnmail-save-active nnmbox-group-alist nnmbox-active-file))
+ t)
+
(deffoo nnmbox-request-list (&optional server)
(save-excursion
(nnmail-find-file nnmbox-active-file)
article rest mod-time number)
(nnmail-activate 'nnml)
+ (setq active-articles (sort active-articles '<))
+ ;; Articles not listed in active-articles are already gone,
+ ;; so don't try to expire them.
+ (setq articles (gnus-sorted-intersection articles active-articles))
+
(while (and articles is-old)
(when (setq article (nnml-article-to-file (setq number (pop articles))))
(when (setq mod-time (nth 5 (file-attributes article)))
"*Coding system to write to NNTP.")
(defcustom nntp-authinfo-file "~/.authinfo"
- "Docstring."
+ ".netrc-like file that holds nntp authinfo passwords."
:type
'(choice file
(repeat :tag "Entries"
+Fri Apr 24 16:00:40 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.texi (Unread Articles): Typo.
+ (Summary Buffer Lines): Fix.
+ (Foreign Groups): Addition.
+ (Posting Server): Addition.
+
Sat Mar 28 08:57:46 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
* gnus.texi (Example Methods): Addition.
install:
$(SHELL) $(top_srcdir)/mkinstalldirs $(infodir)
@for file in gnus message; do \
- for ifile in `cd $$d && echo $$file $$file-[0-9] $$file-[0-9][0-9]`; do \
+ for ifile in `echo $$file $$file-[0-9] $$file-[0-9][0-9]`; do \
if test -f $$ifile; then \
- echo " $(INSTALL_DATA) $$d/$$ifile $(infodir)/$$ifile"; \
+ echo " $(INSTALL_DATA) $$ifile $(infodir)/$$ifile"; \
$(INSTALL_DATA) $$ifile $(infodir)/$$ifile; \
else : ; fi; \
done; \
\input texinfo @c -*-texinfo-*-
@setfilename gnus
-@settitle Gnus 5.6.4 Manual
+@settitle Gnus 5.6.5 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Gnus 5.6.4 Manual
+@title Gnus 5.6.5 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.4.
+This manual corresponds to Gnus 5.6.5.
@end ifinfo
include @code{dejanews}, @code{altavista} and @code{reference}.
@xref{Web Searches}.
+If you use the @code{dejanews} search engine, you can limit the search
+to a particular group by using a match string like
+@samp{~g alt.sysadmin.recovery shaving}.
+
@item G DEL
@kindex G DEL (Group)
@findex gnus-group-delete-group
Twenty minus thread level spaces.
@item U
Unread.
+
@item R
-Replied.
+This misleadingly named specifier is the @dfn{secondary mark}. This
+mark will say whether the article has been replied to, has been cached,
+or has been saved.
+
@item i
Score as a number (@pxref{Scoring}).
@item z
@item SPACE
@vindex gnus-unread-mark
-Markes as unread (@code{gnus-unread-mark}).
+Marked as unread (@code{gnus-unread-mark}).
@dfn{Unread articles} are articles that haven't been read at all yet.
@end table
@item M P R
@kindex M P R (Summary)
@findex gnus-uu-mark-by-regexp
-Mark articles by a regular expression (@code{gnus-uu-mark-by-regexp}).
+Mark articles that have a @code{Subject} header that matches a regular
+expression (@code{gnus-uu-mark-by-regexp}).
@item M P r
@kindex M P r (Summary)
If that's the case, Gnus will always prompt you for what method to use
for posting.
+Finally, if you want to always post using the same select method as
+you're reading from (which might be convenient if you're reading lots of
+groups from different private servers), you can set this variable to
+@code{current}.
+
@node Mail and Post
@section Mail and Post
by the @code{nntp-maximum-request} variable, and is 400 by default. If
your network is buggy, you should set this to 1.
-@item nntp-connection-timeout
-@vindex nntp-connection-timeout
-If you have lots of foreign @code{nntp} groups that you connect to
-regularly, you're sure to have problems with @sc{nntp} servers not
-responding properly, or being too loaded to reply within reasonable
-time. This is can lead to awkward problems, which can be helped
-somewhat by setting @code{nntp-connection-timeout}. This is an integer
-that says how many seconds the @code{nntp} backend should wait for a
-connection before giving up. If it is @code{nil}, which is the default,
-no timeouts are done.
-
+@c @item nntp-connection-timeout
+@c @vindex nntp-connection-timeout
+@c If you have lots of foreign @code{nntp} groups that you connect to
+@c regularly, you're sure to have problems with @sc{nntp} servers not
+@c responding properly, or being too loaded to reply within reasonable
+@c time. This is can lead to awkward problems, which can be helped
+@c somewhat by setting @code{nntp-connection-timeout}. This is an integer
+@c that says how many seconds the @code{nntp} backend should wait for a
+@c connection before giving up. If it is @code{nil}, which is the default,
+@c no timeouts are done.
+@c
@c @item nntp-command-timeout
@c @vindex nntp-command-timeout
@c @cindex PPP connections
* 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.4.
+* Quassia Gnus:: Two times two is four, or Gnus 5.6.5.
@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.4:
+New features in Gnus 5.6.5:
@itemize @bullet
is less than a certain number of days old.
@item
+New spec: %~(tab 56) to put point on column 56
+
+@item
+Allow Gnus Agent scoring to use normal score files.
+
+@item
Solve the halting problem.
@c TODO
\input texinfo @c -*-texinfo-*-
@setfilename message
-@settitle Message 5.6.4 Manual
+@settitle Message 5.6.5 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Message 5.6.4 Manual
+@title Message 5.6.5 Manual
@author by Lars Magne Ingebrigtsen
@page
* Key Index:: List of Message mode keys.
@end menu
-This manual corresponds to Message 5.6.4. Message is distributed with
+This manual corresponds to Message 5.6.5. Message is distributed with
the Gnus distribution bearing the same version number as this manual
has.