+Wed Aug 28 02:09:20 1996 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nnweb.el (nnweb-dejanews-create-mapping): Would just fetch the
+ first 100 hits.
+ (nnweb-close-group): Set file name to nil before killing.
+ (nnweb-altavista-create-mapping): Fetch the required number of
+ articles.
+
+ * gnus-group.el (gnus-group-read-ephemeral-group): Don't call the
+ activation several times.
+
+ * gnus-sum.el (gnus-summary-enter-digest-group): Copy the parent's
+ params to the nndoc group.
+ (gnus-summary-read-document): Ditto.
+
+ * message.el (message-followup): Would produce buggy messages when
+ replying to messages without Message-IDs.
+
+Sat Aug 10 23:41:07 1996 Per Abrahamsen <abraham@dina.kvl.dk>
+
+ * gnus.el (gnus-decode-rfc1522): Start decoding from beginning of
+ headers instead of end.
+
+Wed Aug 28 01:35:26 1996 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-demon.el (gnus-demon-cancel): Cancel function timers.
+
+ * nnheaderxm.el (nnheader-xmas-cancel-function-timers): New
+ function.
+
+ * nnheader.el (nnheader-cancel-function-timers): New alias.
+
+ * gnus-topic.el (gnus-topic-mode): Update groups.
+ (gnus-topic-remove-group): Update topic.
+
+ * gnus-group.el (gnus-group-update-group-function): New variable.
+ (gnus-group-update-group): Use it.
+
+ * gnus-topic.el (gnus-topic-update-topics-containing-group): New
+ function.
+
+Tue Aug 27 14:35:01 1996 Ken Raeburn <raeburn@cygnus.com>
+
+ * nnmail.el (nnmail-move-inbox): Don't try setting modes on
+ "po:$USER".
+
+Tue Aug 27 21:45:14 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
+
+ * gnus-sum.el (gnus-summary-number-of-articles-in-thread): Would
+ bug out on unthreadeds.
+
+Tue Aug 27 21:38:13 1996 Kurt Swanson <kurt@dna.lth.se>
+
+ * gnus-salt.el (gnus-pick-mode-map): Typo.
+
+Tue Aug 27 21:35:58 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
+
+ * gnus-load.el: Removed gnus-vis thingies.
+
+Tue Aug 27 00:54:05 1996 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.el: Red Gnus v0.17 is released.
+
Tue Aug 27 00:46:48 1996 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
* nnweb.el (nnweb-dejanews-create-mapping): Dummy function.
(not (natnump article)))
;; Not already fetched -- so we add it to the list.
(push article gnus-async-fetch-list)))
- (setq gnus-async-fetch-list (nreverse gnus-async-fetch-list))))
+ (setq gnus-async-fetch-list
+ (nreverse gnus-async-fetch-list))))
(when do-fetch
- (setq article (pop gnus-async-fetch-list))))
+ (setq article (car gnus-async-fetch-list))))
(gnus-async-release-semaphore 'gnus-async-article-semaphore))
(and gnus-demon-timer
(nnheader-cancel-timer gnus-demon-timer))
(setq gnus-demon-timer nil
- gnus-use-demon nil))
+ gnus-use-demon nil)
+ (nnheader-cancel-function-timers 'gnus-demon))
(defun gnus-demon-is-idle-p ()
"Whether Emacs is idle or not."
(defvar gnus-group-indentation-function nil)
(defvar gnus-goto-missing-group-function nil)
+(defvar gnus-group-update-group-function nil)
(defvar gnus-group-get-parameter-function 'gnus-group-get-parameter)
(defvar gnus-group-goto-next-group-function nil
"Function to override finding the next group after listing groups.")
"\C-k" gnus-group-kill-level
"z" gnus-group-kill-all-zombies))
-
(defun gnus-group-make-menu-bar ()
(gnus-turn-off-edit-menu 'group)
(unless (boundp 'gnus-group-reading-menu)
(save-excursion
(forward-line -1)
(run-hooks 'gnus-group-update-group-hook))))
+ (when gnus-group-update-group-function
+ (funcall gnus-group-update-group-function group))
(gnus-group-set-mode-line)))))
(defun gnus-group-set-mode-line ()
(gnus-group-prefixed-name group method))))
(gnus-sethash
group
- `(t nil (,group ,gnus-level-default-subscribed nil nil ,method
+ `(-1 nil (,group ,gnus-level-default-subscribed nil nil ,method
((quit-config . ,(if quit-config quit-config
(cons (current-buffer) 'summary))))))
gnus-newsrc-hashtb)
(when activate
(unless (gnus-request-group group)
(error "Couldn't request group: %s"
- (nnheader-get-report (car method)))))
+ (nnheader-get-report (car method))))
+ (gnus-activate-group group nil t))
(if request-only
group
(condition-case ()
("gnus-mh" gnus-mh-mail-setup gnus-summary-save-article-folder
gnus-Folder-save-name gnus-folder-save-name)
("gnus-mh" :interactive t gnus-summary-save-in-folder)
- ("gnus-vis" gnus-group-make-menu-bar gnus-summary-make-menu-bar
- gnus-server-make-menu-bar gnus-article-make-menu-bar
- gnus-browse-make-menu-bar gnus-highlight-selected-summary
- gnus-summary-highlight-line gnus-carpal-setup-buffer
- gnus-group-highlight-line
- gnus-article-add-button gnus-insert-next-page-button
- gnus-insert-prev-page-button gnus-visual-turn-off-edit-menu)
- ("gnus-vis" :interactive t
- gnus-article-push-button gnus-article-press-button
- gnus-article-highlight gnus-article-highlight-some
- gnus-article-highlight-headers gnus-article-highlight-signature
- gnus-article-add-buttons gnus-article-add-buttons-to-head
- gnus-article-next-button gnus-article-prev-button)
("gnus-demon" gnus-demon-add-nocem gnus-demon-add-scanmail
gnus-demon-add-disconnection gnus-demon-add-handler
gnus-demon-remove-handler)
("gnus-demon" :interactive t
gnus-demon-init gnus-demon-cancel)
("gnus-salt" gnus-highlight-selected-tree gnus-possibly-generate-tree
- gnus-tree-open gnus-tree-close)
+ gnus-tree-open gnus-tree-close gnus-carpal-setup-buffer)
("gnus-nocem" gnus-nocem-scan-groups gnus-nocem-close
gnus-nocem-unwanted-article-p)
("gnus-srvr" gnus-enter-server-buffer gnus-server-set-info)
(if post
(message-news (or to-group group))
(set-buffer gnus-article-copy)
- (message-followup))
+ (message-followup to-group))
;; The is mail.
(if post
(progn
"b" gnus-uu-mark-buffer
"B" gnus-uu-unmark-buffer
"." gnus-pick-article
- gnus-mouse-2 gnus-pick-pick-article
+ gnus-mouse-2 gnus-mouse-pick-article
"\r" gnus-pick-start-reading))
(defun gnus-pick-make-menu-bar ()
(let* ((number
;; Fix by Luc Van Eycken <Luc.VanEycken@esat.kuleuven.ac.be>.
(cond
+ ((not (listp thread))
+ 1)
((and (consp thread) (cdr thread))
(apply
'+ 1 (mapcar
(interactive "P")
(gnus-set-global-variables)
(gnus-summary-select-article)
- (let ((name (format "%s-%d"
- (gnus-group-prefixed-name
- gnus-newsgroup-name (list 'nndoc ""))
- gnus-current-article))
- (ogroup gnus-newsgroup-name)
- (case-fold-search t)
- (buf (current-buffer))
- dig)
+ (let* ((name (format "%s-%d"
+ (gnus-group-prefixed-name
+ gnus-newsgroup-name (list 'nndoc ""))
+ gnus-current-article))
+ (ogroup gnus-newsgroup-name)
+ (params (append (gnus-info-params (gnus-get-info ogroup))
+ (list (cons 'to-group ogroup))))
+ (case-fold-search t)
+ (buf (current-buffer))
+ dig)
(save-excursion
(setq dig (nnheader-set-temp-buffer " *gnus digest buffer*"))
(insert-buffer-substring gnus-original-article-buffer)
,(get-buffer dig))
(nndoc-article-type ,(if force 'digest 'guess))) t)
;; Make all postings to this group go to the parent group.
- (nconc (gnus-info-params (gnus-get-info name))
- (list (cons 'to-group ogroup)))
+ (gnus-info-set-params (gnus-get-info name) params)
;; Couldn't select this doc group.
(switch-to-buffer buf)
(gnus-set-global-variables)
"Open a new group based on the current article(s).
Obeys the standard process/prefix convention."
(interactive "P")
- (let ((articles (gnus-summary-work-articles n))
- (ogroup gnus-newsgroup-name)
- article group egroup groups vgroup)
+ (let* ((articles (gnus-summary-work-articles n))
+ (ogroup gnus-newsgroup-name)
+ (params (append (gnus-info-params (gnus-get-info ogroup))
+ (list (cons 'to-group ogroup))))
+ article group egroup groups vgroup)
(while (setq article (pop articles))
(setq group (format "%s-%d" gnus-newsgroup-name gnus-current-article))
(gnus-summary-remove-process-mark article)
t nil t))
(progn
;; Make all postings to this group go to the parent group.
- (nconc (gnus-info-params (gnus-get-info egroup))
- (list (cons 'to-group ogroup)))
+ (gnus-info-set-params (gnus-get-info name) params)
(push egroup groups))
;; Couldn't select this doc group.
(gnus-error 3 "Article couldn't be entered"))))))
'gnus-active active-topic
'gnus-topic-visible visiblep))))
+(defun gnus-topic-update-topics-containing-group (group)
+ "Update all topics that have GROUP as a member."
+ (when (and (eq major-mode 'gnus-group-mode)
+ gnus-topic-mode)
+ (save-excursion
+ (let ((alist gnus-topic-alist))
+ ;; This is probably not entirely correct. If a topic
+ ;; isn't shown, then it's not updated. But the updating
+ ;; should be performed in any case, since the topic's
+ ;; parent should be updated. Pfft.
+ (while alist
+ (when (and (member group (cdar alist))
+ (gnus-topic-goto-topic (caar alist)))
+ (gnus-topic-update-topic-line (caar alist)))
+ (pop alist))))))
+
(defun gnus-topic-update-topic ()
"Update all parent topics to the current group."
(when (and (eq major-mode 'gnus-group-mode)
gnus-topic-mode)
(let ((group (gnus-group-group-name))
(buffer-read-only nil))
- (when (and group (gnus-get-info group)
+ (when (and group
+ (gnus-get-info group)
(gnus-topic-goto-topic (gnus-current-topic)))
(gnus-topic-update-topic-line (gnus-group-topic-name))
(gnus-group-goto-group group)
minor-mode-map-alist))
(add-hook 'gnus-summary-exit-hook 'gnus-topic-update-topic)
(add-hook 'gnus-group-catchup-group-hook 'gnus-topic-update-topic)
- (add-hook 'gnus-group-update-group-hook 'gnus-topic-update-topic)
(set (make-local-variable 'gnus-group-prepare-function)
'gnus-group-prepare-topics)
(set (make-local-variable 'gnus-group-get-parameter-function)
'gnus-topic-goto-next-group)
(set (make-local-variable 'gnus-group-indentation-function)
'gnus-topic-group-indentation)
+ (set (make-local-variable 'gnus-group-update-group-function)
+ 'gnus-topic-update-topics-containing-group)
(setq gnus-group-change-level-function 'gnus-topic-change-level)
(setq gnus-goto-missing-group-function 'gnus-topic-goto-missing-group)
(gnus-make-local-hook 'gnus-check-bogus-groups-hook)
(when (and topicl group)
(gnus-delete-line)
(gnus-delete-first group topicl))
+ (gnus-topic-update-topic)
(gnus-group-position-point)))
(defun gnus-topic-copy-group (n topic)
(eval '(run-hooks 'gnus-load-hook))
-(defconst gnus-version-number "0.17"
+(defconst gnus-version-number "0.18"
"Version number for this version of Gnus.")
(defconst gnus-version (format "Red Gnus v%s" gnus-version-number)
;;;###autoload
(defun message-wide-reply (&optional to-address)
+ "Make a \"wide\" reply to the message in the current buffer."
(interactive)
(message-reply to-address t))
;;;###autoload
-(defun message-followup ()
+(defun message-followup (&optional to-newsgroups)
+ "Follow up to the message in the current buffer.
+If TO-NEWSGROUPS, use that as the new Newsgroups line."
(interactive)
(let ((cur (current-buffer))
from subject date reply-to mct
(message-setup
`((Subject . ,subject)
,@(cond
+ (to-newsgroups
+ (list (cons 'Newsgroups to-newsgroups)))
(follow-to follow-to)
((and followup-to message-use-followup-to)
(list
(t
`((Newsgroups . ,newsgroups))))
,@(and distribution (list (cons 'Distribution distribution)))
- (References . ,(concat (or references "") (and references " ")
- (or message-id "")))
+ ,@(if (or references message-id)
+ `((References . ,(concat (or references "") (and references " ")
+ (or message-id "")))))
,@(when (and mct
(not (equal (downcase mct) "never")))
(list (cons 'Cc (if (equal (downcase mct) "always")
(fset 'nnheader-run-at-time 'run-at-time)
(fset 'nnheader-cancel-timer 'cancel-timer)
+(fset 'nnheader-cancel-function-timers 'cancel-function-timers)
(fset 'nnheader-find-file-noselect 'find-file-noselect)
(fset 'nnheader-insert-file-contents-literally
'insert-file-contents-literally)
(defun nnheader-xmas-cancel-timer (timer)
(delete-itimer timer))
+(defun nnheader-xmas-cancel-function-timers (function)
+ )
+
;; Written by Erik Naggum <erik@naggum.no>.
;; Saved by Steve Baur <steve@miranova.com>.
(defun nnheader-xmas-insert-file-contents-literally (filename &optional visit beg end replace)
(fset 'nnheader-run-at-time 'nnheader-xmas-run-at-time)
(fset 'nnheader-cancel-timer 'nnheader-xmas-cancel-timer)
+(fset 'nnheader-cancel-function-timers 'nnheader-xmas-cancel-function-timers)
(fset 'nnheader-find-file-noselect 'nnheader-xmas-find-file-noselect)
(fset 'nnheader-insert-file-contents-literally
(if (fboundp 'insert-file-contents-literally)
(if (not (buffer-modified-p errors))
;; No output => movemail won
(progn
- (set-file-modes inbox nnmail-default-file-modes)
+ (or popmail
+ (set-file-modes inbox nnmail-default-file-modes))
(push inbox nnmail-moved-inboxes))
(set-buffer errors)
;; There may be a warning about older revisions. We
(goto-char (point-min))
(if (search-forward "older revision" nil t)
(progn
- (set-file-modes inbox nnmail-default-file-modes)
+ (or popmail
+ (set-file-modes inbox nnmail-default-file-modes))
(push inbox nnmail-moved-inboxes))
;; Probably a real error.
(subst-char-in-region (point-min) (point-max) ?\n ?\ )
(deffoo nnweb-close-group (group &optional server)
(nnweb-possibly-change-server server)
- (gnus-kill-buffer nnweb-buffer)
+ (when (gnus-buffer-live-p nnweb-buffer)
+ (save-excursion
+ (set-buffer nnweb-buffer)
+ (set-buffer-modified-p nil)
+ (kill-buffer nnweb-buffer)))
t)
(deffoo nnweb-request-article (article &optional group server buffer)
t))))
(deffoo nnweb-close-server (&optional server)
- (when (nnweb-server-opened server)
- (gnus-kill-buffer nnweb-buffer))
+ (when (and (nnweb-server-opened server)
+ (gnus-buffer-live-p nnweb-buffer))
+ (save-excursion
+ (set-buffer nnweb-buffer)
+ (set-buffer-modified-p nil)
+ (kill-buffer nnweb-buffer)))
(nnoo-close-server 'nnweb server))
(deffoo nnweb-request-update-info (group info &optional server)
(while (re-search-forward "^ +[0-9]+\\." nil t)
(narrow-to-region
(point)
- (if (re-search-forward "^ +[0-9]+\\." nil t)
- (match-beginning 0)
- (point-max)))
+ (cond ((re-search-forward "^ +[0-9]+\\." nil t)
+ (match-beginning 0))
+ ((search-forward "\n\n" nil t)
+ (point))
+ (t
+ (point-max))))
(goto-char (point-min))
(when (looking-at ".*HREF=\"\\([^\"]+\\)\"")
(setq url (match-string 1)))
;; See whether there is a "Get next 20 hits" button here.
(if (or (not (re-search-forward
"HREF=\"\\([^\"]+\\)\">Get next" nil t))
- (> i nnweb-max-hits))
+ (>= i nnweb-max-hits))
(setq more nil)
;; Yup -- fetch it.
(setq more (match-string 1))
(save-excursion
(set-buffer nnweb-buffer)
(erase-buffer)
- (when (funcall (nnweb-definition 'search) nnweb-search)
- (let ((i 0)
- (more t)
- (case-fold-search t)
- subject score date newsgroups from id
- map url)
- (while more
- ;; Go through all the article hits on this page.
- (goto-char (point-min))
- (search-forward "<dt>" nil t)
- (delete-region (point-min) (match-beginning 0))
- (goto-char (point-min))
- (while (search-forward "<dt>" nil t)
- (replace-match "\n<blubb>"))
- (nnweb-decode-entities)
- (goto-char (point-min))
- (while (re-search-forward "<blubb>.*href=\"\\([^\"]+\\)\"><strong>\\([^>]*\\)</strong></a><dd>\\([^-]+\\)- <b>\\([^<]+\\)<.*href=\"news:\\([^\"]+\\)\">.*\">\\(.+\\)</a><P>"
- nil t)
- (setq url (match-string 1)
- subject (match-string 2)
- date (match-string 3)
- group (match-string 4)
- id (concat "<" (match-string 5) ">")
- from (match-string 6))
- (push
- (list
- (incf i)
- (make-full-mail-header
- i (concat "(" group ") " subject) from date
- id nil 0 0 nil)
- url)
- map))
- (setq more nil))
- ;; Return the articles in the right order.
- (setq nnweb-articles (nreverse map))))))
+ (let ((part 0))
+ (when (funcall (nnweb-definition 'search) nnweb-search part)
+ (let ((i 0)
+ (more t)
+ (case-fold-search t)
+ subject score date newsgroups from id
+ map url)
+ (while more
+ ;; Go through all the article hits on this page.
+ (goto-char (point-min))
+ (search-forward "<dt>" nil t)
+ (delete-region (point-min) (match-beginning 0))
+ (goto-char (point-min))
+ (while (search-forward "<dt>" nil t)
+ (replace-match "\n<blubb>"))
+ (nnweb-decode-entities)
+ (goto-char (point-min))
+ (while (re-search-forward "<blubb>.*href=\"\\([^\"]+\\)\"><strong>\\([^>]*\\)</strong></a><dd>\\([^-]+\\)- <b>\\([^<]+\\)<.*href=\"news:\\([^\"]+\\)\">.*\">\\(.+\\)</a><P>"
+ nil t)
+ (setq url (match-string 1)
+ subject (match-string 2)
+ date (match-string 3)
+ group (match-string 4)
+ id (concat "<" (match-string 5) ">")
+ from (match-string 6))
+ (push
+ (list
+ (incf i)
+ (make-full-mail-header
+ i (concat "(" group ") " subject) from date
+ id nil 0 0 nil)
+ url)
+ map))
+ ;; See if we want more.
+ (when (or (>= i nnweb-max-hits)
+ (not (funcall (nnweb-definition 'search)
+ nnweb-search (incf part))))
+ (setq more nil)))
+ ;; Return the articles in the right order.
+ (setq nnweb-articles (nreverse map)))))))
(defun nnweb-altavista-wash-article ()
(goto-char (point-min))
(widen)
(nnweb-remove-markup))))
-(defun nnweb-altavista-search (search)
+(defun nnweb-altavista-search (search &optional part)
(url-insert-file-contents
(concat
(nnweb-definition 'address)
(nnweb-encode-www-form-urlencoded
`(("pg" . "aq")
("what" . "news")
+ ,@(if part `(("stq" . ,(int-to-string (* part 30)))))
("fmt" . "d")
("q" . ,search)
("r" . "")
\input texinfo @c -*-texinfo-*-
@setfilename gnus
-@settitle Red Gnus 0.17 Manual
+@settitle Red Gnus 0.18 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Red Gnus 0.17 Manual
+@title Red Gnus 0.18 Manual
@author by Lars Magne Ingebrigtsen
@page