+Sat Aug 16 20:36:31 1997 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Gnus v5.4.65 is released.
+
+Sat Aug 16 20:10:09 1997 Sigbjorn Finne <sof@dcs.gla.ac.uk>
+
+ * gnus-srvr.el (gnus-browse-foreign-server): Message fix.
+
+Sat Aug 16 17:44:31 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-start.el (gnus-1): Don't read the dribble file
+ unconditionally in slaves.
+
+ * gnus-sum.el (gnus-summary-edit-article): Restore original date
+ header.
+
+ * gnus-start.el (gnus-1): Set gnus-slave earlier.
+
+ * gnus-sum.el (gnus-parent-headers): Would infloop.
+
+ * message.el (message-make-message-id): Make better Message-ID
+ when superseding.
+
+Sat Aug 16 17:36:25 1997 Jason Rumney <jasonr@pec.co.nz>
+
+ * nnkiboze.el (nnkiboze-request-delete-group): Transliate file
+ chars.
+
+Sat Aug 16 17:26:59 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nnml.el (nnml-directory): Dox fox.
+
+ * gnus-topic.el (gnus-topic-make-menu-bar): Added
+ gnus-topic-edit-parameters.
+
+Sat Aug 16 17:21:21 1997 Jay Sachs <sachs@interactive.net>
+
+ * gnus-win.el (gnus-buffer-configuration): New entry:
+ score-trace.
+
+Sat Aug 16 16:51:24 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-topic.el (gnus-topic-delete): Mark as changed.
+ (gnus-topic-change-level): Make last param optional.
+
+ * gnus-group.el (gnus-group-iterate): Make sure window is
+ selected.
+
+Sat Aug 16 16:56:23 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-topic.el (gnus-topic-check-topology): Add new groups to the
+ end of the first topic.
+
+ * gnus-cache.el (gnus-jog-cache): Use gnus-group-iterate.
+
+Wed Aug 13 22:00:07 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-start.el (gnus-gnus-to-quick-newsrc-format): Escape
+ newlines.
+
+Thu Aug 7 20:51:12 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * smiley.el (smiley-deformed-regexp-alist): Fix.
+
+Wed Jul 30 13:46:30 1997 Danny Siu <dsiu@adobe.com>
+
+ * smiley.el (smiley-buffer): make smiley case sensitive
+ (smiley-deformed-regexp-alist): added more regexp for happy smiley
+ (smiley-nosey-regexp-alist): same as above
+
+Sat Aug 2 01:48:26 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-nocem.el (gnus-nocem-close): Nix out
+ gnus-real-group-hashtb.
+
+Sat Aug 2 01:46:49 1997 roth@klondike.cse.ucsc.edu (Carl D. Roth)
+
+ * gnus-nocem.el (gnus-fill-real-hashtb): New function.
+
+Sat Aug 2 01:26:17 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-group.el (gnus-group-read-init-file): Message.
+
+Fri Jul 25 20:48:31 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nntp.el (nntp-nov-gap): Changed default.
+
+ * gnus-nocem.el (gnus-nocem-issuers): Fixed names.
+
+Wed Jul 23 20:11:24 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-sum.el (gnus-summary-catchup): Also removed cached
+ articles.
+
+ * nnvirtual.el (nnvirtual-update-xref-header): Don't double
+ Xrefs.
+
Sat Jul 19 23:32:28 1997 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
* gnus.el: Gnus v5.4.64 is released.
(gnus)
;; Go through all groups...
(gnus-group-mark-buffer)
- (gnus-group-universal-argument
- nil nil
- (lambda ()
- (interactive)
- (when (gnus-group-group-name)
- (let (gnus-auto-select-next)
- (gnus-summary-read-group (gnus-group-group-name) nil t)
- ;; ... and enter the articles into the cache.
- (when (eq major-mode 'gnus-summary-mode)
- (gnus-uu-mark-buffer)
- (gnus-cache-enter-article)
- (kill-buffer (current-buffer)))))))))
+ (gnus-group-iterate nil
+ (lambda (group)
+ (let (gnus-auto-select-next)
+ (gnus-summary-read-group group nil t)
+ ;; ... and enter the articles into the cache.
+ (when (eq major-mode 'gnus-summary-mode)
+ (gnus-uu-mark-buffer)
+ (gnus-cache-enter-article)
+ (kill-buffer (current-buffer))))))))
(defun gnus-cache-read-active (&optional force)
"Read the cache active file."
FUNCTION will be called with the group name as the paremeter
and with point over the group in question."
(let ((groups (gnus-group-process-prefix arg))
+ (window (selected-window))
group)
(while (setq group (pop groups))
+ (select-window window)
(gnus-group-remove-mark group)
- (save-excursion
- (save-selected-window
+ (save-selected-window
+ (save-excursion
(funcall function group))))))
(put 'gnus-group-iterate 'lisp-indent-function 1)
(defun gnus-group-read-init-file ()
"Read the Gnus elisp init file."
(interactive)
- (gnus-read-init-file))
+ (gnus-read-init-file)
+ (gnus-message 5 "Read %s" gnus-init-file))
(defun gnus-group-check-bogus-groups (&optional silent)
"Check bogus newsgroups.
:type '(repeat (string :tag "Group")))
(defcustom gnus-nocem-issuers
- '("AutoMoose-1" "Automoose-1" ; CancelMoose[tm]
- "rbraver@ohww.norman.ok.us" ; Robert Braver
- "clewis@ferret.ocunix.on.ca;" ; Chris Lewis
- "jem@xpat.com;" ; Despammer from Korea
- "snowhare@xmission.com" ; Benjamin "Snowhare" Franz
- "red@redpoll.mrfs.oh.us (Richard E. Depew)" ; ARMM! ARMM!
- )
+ '("AutoMoose-1" "Automoose-1" ; CancelMoose[tm]
+ "rbraver@ohww.norman.ok.us" ; Robert Braver
+ "clewis@ferret.ocunix.on.ca" ; Chris Lewis
+ "jem@xpat.com" ; Despammer from Korea
+ "snowhare@xmission.com" ; Benjamin "Snowhare" Franz
+ "red@redpoll.mrfs.oh.us (Richard E. Depew)" ; ARMM! ARMM!
+ )
"List of NoCeM issuers to pay attention to."
:group 'gnus-nocem
:type '(repeat string))
(defun gnus-nocem-cache-file ()
(concat (file-name-as-directory gnus-nocem-directory) "cache"))
+;;
+;; faster lookups for group names:
+;;
+
+(defvar gnus-nocem-real-group-hashtb nil
+ "Real-name mappings of subscribed groups.")
+
+(defun gnus-fill-real-hashtb ()
+ "Fill up a hash table with the real-name mappings from the user's
+active file."
+ (setq gnus-nocem-real-group-hashtb (gnus-make-hashtable
+ (length gnus-newsrc-alist)))
+ (mapcar (lambda (group)
+ (setq group (gnus-group-real-name (car group)))
+ (gnus-sethash group t gnus-nocem-real-group-hashtb))
+ gnus-newsrc-alist))
+
(defun gnus-nocem-scan-groups ()
"Scan all NoCeM groups for new NoCeM messages."
(interactive)
(gnus-make-directory gnus-nocem-directory)
;; Load any previous NoCeM headers.
(gnus-nocem-load-cache)
+ ;; Get the group name mappings:
+ (gnus-fill-real-hashtb)
;; Read the active file if it hasn't been read yet.
(and (file-exists-p (gnus-nocem-active-file))
(not gnus-nocem-active)
(narrow-to-region b e)
(setq issuer (mail-fetch-field "issuer"))
(widen)
+ (or (member issuer gnus-nocem-issuers)
+ (message "invalid NoCeM issuer: %s" issuer))
(and (member issuer gnus-nocem-issuers) ; We like her....
(gnus-nocem-verify-issuer issuer) ; She is who she says she is...
(gnus-nocem-enter-article) ; We gobble the message..
(set group nil))
(t
(when (gnus-gethash (gnus-group-real-name (symbol-name group))
- gnus-newsrc-hashtb)
+ gnus-nocem-real-group-hashtb)
;; Valid group.
(beginning-of-line)
(while (= (following-char) ?\t)
gnus-nocem-hashtb nil
gnus-nocem-active nil
gnus-nocem-touched-alist nil
- gnus-nocem-seen-message-ids nil))
+ gnus-nocem-seen-message-ids nil
+ gnus-nocem-real-group-hashtb nil))
(defun gnus-nocem-unwanted-article-p (id)
"Say whether article ID in the current group is wanted."
(cond
((not (gnus-check-server method))
(gnus-message
- 1 "Unable to contact server: %s" (gnus-status-message method))
+ 1 "Unable to contact server %s: %s" (nth 1 method)
+ (gnus-status-message method))
nil)
((not
(prog2
'request-regenerate (car (gnus-server-to-method server))))
(error "This backend doesn't support regeneration")
(gnus-message 5 "Requesting regeneration of %s..." server)
+ (unless (gnus-open-server server)
+ (error "Couldn't open server"))
(if (gnus-request-regenerate server)
(gnus-message 5 "Requesting regeneration of %s...done" server)
(gnus-message 5 "Couldn't regenerate %s" server)))))
(gnus-splash)
(gnus-clear-system)
(nnheader-init-server-buffer)
- (gnus-read-init-file)
(setq gnus-slave slave)
+ (gnus-read-init-file)
(when (and (string-match "XEmacs" (emacs-version))
gnus-simple-splash)
(defun gnus-gnus-to-quick-newsrc-format ()
"Insert Gnus variables such as gnus-newsrc-alist in lisp format."
- (let ((print-quoted t))
+ (let ((print-quoted t)
+ (print-escape-newlines t))
(insert ";; -*- emacs-lisp -*-\n")
(insert ";; Gnus startup file.\n")
(insert
"Return the headers of the GENERATIONeth parent of HEADERS."
(unless generation
(setq generation 1))
- (let (references parent)
- (while (and headers (not (zerop generation)))
+ (let ((parent t)
+ references)
+ (while (and parent headers (not (zerop generation)))
(setq references (mail-header-references headers))
(when (and references
(setq parent (gnus-parent-id references))
(unless (eq (gnus-summary-article-number)
gnus-current-article)
(gnus-summary-select-article t))
+ (gnus-article-date-original)
(gnus-article-edit-article
`(lambda ()
(gnus-summary-edit-article-done
(if (and not-mark
(not gnus-newsgroup-adaptive)
(not gnus-newsgroup-auto-expire)
- (not gnus-suppress-duplicates))
+ (not gnus-suppress-duplicates)
+ (or (not gnus-use-cache)
+ (not (eq gnus-use-cache 'passive))))
(progn
(when all
(setq gnus-newsgroup-marked nil
;; they belong to some topic.
(let* ((tgroups (apply 'append (mapcar (lambda (entry) (cdr entry))
gnus-topic-alist)))
- (entry (assoc (caar gnus-topic-topology) gnus-topic-alist))
+ (entry (last (assoc (caar gnus-topic-topology) gnus-topic-alist)))
(newsrc (cdr gnus-newsrc-alist))
group)
(while newsrc
(unless (member (setq group (gnus-info-group (pop newsrc))) tgroups)
- (setcdr entry (cons group (cdr entry))))))
+ (setcdr entry (list group))
+ (setq entry (cdr entry)))))
;; Go through all topics and make sure they contain only living groups.
(let ((alist gnus-topic-alist)
topic)
(push (cons topic-name (nreverse filtered-topic)) result)))
(setq gnus-topic-alist (nreverse result))))
-(defun gnus-topic-change-level (group level oldlevel previous)
+(defun gnus-topic-change-level (group level oldlevel &optional previous)
"Run when changing levels to enter/remove groups from topics."
(save-excursion
(set-buffer gnus-group-buffer)
["Create" gnus-topic-create-topic t]
["Mark" gnus-topic-mark-topic t]
["Indent" gnus-topic-indent t]
- ["Toggle hide empty" gnus-topic-toggle-display-empty-topics t])
+ ["Toggle hide empty" gnus-topic-toggle-display-empty-topics t]
+ ["Edit parameters" gnus-topic-edit-parameters t])
["List active" gnus-topic-list-active t]))))
(defun gnus-topic-mode (&optional arg redisplay)
;; Remove from alist.
(setq gnus-topic-alist (delq entry gnus-topic-alist))
;; Remove from topology.
- (gnus-topic-find-topology topic nil nil 'delete)))
+ (gnus-topic-find-topology topic nil nil 'delete)
+ (gnus-dribble-touch)))
(defun gnus-topic-rename (old-name new-name)
"Rename a topic."
(faq . gnus-faq-buffer)
(picons . "*Picons*")
(tree . gnus-tree-buffer)
+ (score-trace . "*Score Trace*")
(info . gnus-info-buffer)
(article-copy . gnus-article-copy)
(draft . gnus-draft-buffer))
:link '(custom-manual "(gnus)Exiting Gnus")
:group 'gnus)
-(defconst gnus-version-number "5.4.64"
+(defconst gnus-version-number "5.4.65"
"Version number for this version of Gnus.")
(defconst gnus-version (format "Gnus v%s" gnus-version-number)
(defun message-make-message-id ()
"Make a unique Message-ID."
(concat "<" (message-unique-id)
- (let ((psubject (save-excursion (message-fetch-field "subject"))))
- (if (and message-reply-headers
- (mail-header-references message-reply-headers)
- (mail-header-subject message-reply-headers)
- psubject
- (mail-header-subject message-reply-headers)
- (not (string=
- (message-strip-subject-re
- (mail-header-subject message-reply-headers))
- (message-strip-subject-re psubject))))
+ (let ((psubject (save-excursion (message-fetch-field "subject")))
+ (psupersedes
+ (save-excursion (message-fetch-field "supersedes"))))
+ (if (or
+ (and message-reply-headers
+ (mail-header-references message-reply-headers)
+ (mail-header-subject message-reply-headers)
+ psubject
+ (mail-header-subject message-reply-headers)
+ (not (string=
+ (message-strip-subject-re
+ (mail-header-subject message-reply-headers))
+ (message-strip-subject-re psubject))))
+ (and psupersedes
+ (string-match "_-_@" psupersedes)))
"_-_" ""))
"@" (message-make-fqdn) ">"))
(kill-buffer (current-buffer))
t))))
+(defun nnfolder-request-regenerate (server)
+ (nnfolder-possibly-change-directory nil server)
+ (nnfolder-generate-active-file)
+ t)
+
\f
;;; Internal functions.
(nnkiboze-possibly-change-group group)
(when force
(let ((files (list (nnkiboze-nov-file-name)
- (concat nnkiboze-directory group ".newsrc")
+ (concat nnkiboze-directory
+ (nnheader-translate-file-chars
+ (concat group ".newsrc")))
(nnkiboze-score-file group))))
(while files
(and (file-exists-p (car files))
(defun nnkiboze-generate-group (group)
(let* ((info (nth 2 (gnus-gethash group gnus-newsrc-hashtb)))
- (newsrc-file (concat nnkiboze-directory group ".newsrc"))
- (nov-file (concat nnkiboze-directory group ".nov"))
+ (newsrc-file (concat nnkiboze-directory
+ (nnheader-translate-file-chars
+ (concat group ".newsrc"))))
+ (nov-file (concat nnkiboze-directory
+ (nnheader-translate-file-chars
+ (concat group ".nov"))))
method nnkiboze-newsrc gname newsrc active
ginfo lowest glevel orig-info nov-buffer
;; Bind various things to nil to make group entry faster.
(nnoo-declare nnml)
(defvoo nnml-directory message-directory
- "Mail spool directory.")
+ "Spool directory for the nnml mail backend.")
(defvoo nnml-active-file
(concat (file-name-as-directory nnml-directory) "active")
none of the commands are successful, nntp will just grab headers one
by one.")
-(defvoo nntp-nov-gap 20
+(defvoo nntp-nov-gap 5
"*Maximum allowed gap between two articles.
If the gap between two consecutive articles is bigger than this
variable, split the XOVER request into two requests.")
(insert "Xref: " system-name " " group ":")
(princ article (current-buffer))
+ (insert " ")
;; If there were existing xref lines, clean them up to have the correct
;; component server prefix.
- (let ((xref-end (save-excursion
- (search-forward "\t" (gnus-point-at-eol) 'move)
- (point)))
- (len (length prefix)))
- (unless (= (point) xref-end)
+ (save-restriction
+ (narrow-to-region (point)
+ (or (search-forward "\t" (gnus-point-at-eol) t)
+ (gnus-point-at-eol)))
+ (goto-char (point-min))
+ (when (re-search-forward "Xref: *[^\n:0-9 ]+ *" nil t)
+ (replace-match "" t t))
+ (goto-char (point-min))
+ (when (re-search-forward
+ (concat (gnus-group-real-name group) ":[0-9]+")
+ nil t)
+ (replace-match "" t t))
+ (unless (= (point) (point-max))
(insert " ")
(when (not (string= "" prefix))
- (while (re-search-forward "[^ ]+:[0-9]+" xref-end t)
+ (while (re-search-forward "[^ ]+:[0-9]+" nil t)
(save-excursion
(goto-char (match-beginning 0))
- (insert prefix))
- (setq xref-end (+ xref-end len)))
- )))
+ (insert prefix))))))
;; Ensure a trailing \t.
(end-of-line)
("\\(\\^_?\\^;;\\)\\W" 1 "WideFaceAse2.xbm")
("\\(\\^_?\\^;\\)\\W" 1 "WideFaceAse1.xbm")
("\\(\\^_?\\^\\)\\W" 1 "WideFaceSmile.xbm")
- ("\\(\\;_;\\)\\W" 1 "WideFaceWeep.xbm")
- ("\\(\\T_T\\)\\W" 1 "WideFaceWeep.xbm")
+ ("\\(;_;\\)\\W" 1 "WideFaceWeep.xbm")
+ ("\\(T_T\\)\\W" 1 "WideFaceWeep.xbm")
("\\(:-*[<«]+\\)\\W" 1 "FaceAngry.xpm")
("\\(:-+\\]+\\)\\W" 1 "FaceGoofy.xpm")
("\\(:-*D\\)\\W" 1 "FaceGrinning.xpm")
("\\(:-*[)>}»]+\\)\\W" 1 "FaceHappy.xpm")
+ ("\\(=[)>»]+\\)\\W" 1 "FaceHappy.xpm")
("\\(:-*[/\\\"]\\)[^/]\\W" 1 "FaceIronic.xpm")
("\\([8|]-*[|Oo%]\\)\\W" 1 "FaceKOed.xpm")
("\\([:|]-*#+\\)\\W" 1 "FaceNyah.xpm")
("\\(:-*[({]+\\)\\W" 1 "FaceSad.xpm")
+ ("\\(=[({]+\\)\\W" 1 "FaceSad.xpm")
("\\(:-*[Oo\*]\\)\\W" 1 "FaceStartled.xpm")
("\\(:-*|\\)\\W" 1 "FaceStraight.xpm")
("\\(:-*p\\)\\W" 1 "FaceTalking.xpm")
("\\(:-+D\\)\\W" 1 "FaceGrinning.xpm")
("\\(:-+[}»]+\\)\\W" 1 "FaceHappy.xpm")
("\\(:-*)+\\)\\W" 1 "FaceHappy.xpm")
+ ("\\(=[)>]+\\)\\W" 1 "FaceHappy.xpm")
("\\(:-+[/\\\"]+\\)\\W" 1 "FaceIronic.xpm")
("\\([8|]-+[|Oo%]\\)\\W" 1 "FaceKOed.xpm")
("\\([:|]-+#+\\)\\W" 1 "FaceNyah.xpm")
("\\(:-+[({]+\\)\\W" 1 "FaceSad.xpm")
+ ("\\(=[({]+\\)\\W" 1 "FaceSad.xpm")
("\\(:-+[Oo\*]\\)\\W" 1 "FaceStartled.xpm")
("\\(:-+|\\)\\W" 1 "FaceStraight.xpm")
("\\(:-+p\\)\\W" 1 "FaceTalking.xpm")
(alist (if (symbolp smiley-regexp-alist)
(symbol-value smiley-regexp-alist)
smiley-regexp-alist))
+ (case-fold-search nil)
entry regexp beg group file)
(goto-char (or st (point-min)))
(setq beg (point))
\input texinfo @c -*-texinfo-*-
@setfilename gnus
-@settitle Gnus 5.4.64 Manual
+@settitle Gnus 5.4.65 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Gnus 5.4.64 Manual
+@title Gnus 5.4.65 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.4.64.
+This manual corresponds to Gnus 5.4.65.
@end ifinfo
@code{XOVER} request is split into several request. Note that if your
network is fast, setting this variable to a really small number means
that fetching will probably be slower. If this variable is @code{nil},
-@code{nntp} will never split requests.
+@code{nntp} will never split requests. The default is 5.
@item nntp-prepare-server-hook
@vindex nntp-prepare-server-hook
names, of course.
This might be an opportune moment to mention @code{ange-ftp} (and its
-successor @code{ecf}), that most wonderful of all wonderful Emacs
+successor @code{efs}), that most wonderful of all wonderful Emacs
packages. When I wrote @code{nndir}, I didn't think much about it---a
backend to read directories. Big deal.
@code{summary-faq}, @code{edit-group}, @code{edit-server},
@code{edit-score}, @code{post}, @code{reply}, @code{forward},
@code{reply-yank}, @code{mail-bounce}, @code{draft}, @code{pipe},
-@code{bug}, @code{compose-bounce}.
+@code{bug}, @code{compose-bounce}, and @code{score-trace}.
Note that the @code{message} key is used for both
@code{gnus-group-mail} and @code{gnus-summary-mail-other-window}. If
\input texinfo @c -*-texinfo-*-
@setfilename message
-@settitle Message 5.4.64 Manual
+@settitle Message 5.4.65 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Message 5.4.64 Manual
+@title Message 5.4.65 Manual
@author by Lars Magne Ingebrigtsen
@page
* Key Index:: List of Message mode keys.
@end menu
-This manual corresponds to Message 5.4.64. Message is distributed with
+This manual corresponds to Message 5.4.65. Message is distributed with
the Gnus distribution bearing the same version number as this manual
has.
@item message-setup-hook
@vindex message-setup-hook
-Hook run as the last thing when the message buffer has been initialized.
+Hook run as the last thing when the message buffer has been initialized,
+but before yanked text is inserted.
@item message-header-setup-hook
@vindex message-header-setup-hook
on the lines.
* `L M' command for lowering a moron in the all.SCORE file.
+
+* gnus-fetch-old-headers `invisible' -- just fetch the headers,
+do the threading and then exclude all the fetched headers.
+
+* check posting via msnews.microsoft.com.
+
+* use run-with-idle-timer for gnus-demon instead of the
+home-brewed stuff for better reliability.