From 3b56017aeaefcdfd09f24c45e44308995f646ae6 Mon Sep 17 00:00:00 2001 From: shuhei-k Date: Sat, 22 Aug 1998 20:54:01 +0000 Subject: [PATCH] Sync up with Gnus 5.6.39. --- ChangeLog | 6 +++ lisp/ChangeLog | 136 ++++++++++++++++++++++++++++++++++++++++++++++ lisp/gnus-agent.el | 20 ++++--- lisp/gnus-art.el | 28 +++++++--- lisp/gnus-cite.el | 1 + lisp/gnus-ems.el | 1 + lisp/gnus-group.el | 13 +++-- lisp/gnus-int.el | 2 +- lisp/gnus-msg.el | 151 ++++++++++++++++++++++++++++++---------------------- lisp/gnus-score.el | 4 +- lisp/gnus-start.el | 21 +++++--- lisp/gnus-sum.el | 14 ++--- lisp/gnus-topic.el | 9 ++-- lisp/gnus-uu.el | 3 +- lisp/gnus.el | 14 +++-- lisp/message.el | 10 ++-- lisp/messcompat.el | 5 ++ lisp/nndoc.el | 16 +++--- lisp/nneething.el | 12 ++--- lisp/nnmail.el | 3 +- lisp/nntp.el | 20 ++++++- lisp/nnweb.el | 4 +- texi/ChangeLog | 13 +++++ texi/gnus.texi | 58 +++++++++++++------- texi/message.texi | 7 +++ 25 files changed, 421 insertions(+), 150 deletions(-) diff --git a/ChangeLog b/ChangeLog index ed1ffdf..98e173c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +1998-08-23 Shuhei KOBAYASHI + + * lisp/gnus.el (gnus-version-number): Update to 6.8.7. + + * Sync up with Gnus 5.6.39. + 1998-08-16 Shuhei KOBAYASHI * lisp/message.el: Suppress some byte-compile warnings. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 5435e3d..5fe208e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,139 @@ +Sat Aug 22 10:28:25 1998 Lars Magne Ingebrigtsen + + * gnus.el: Gnus v5.6.39 is released. + +1998-08-22 10:06:03 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-ignored-headers): Added more headers. + +1998-08-21 02:49:56 Lars Magne Ingebrigtsen + + * nnweb.el (nnweb-type): Doc fix. + + * gnus-sum.el (gnus-summary-set-process-mark): Move to the right + article. + +1998-08-20 23:10:01 Lars Magne Ingebrigtsen + + * nnmail.el (nnmail-spool-file): Allow lists of files. + +1998-08-20 Per Starback + + * gnus/gnus-start.el (gnus-check-first-time-used): Change current + buffer before creating help group. + +1998-08-20 01:33:08 Lars Magne Ingebrigtsen + + * gnus-msg.el (gnus-message-style-insertions): New variable. + (gnus-message-insert-stylings): New function. + (gnus-configure-posting-styles): Use them. + + * gnus-topic.el (gnus-topic-mode): Don't alter summary-exit-hook. + + * gnus-sum.el (gnus-select-newsgroup): Don't update group. + + * gnus-msg.el (gnus-setup-message): Bind message-mode-hook. + (gnus-inhibit-posting-styles): New variable. + (gnus-summary-reply): Use it. + (gnus-configure-posting-styles): Ditto. + + * gnus-group.el (gnus-group-suspend): Don't kill dribble buffer. + +Thu Aug 20 00:28:35 1998 Lars Magne Ingebrigtsen + + * gnus.el: Gnus v5.6.38 is released. + +1998-08-20 00:02:50 Lars Magne Ingebrigtsen + + * message.el (message-mail): Doc fix. + +1998-08-19 23:22:02 Bill Pringlemeir + + * messcompat.el (message-send-mail-function): Initialized from + send-mail-function. + +1998-08-19 23:20:42 Martin Larose + + * message.el (message-send-coding-system): New variable. + +1998-08-19 19:00:37 Lars Magne Ingebrigtsen + + * gnus-msg.el (gnus-configure-posting-styles): Reinstated most of + old code. + + * gnus-start.el (gnus-save-newsrc-file): Use coding system. + +1980-06-08 03:53:56 Mike McEwan + + * gnus-agent.el (gnus-agent-braid-nov): Go to right place. + +1980-06-08 03:01:48 Shuhei KOBAYASHI + + * gnus-group.el (gnus-group-suspend): Fix. + +1998-08-18 00:25:11 Lars Magne Ingebrigtsen + + * gnus-cite.el (gnus-cited-opened-text-button-line-format-alist): + New n spec. + + * gnus-group.el (gnus-group-suspend): Use mapcar. + +1998-08-17 14:35:33 Lars Magne Ingebrigtsen + + * gnus-ems.el (gnus-add-minor-mode): Set mode var. + + * gnus-start.el (gnus-slave-mode): New function. + + * gnus-msg.el (gnus-post-method): Work with current in nndraft. + +1998-08-16 23:30:14 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-request-article-this-buffer): Allow recursive + selection of nneething groups. + + * nneething.el (nneething-address): Renamed from directory. + +Sun Aug 16 18:59:41 1998 Lars Magne Ingebrigtsen + + * gnus.el: Gnus v5.6.37 is released. + +1998-08-16 14:52:43 Lars Magne Ingebrigtsen + + * gnus.el: Autoload gnus-summary-wide-reply. + + * gnus-sum.el (gnus-get-newsgroup-headers): Return the value of + In-Reply-To. + + * gnus-msg.el (gnus-setup-message): Posting styles have to be + configured in message-mode-hook. + + * nntp.el (nntp-connection-timeout): Restored. + (nntp-open-connection): Use it. + +1998-08-15 22:46:49 Lars Magne Ingebrigtsen + + * gnus-group.el (gnus-group-make-useful-group): Doc fix. + + * gnus-art.el (gnus-article-push-button): Place point where you + click. + +1998-08-15 Mike McEwan + + * gnus-agent.el (gnus-agent-save-group-info): Update "groups" file + if `nntp-server-list-active-group' is nil. + +1998-08-15 00:35:03 Lars Magne Ingebrigtsen + + * gnus-score.el (gnus-summary-increase-score): Swap t and r. + + * gnus-sum.el (gnus-remove-thread): Didn't work with sparse + threads. + +1998-08-14 François Pinard + + * nndoc.el (nndoc-generate-mime-parts-head): Use original Subject, + Message-ID, and References in fully blown articles. + Fri Aug 14 23:03:51 1998 Lars Magne Ingebrigtsen * gnus.el: Gnus v5.6.36 is released. diff --git a/lisp/gnus-agent.el b/lisp/gnus-agent.el index f3409ec..0c81559 100644 --- a/lisp/gnus-agent.el +++ b/lisp/gnus-agent.el @@ -532,16 +532,24 @@ the actual number of articles toggled is returned." (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"))) + (file (if nntp-server-list-active-group + (gnus-agent-lib-file "active") + (gnus-agent-lib-file "groups")))) (gnus-make-directory (file-name-directory file)) (nnheader-temp-write file (when (file-exists-p file) (insert-file-contents file)) (goto-char (point-min)) - (when (re-search-forward (concat "^" (regexp-quote group) " ") nil t) - (gnus-delete-line)) - (insert group " " (number-to-string (cdr active)) " " - (number-to-string (car active)) "\n"))))) + (if nntp-server-list-active-group + (progn + (when (re-search-forward + (concat "^" (regexp-quote group) " ") nil t) + (gnus-delete-line)) + (insert group " " (number-to-string (cdr active)) " " + (number-to-string (car active)) "\n")) + (when (re-search-forward (concat (regexp-quote group) " ") nil t) + (gnus-delete-line)) + (insert-buffer-substring nntp-server-buffer)))))) (defun gnus-agent-group-path (group) "Translate GROUP into a path." @@ -804,7 +812,7 @@ the actual number of articles toggled is returned." (set-buffer nntp-server-buffer) (erase-buffer) (nnheader-insert-file-contents file) - (goto-char (point-min)) + (goto-char (point-max)) (if (or (= (point-min) (point-max)) (progn (forward-line -1) diff --git a/lisp/gnus-art.el b/lisp/gnus-art.el index 6996a10..13e7351 100644 --- a/lisp/gnus-art.el +++ b/lisp/gnus-art.el @@ -94,10 +94,19 @@ :group 'gnus-article) (defcustom gnus-ignored-headers - '("^Path:" "^Posting-Version:" "^Article-I.D.:" "^Expires:" - "^Date-Received:" "^References:" "^Control:" "^Xref:" "^Lines:" - "^Posted:" "^Relay-Version:" "^Message-ID:" "^Nf-ID:" "^Nf-From:" - "^Approved:" "^Sender:" "^Received:" "^Mail-from:") + '("^Path:" "^Expires:" "^Date-Received:" "^References:" "^Xref:" "^Lines:" + "^Relay-Version:" "^Message-ID:" "^Approved:" "^Sender:" "^Received:" + "^X-UIDL:" "^MIME-Version:" "^Return-Path:" "^In-Reply-To:" + "^Content-Type:" "^Content-Transfer-Encoding:" "^X-WebTV-Signature:" + "^X-MimeOLE:" "^X-MSMail-Priority:" "^X-Priority:" "^X-Loop:" + "^X-Authentication-Warning:" "^X-MIME-Autoconverted:" "^X-Face:" + "^X-Attribution:" "^X-Originating-IP:" "^Delivered-To:" + "^NNTP-[-A-Za-z]*:" "^Distribution:" "^X-no-archive:" "^X-Trace:" + "^X-Complaints-To:" "^X-NNTP-Posting-Host:" "^X-Orig.*:" + "^Abuse-Reports-To:" "^Cache-Post-Path:" "^X-Article-Creation-Date:" + "^X-Poster:" "^X-Mail2News-Path:" "^X-Server-Date:" "^X-Cache:" + "^Originator:" "^X-Problems-To:" "^X-Auth-User:" "^X-Post-Time:" + "^X-Admin:" "^X-UID:") "*All headers that start with this regexp will be hidden. This variable can also be a list of regexps of headers to be ignored. If `gnus-visible-headers' is non-nil, this variable will be ignored." @@ -2040,7 +2049,8 @@ If ALL-HEADERS is non-nil, no headers are hidden." (unless (memq article gnus-newsgroup-sparse) (gnus-error 1 "No such article (may have expired or been canceled)"))))) - (if (or (eq result 'pseudo) (eq result 'nneething)) + (if (or (eq result 'pseudo) + (eq result 'nneething)) (progn (save-excursion (set-buffer summary-buffer) @@ -2458,8 +2468,11 @@ If given a prefix, show the hidden text instead." gnus-newsgroup-name))) (when (and (eq (car method) 'nneething) (vectorp header)) - (let ((dir (concat (file-name-as-directory (nth 1 method)) - (mail-header-subject header)))) + (let ((dir (concat + (file-name-as-directory + (or (cadr (assq 'nneething-address method)) + (nth 1 method))) + (mail-header-subject header)))) (when (file-directory-p dir) (setq article 'nneething) (gnus-group-enter-directory dir)))))))) @@ -2786,6 +2799,7 @@ call it with the value of the `gnus-data' text property." (let* ((pos (posn-point (event-start event))) (data (get-text-property pos 'gnus-data)) (fun (get-text-property pos 'gnus-callback))) + (goto-char pos) (when fun (funcall fun data)))) diff --git a/lisp/gnus-cite.el b/lisp/gnus-cite.el index 5710910..8866867 100644 --- a/lisp/gnus-cite.el +++ b/lisp/gnus-cite.el @@ -284,6 +284,7 @@ This should make it easier to see who wrote what." (defvar gnus-cited-opened-text-button-line-format-alist `((?b (marker-position beg) ?d) (?e (marker-position end) ?d) + (?n (count-lines beg end) ?d) (?l (- end beg) ?d))) (defvar gnus-cited-opened-text-button-line-format-spec nil) (defvar gnus-cited-closed-text-button-line-format-alist diff --git a/lisp/gnus-ems.el b/lisp/gnus-ems.el index 203c863..a29494b 100644 --- a/lisp/gnus-ems.el +++ b/lisp/gnus-ems.el @@ -276,6 +276,7 @@ (defun gnus-add-minor-mode (mode name map) (if (fboundp 'add-minor-mode) (add-minor-mode mode name map) + (set (make-local-variable mode) t) (unless (assq mode minor-mode-alist) (push `(,mode ,name) minor-mode-alist)) (unless (assq mode minor-mode-map-alist) diff --git a/lisp/gnus-group.el b/lisp/gnus-group.el index 408b7ac..03ec6d9 100644 --- a/lisp/gnus-group.el +++ b/lisp/gnus-group.el @@ -773,6 +773,8 @@ The following commands are available: (add-hook 'post-command-hook 'gnus-clear-inboxes-moved nil t) (when gnus-use-undo (gnus-undo-mode 1)) + (when gnus-slave + (gnus-slave-mode)) (gnus-run-hooks 'gnus-group-mode-hook)) (defun gnus-update-group-mark-positions () @@ -1980,6 +1982,7 @@ and NEW-NAME will be prompted for." (gnus-group-position-point))) (defun gnus-group-make-useful-group (group method) + "Create one of the groups described in `gnus-useful-groups'." (interactive (let ((entry (assoc (completing-read "Create group: " gnus-useful-groups nil t) @@ -3161,12 +3164,12 @@ In fact, cleanup buffers except for group mode buffer. The hook gnus-suspend-gnus-hook is called before actually suspending." (interactive) (gnus-run-hooks 'gnus-suspend-gnus-hook) - ;; Kill Gnus buffers except for group buffer and dribble buffer. + ;; Kill Gnus buffers except for group mode buffer. (let ((group-buf (get-buffer gnus-group-buffer))) - (mapcar (function kill-buffer) - (delete group-buf - (delete gnus-dribble-buffer - (append (gnus-buffers) nil)))) + (mapcar (lambda (buf) + (unless (member buf (list group-buf gnus-dribble-buffer)) + (kill-buffer buf))) + (gnus-buffers)) (gnus-kill-gnus-frames) (when group-buf (bury-buffer group-buf) diff --git a/lisp/gnus-int.el b/lisp/gnus-int.el index 6eff329..8143d0d 100644 --- a/lisp/gnus-int.el +++ b/lisp/gnus-int.el @@ -308,7 +308,7 @@ If FETCH-OLD, retrieve all headers (or some subset thereof) in the group." (gnus-group-real-name group) article)))) (defun gnus-request-update-mark (group article mark) - "Return the type (`post' or `mail') of GROUP (and ARTICLE)." + "Allow the backend to change the mark the user tries to put on an article." (let ((gnus-command-method (gnus-find-method-for-group group))) (if (not (gnus-check-backend-function 'request-update-mark (car gnus-command-method))) diff --git a/lisp/gnus-msg.el b/lisp/gnus-msg.el index af8a885..2036109 100644 --- a/lisp/gnus-msg.el +++ b/lisp/gnus-msg.el @@ -111,6 +111,9 @@ the second with the current group name.") ;;; Internal variables. +(defvar gnus-inhibit-posting-styles nil + "Inhibit the use of posting styles.") + (defvar gnus-message-buffer "*Mail Gnus*") (defvar gnus-article-copy nil) (defvar gnus-last-posting-server nil) @@ -186,10 +189,11 @@ Thank you for your help in stamping out bugs. (,article (and gnus-article-reply (gnus-summary-article-number))) (,group gnus-newsgroup-name) (message-header-setup-hook - (copy-sequence message-header-setup-hook))) + (copy-sequence message-header-setup-hook)) + (message-mode-hook (copy-sequence message-mode-hook))) (add-hook 'message-header-setup-hook 'gnus-inews-insert-gcc) (add-hook 'message-header-setup-hook 'gnus-inews-insert-archive-gcc) - (add-hook 'message-setup-hook 'gnus-configure-posting-styles) + (add-hook 'message-mode-hook 'gnus-configure-posting-styles) (unwind-protect (progn ,@forms) @@ -514,7 +518,8 @@ If SILENT, don't prompt the user." (not (eq (car group-method) 'nndraft)) (not arg)) group-method) - (gnus-post-method + ((and gnus-post-method + (not (eq gnus-post-method 'current))) gnus-post-method) ;; Use the normal select method. (t gnus-select-method)))) @@ -589,7 +594,8 @@ automatically." ;; Stripping headers should be specified with mail-yank-ignored-headers. (when yank (gnus-summary-goto-subject (car yank))) - (let ((gnus-article-reply t)) + (let ((gnus-article-reply t) + (gnus-inhibit-posting-styles t)) (gnus-setup-message (if yank 'reply-yank 'reply) (gnus-summary-select-article) (set-buffer (gnus-copy-article-buffer)) @@ -1057,67 +1063,86 @@ this is a reply." ;;; Posting styles. +(defvar gnus-message-style-insertions nil) + (defun gnus-configure-posting-styles () "Configure posting styles according to `gnus-posting-styles'." - (let ((styles gnus-posting-styles) - (gnus-newsgroup-name (or gnus-newsgroup-name "")) - style match variable attribute value value-value) - ;; Go through all styles and look for matches. - (while styles - (setq style (pop styles) - match (pop style)) - (when (cond ((stringp match) - ;; Regexp string match on the group name. - (string-match match gnus-newsgroup-name)) - ((or (symbolp match) - (gnus-functionp match)) - (cond ((gnus-functionp match) - ;; Function to be called. - (funcall match)) - ((boundp match) - ;; Variable to be checked. - (symbol-value match)))) - ((listp match) - ;; This is a form to be evaled. - (eval match))) - ;; We have a match, so we set the variables. - (while style - (setq attribute (pop style) - value (cadr attribute) - variable nil) - ;; We find the variable that is to be modified. - (if (and (not (stringp (car attribute))) - (not (eq 'body (car attribute))) - (not (setq variable (cdr (assq (car attribute) - gnus-posting-style-alist))))) - (message "Couldn't find attribute %s" (car attribute)) - ;; We get the value. - (setq value-value - (cond ((stringp value) - value) - ((or (symbolp value) - (gnus-functionp value)) - (cond ((gnus-functionp value) - (funcall value)) - ((boundp value) - (symbol-value value)))) - ((listp value) - (eval value)))) - (if variable - ;; This is an ordinary variable. - (set (make-local-variable variable) value-value) - ;; This is either a body or a header to be inserted in the - ;; message - (when value-value - (let ((attr (car attribute))) - (if (eq 'body attr) - (save-excursion - (goto-char (point-max)) - (insert value-value)) - (save-excursion - (message-goto-eoh) - (insert (if (stringp attr) attr (symbol-name attr)) - ": " value-value "\n")))))))))))) + (unless gnus-inhibit-posting-styles + (let ((styles gnus-posting-styles) + (gnus-newsgroup-name (or gnus-newsgroup-name "")) + style match variable attribute value value-value) + (make-local-variable 'gnus-message-style-insertions) + ;; Go through all styles and look for matches. + (while styles + (setq style (pop styles) + match (pop style)) + (when (cond ((stringp match) + ;; Regexp string match on the group name. + (string-match match gnus-newsgroup-name)) + ((or (symbolp match) + (gnus-functionp match)) + (cond ((gnus-functionp match) + ;; Function to be called. + (funcall match)) + ((boundp match) + ;; Variable to be checked. + (symbol-value match)))) + ((listp match) + ;; This is a form to be evaled. + (eval match))) + ;; We have a match, so we set the variables. + (while style + (setq attribute (pop style) + value (cadr attribute) + variable nil) + ;; We find the variable that is to be modified. + (if (and (not (stringp (car attribute))) + (not (eq 'body (car attribute))) + (not (setq variable + (cdr (assq (car attribute) + gnus-posting-style-alist))))) + (message "Couldn't find attribute %s" (car attribute)) + ;; We get the value. + (setq value-value + (cond ((stringp value) + value) + ((or (symbolp value) + (gnus-functionp value)) + (cond ((gnus-functionp value) + (funcall value)) + ((boundp value) + (symbol-value value)))) + ((listp value) + (eval value)))) + (if variable + ;; This is an ordinary variable. + (set (make-local-variable variable) value-value) + ;; This is either a body or a header to be inserted in the + ;; message. + (when value-value + (let ((attr (car attribute))) + (make-local-variable 'message-setup-hook) + (if (eq 'body attr) + (add-hook 'message-setup-hook + `(lambda () + (save-excursion + (message-goto-body) + (insert ,value-value)))) + (add-hook 'message-setup-hook + 'gnus-message-insert-stylings) + (push (cons (if (stringp attr) attr + (symbol-name attr)) + value-value) + gnus-message-style-insertions)))))))))))) + +(defun gnus-message-insert-stylings () + (let (val) + (save-excursion + (message-goto-eoh) + (while (setq val (pop gnus-message-style-insertions)) + (when (cdr val) + (insert (car val) ": " (cdr val) "\n")) + (gnus-pull (car val) gnus-message-style-insertions))))) ;;; Allow redefinition of functions. diff --git a/lisp/gnus-score.el b/lisp/gnus-score.el index 4bdbcb6..8cff072 100644 --- a/lisp/gnus-score.el +++ b/lisp/gnus-score.el @@ -500,12 +500,12 @@ used as score." (?b "body" "" nil body-string) (?h "head" "" nil body-string) (?i "message-id" nil t string) - (?t "references" "message-id" nil string) + (?r "references" "message-id" nil string) (?x "xref" nil nil string) (?l "lines" nil nil number) (?d "date" nil nil date) (?f "followup" nil nil string) - (?r "thread" nil nil string))) + (?t "thread" nil nil string))) (char-to-type '((?s s "substring" string) (?e e "exact string" string) diff --git a/lisp/gnus-start.el b/lisp/gnus-start.el index 78a088f..55a2ed3 100644 --- a/lisp/gnus-start.el +++ b/lisp/gnus-start.el @@ -254,8 +254,6 @@ for your decision; `gnus-subscribe-killed' kills all new groups; (function-item gnus-subscribe-zombies) function)) -;; Suggested by a bug report by Hallvard B Furuseth. -;; . (defcustom gnus-subscribe-options-newsgroup-method 'gnus-subscribe-alphabetically "*This function is called to subscribe newsgroups mentioned on \"options -n\" lines. @@ -1054,13 +1052,13 @@ for new groups, and subscribe the new groups as zombies." ;; Go through both primary and secondary select methods and ;; request new newsgroups. (while (setq method (gnus-server-get-method nil (pop methods))) - (setq new-newsgroups nil) - (setq gnus-override-subscribe-method method) + (setq new-newsgroups nil + gnus-override-subscribe-method method) (when (and (gnus-check-server method) (gnus-request-newgroups date method)) (save-excursion - (setq got-new t) - (setq hashtb (gnus-make-hashtable 100)) + (setq got-new t + hashtb (gnus-make-hashtable 100)) (set-buffer nntp-server-buffer) ;; Enter all the new groups into a hashtable. (gnus-active-to-gnus-format method hashtb 'ignore)) @@ -1139,7 +1137,9 @@ for new groups, and subscribe the new groups as zombies." (gnus-group-change-level (car groups) gnus-level-default-subscribed gnus-level-killed)) (setq groups (cdr groups))) - (gnus-group-make-help-group) + (save-excursion + (set-buffer gnus-group-buffer) + (gnus-group-make-help-group)) (when gnus-novice-user (gnus-message 7 "`A k' to list killed groups")))))) @@ -2390,6 +2390,13 @@ If FORCE is non-nil, the .newsrc file is read." ;;; Slave functions. ;;; +(defvar gnus-slave-mode nil) + +(defun gnus-slave-mode () + "Minor mode for slave Gnusae." + (gnus-add-minor-mode 'gnus-slave-mode " Slave" (make-sparse-keymap)) + (gnus-run-hooks 'gnus-slave-mode-hook)) + (defun gnus-slave-save-newsrc () (save-excursion (set-buffer gnus-dribble-buffer) diff --git a/lisp/gnus-sum.el b/lisp/gnus-sum.el index 81880d0..ccc423f 100644 --- a/lisp/gnus-sum.el +++ b/lisp/gnus-sum.el @@ -3358,9 +3358,8 @@ If LINE, insert the rebuilt thread starting on line LINE." "Remove the thread that has ID in it." (let (headers thread last-id) ;; First go up in this thread until we find the root. - (setq last-id (gnus-root-id id)) - (setq headers (list (car (gnus-id-to-thread last-id)) - (caadr (gnus-id-to-thread last-id)))) + (setq last-id (gnus-root-id id) + headers (message-flatten-list (gnus-id-to-thread last-id))) ;; We have now found the real root of this thread. It might have ;; been gathered into some loose thread, so we have to search ;; through the threads to find the thread we wanted. @@ -3856,7 +3855,7 @@ If SELECT-ARTICLES, only select those articles from GROUP." (let* ((entry (gnus-gethash group gnus-newsrc-hashtb)) ;;!!! Dirty hack; should be removed. (gnus-summary-ignore-duplicates - (if (eq (car (gnus-find-method-for-group group)) 'nnvirtual) + (if (eq (car (gnus-find-method-for-group group)) 'nnvirtual) t gnus-summary-ignore-duplicates)) (info (nth 2 entry)) @@ -3901,8 +3900,6 @@ If SELECT-ARTICLES, only select those articles from GROUP." (setq gnus-newsgroup-processable nil) (gnus-update-read-articles group gnus-newsgroup-unreads) - (unless (gnus-ephemeral-group-p gnus-newsgroup-name) - (gnus-group-update-group group)) (if (setq articles select-articles) (setq gnus-newsgroup-unselected @@ -4499,7 +4496,8 @@ The resulting hash table is returned, or nil if no Xrefs were found." (setq ref2 (substring in-reply-to (match-beginning 0) (match-end 0))) (when (> (length ref2) (length ref)) - (setq ref ref2)))) + (setq ref ref2))) + ref) (setq ref nil)))) ;; Chars. (progn @@ -7635,6 +7633,7 @@ the actual number of articles marked is returned." (delq article gnus-newsgroup-processable))) (when (gnus-summary-goto-subject article) (gnus-summary-show-thread) + (gnus-summary-goto-subject article) (gnus-summary-update-secondary-mark article))) (defun gnus-summary-remove-process-mark (article) @@ -7642,6 +7641,7 @@ the actual number of articles marked is returned." (setq gnus-newsgroup-processable (delq article gnus-newsgroup-processable)) (when (gnus-summary-goto-subject article) (gnus-summary-show-thread) + (gnus-summary-goto-subject article) (gnus-summary-update-secondary-mark article))) (defun gnus-summary-set-saved-mark (article) diff --git a/lisp/gnus-topic.el b/lisp/gnus-topic.el index cd211a7..3f2b2af 100644 --- a/lisp/gnus-topic.el +++ b/lisp/gnus-topic.el @@ -627,7 +627,7 @@ articles in the topic and its subtopics." (parent (gnus-topic-parent-topic topic-name)) (all-entries entries) (unread 0) - old-unread entry) + old-unread entry new-unread) (when (gnus-topic-goto-topic (car type)) ;; Tally all the groups that belong in this topic. (if reads @@ -643,12 +643,14 @@ articles in the topic and its subtopics." (car type) (gnus-topic-visible-p) (not (eq (nth 2 type) 'hidden)) (gnus-group-topic-level) all-entries unread) - (gnus-delete-line)) + (gnus-delete-line) + (forward-line -1) + (setq new-unread (gnus-group-topic-unread))) (when parent (forward-line -1) (gnus-topic-update-topic-line parent - (max 0 (- (or old-unread 0) (or (gnus-group-topic-unread) 0))))) + (- (or old-unread 0) (or new-unread 0)))) unread)) (defun gnus-topic-group-indentation () @@ -984,7 +986,6 @@ articles in the topic and its subtopics." (gnus-topic-make-menu-bar)) (gnus-set-format 'topic t) (gnus-add-minor-mode 'gnus-topic-mode " Topic" gnus-topic-mode-map) - (add-hook 'gnus-summary-exit-hook 'gnus-topic-update-topic) (add-hook 'gnus-group-catchup-group-hook 'gnus-topic-update-topic) (set (make-local-variable 'gnus-group-prepare-function) 'gnus-group-prepare-topics) diff --git a/lisp/gnus-uu.el b/lisp/gnus-uu.el index f937bbe..dee2d04 100644 --- a/lisp/gnus-uu.el +++ b/lisp/gnus-uu.el @@ -1090,8 +1090,7 @@ didn't work, and overwrite existing files. Otherwise, ask each time." (gnus-uu-reginize-string (gnus-summary-article-subject)))) list-of-subjects) (save-excursion - (if (not subject) - () + (when subject ;; Collect all subjects matching subject. (let ((case-fold-search t) (data gnus-newsgroup-data) diff --git a/lisp/gnus.el b/lisp/gnus.el index d96ce70..3a34e96 100644 --- a/lisp/gnus.el +++ b/lisp/gnus.el @@ -253,11 +253,11 @@ is restarted, and sometimes reloaded." (defconst gnus-product-name "Shoe-gnus" "Product name of this version of gnus.") -(defconst gnus-version-number "6.8.6" +(defconst gnus-version-number "6.8.7" "Version number for this version of gnus.") (defconst gnus-version - (format "%s %s (based on Gnus 5.6.36; for SEMI 1.8, FLIM 1.8/1.9)" + (format "%s %s (based on Gnus 5.6.39; for SEMI 1.8, FLIM 1.8/1.9)" gnus-product-name gnus-version-number) "Version string for this version of gnus.") @@ -1653,7 +1653,8 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.") gnus-uu-decode-binhex gnus-uu-decode-uu-view gnus-uu-decode-uu-and-save-view gnus-uu-decode-unshar-view gnus-uu-decode-unshar-and-save-view gnus-uu-decode-save-view - gnus-uu-decode-binhex-view gnus-uu-unmark-thread) + gnus-uu-decode-binhex-view gnus-uu-unmark-thread + gnus-uu-mark-over) ("gnus-uu" gnus-uu-delete-work-dir gnus-quote-arg-for-sh-or-csh gnus-uu-unmark-thread) ("gnus-msg" (gnus-summary-send-map keymap) @@ -1665,6 +1666,7 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.") gnus-post-news gnus-summary-reply gnus-summary-reply-with-original gnus-summary-mail-forward gnus-summary-mail-other-window gnus-summary-resend-message gnus-summary-resend-bounced-mail + gnus-summary-wide-reply gnus-bug) ("gnus-picon" :interactive t gnus-article-display-picons gnus-group-display-picons gnus-picons-article-display-x-face @@ -2272,9 +2274,11 @@ that that variable is buffer-local to the summary buffers." (gnus-server-to-method method)) ((equal method gnus-select-method) gnus-select-method) - ((and (stringp (car method)) group) + ((and (stringp (car method)) + group) (gnus-server-extend-method group method)) - ((and method (not group) + ((and method + (not group) (equal (cadr method) "")) method) (t diff --git a/lisp/message.el b/lisp/message.el index 33a7a5b..fdcc5ce 100644 --- a/lisp/message.el +++ b/lisp/message.el @@ -939,6 +939,9 @@ The cdr of ech entry is a function for applying the face to a region.") :group 'message-various :type 'hook) +(defvar message-send-coding-system 'binary + "Coding system to encode outgoing mail.") + ;;; Internal variables. (defvar message-buffer-list nil) @@ -2192,7 +2195,7 @@ the user from the mailer." (set-buffer errbuf) (erase-buffer)))) (let ((default-directory "/") - (coding-system-for-write 'binary)) + (coding-system-for-write message-send-coding-system)) (apply 'call-process-region (append (list (point-min) (point-max) (if (boundp 'sendmail-program) @@ -2241,7 +2244,7 @@ to find out how to use this." (run-hooks 'message-send-mail-hook) ;; send the message (case - (let ((coding-system-for-write 'binary)) + (let ((coding-system-for-write message-send-coding-system)) (apply 'call-process-region 1 (point-max) message-qmail-inject-program nil nil nil @@ -3422,7 +3425,8 @@ Headers already prepared in the buffer are not modified." (defun message-mail (&optional to subject other-headers continue switch-function yank-action send-actions) - "Start editing a mail message to be sent." + "Start editing a mail message to be sent. +OTHER-HEADERS is an alist of header/value pairs." (interactive) (let ((message-this-is-mail t)) (message-pop-to-buffer (message-buffer-name "mail" to)) diff --git a/lisp/messcompat.el b/lisp/messcompat.el index 337ab6f..153f76d 100644 --- a/lisp/messcompat.el +++ b/lisp/messcompat.el @@ -82,6 +82,11 @@ these lines.") (defvar message-send-hook mail-send-hook "Hook run before sending messages.") +(defvar message-send-mail-function send-mail-function + "Function to call to send the current buffer as mail. +The headers should be delimited by a line whose contents match the +variable `mail-header-separator'.") + (provide 'messcompat) ;;; messcompat.el ends here diff --git a/lisp/nndoc.el b/lisp/nndoc.el index 16e6e9c..932b196 100644 --- a/lisp/nndoc.el +++ b/lisp/nndoc.el @@ -473,17 +473,15 @@ from the document.") (goto-char (point-min)) (nndoc-generate-mime-parts-head article t))) -(defun nndoc-generate-mime-parts-head (article &optional full-subject) - (let ((entry (cdr (assq article nndoc-dissection-alist)))) - (let ((subject (concat "<" (nth 5 entry) ">")) +(defun nndoc-generate-mime-parts-head (article &optional body-present) + (let ((entry (cdr (assq (if body-present 1 article) nndoc-dissection-alist)))) + (let ((subject (if body-present + nndoc-mime-subject + (concat "<" (nth 5 entry) ">"))) (message-id (nth 6 entry)) (references (nth 7 entry))) - (insert nndoc-mime-header - "Subject: " - (cond ((not full-subject) subject) - (nndoc-mime-subject (concat nndoc-mime-subject " " subject)) - (t subject)) - "\n") + (insert nndoc-mime-header) + (and subject (insert "Subject: " subject "\n")) (and message-id (insert "Message-ID: " message-id "\n")) (and references (insert "References: " references "\n"))))) diff --git a/lisp/nneething.el b/lisp/nneething.el index 97f5d2f..7da5466 100644 --- a/lisp/nneething.el +++ b/lisp/nneething.el @@ -64,7 +64,7 @@ If this variable is nil, no files will be excluded.") (defvoo nneething-map nil) (defvoo nneething-read-only nil) (defvoo nneething-active nil) -(defvoo nneething-directory nil) +(defvoo nneething-address nil) @@ -158,8 +158,8 @@ If this variable is nil, no files will be excluded.") (nnheader-init-server-buffer) (if (nneething-server-opened server) t - (unless (assq 'nneething-directory defs) - (setq defs (append defs (list (list 'nneething-directory server))))) + (unless (assq 'nneething-address defs) + (setq defs (append defs (list (list 'nneething-address server))))) (nnoo-change-server 'nneething server defs))) @@ -185,9 +185,9 @@ If this variable is nil, no files will be excluded.") (defun nneething-create-mapping () ;; Read nneething-active and nneething-map. - (when (file-exists-p nneething-directory) + (when (file-exists-p nneething-address) (let ((map-file (nneething-map-file)) - (files (directory-files nneething-directory)) + (files (directory-files nneething-address)) touched map-files) (when (file-exists-p map-file) (ignore-errors @@ -344,7 +344,7 @@ If this variable is nil, no files will be excluded.") (defun nneething-file-name (article) "Return the file name of ARTICLE." - (concat (file-name-as-directory nneething-directory) + (concat (file-name-as-directory nneething-address) (if (numberp article) (cadr (assq article nneething-map)) article))) diff --git a/lisp/nnmail.el b/lisp/nnmail.el index c40f62c..bc8d1f5 100644 --- a/lisp/nnmail.el +++ b/lisp/nnmail.el @@ -182,7 +182,8 @@ used as incoming mailboxes. If this variable is a directory (i. e., it's name ends with a \"/\"), treat all files in that directory as incoming spool files." :group 'nnmail-files - :type 'file) + :type '(choice (file :tag "File") + (repeat :tag "Files" file))) (defcustom nnmail-crash-box "~/.gnus-crash-box" "File where Gnus will store mail while processing it." diff --git a/lisp/nntp.el b/lisp/nntp.el index 3528e33..a2b8009 100644 --- a/lisp/nntp.el +++ b/lisp/nntp.el @@ -179,6 +179,10 @@ server there that you can connect to. See also +(defvoo nntp-connection-timeout nil + "*Number of seconds to wait before an nntp connection times out. +If this variable is nil, which is the default, no timers are set.") + ;;; Internal variables. (defvar nntp-record-commands nil @@ -684,6 +688,10 @@ server there that you can connect to. See also (ignore-errors (nntp-send-string process "QUIT") (unless (eq nntp-open-connection-function 'nntp-open-network-stream) + ;; Ok, this is evil, but when using telnet and stuff + ;; as the connection method, it's important that the + ;; QUIT command actually is sent out before we kill + ;; the process. (sleep-for 1)))) (when (buffer-name (process-buffer process)) (kill-buffer (process-buffer process))) @@ -830,6 +838,13 @@ password contained in '~/.nntp-authinfo'." "Open a connection to PORT on ADDRESS delivering output to BUFFER." (run-hooks 'nntp-prepare-server-hook) (let* ((pbuffer (nntp-make-process-buffer buffer)) + (timer + (and nntp-connection-timeout + (nnheader-run-at-time + nntp-connection-timeout nil + `(lambda () + (when (buffer-name ,pbuffer) + (kill-buffer ,pbuffer)))))) (process (condition-case () (let ((coding-system-for-read nntp-coding-system-for-read) @@ -837,7 +852,10 @@ password contained in '~/.nntp-authinfo'." (funcall nntp-open-connection-function pbuffer)) (error nil) (quit nil)))) - (when process + (when timer + (nnheader-cancel-timer timer)) + (when (and (buffer-name pbuffer) + process) (process-kill-without-query process) (nntp-wait-for process "^.*\n" buffer nil t) (if (memq (process-status process) '(open run)) diff --git a/lisp/nnweb.el b/lisp/nnweb.el index 321508c..5a673cd 100644 --- a/lisp/nnweb.el +++ b/lisp/nnweb.el @@ -46,7 +46,9 @@ "Where nnweb will save its files.") (defvoo nnweb-type 'dejanews - "What search engine type is being used.") + "What search engine type is being used. +Valid types include `dejanews', `dejanewsold', `reference', +and `altavista'.") (defvoo nnweb-type-definition '((dejanews diff --git a/texi/ChangeLog b/texi/ChangeLog index 99e2d27..0524893 100644 --- a/texi/ChangeLog +++ b/texi/ChangeLog @@ -1,3 +1,16 @@ +1998-08-18 00:30:05 Lars Magne Ingebrigtsen + + * gnus.texi (Article Hiding): Addition. + +1998-08-16 14:53:45 Lars Magne Ingebrigtsen + + * gnus.texi (NNTP): Reinstated. + (Asynchronous Fetching): No header prefetch. + +1998-08-15 13:01:41 Lars Magne Ingebrigtsen + + * gnus.texi (Summary Score Commands): Change. + 1998-08-14 01:31:36 Simon Josefsson * gnus.texi (Posting Styles): New 'body style. diff --git a/texi/gnus.texi b/texi/gnus.texi index be36a49..7fbc758 100644 --- a/texi/gnus.texi +++ b/texi/gnus.texi @@ -7,7 +7,6 @@ @synindex pg cp @c @direntry @c * Gnus: (gnus). The news reader gnus. -@c @end direntry @iftex @finalout @end iftex @@ -1911,6 +1910,13 @@ Currently supported types are @code{babyl}, @code{mbox}, @code{digest}, this command without a prefix, gnus will guess at the file type. @xref{Document Groups}. +@item G u +@kindex G u (Group) +@vindex gnus-useful-groups +@findex gnus-group-make-useful-group +Create one of the groups mentioned in @code{gnus-useful-groups} +(@code{gnus-group-make-useful-group}). + @item G w @kindex G w (Group) @findex gnus-group-make-web-group @@ -5250,9 +5256,9 @@ Remove articles when exiting the group. The default value is @code{(read exit)}. -@vindex gnus-use-header-prefetch -If @code{gnus-use-header-prefetch} is non-@code{nil}, prefetch articles -from the next group. +@c @vindex gnus-use-header-prefetch +@c If @code{gnus-use-header-prefetch} is non-@code{nil}, prefetch articles +@c from the next group. @node Article Caching @@ -6320,11 +6326,13 @@ specs are valid: @table @samp @item b -Start point of the hidden text. +Starting point of the hidden text. @item e -End point of the hidden text. +Ending point of the hidden text. @item l -Length of the hidden text. +Number of characters in the hidden region. +@item n +Number of lines of hidden text. @end table @item gnus-cited-lines-visible @@ -9062,17 +9070,17 @@ waiting for reply, and then reads all the replies. This is controlled by the @code{nntp-maximum-request} variable, and is 400 by default. If your network is buggy, you should set this to 1. -@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 +@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-command-timeout @c @vindex nntp-command-timeout @c @cindex PPP connections @@ -12039,8 +12047,8 @@ Score on the subject line. @item x Score on the Xref line---i.e., the cross-posting line. -@item t -Score on thread---the References line. +@item r +Score on the References line. @item d Score on the date. @@ -12059,6 +12067,10 @@ Score on the body. @item h Score on the head. + +@item t +Score on thead. + @end table @item @@ -15827,13 +15839,16 @@ Rajappa Iyer, Andreas Jaeger, Randell Jesup, Fred Johansen, +Gareth Jones, Simon Josefsson, Greg Klanderman, Karl Kleinpaste, Peter Skov Knudsen, Shuhei Kobayashi, @c Kobayashi +Koseki Yoshinori, @c Koseki Thor Kristoffersen, Jens Lautenbacher, +Martin Larose, Seokchan Lee, @c Lee Carsten Leonhardt, James LewisMoss, @@ -15865,7 +15880,9 @@ William Perry, Stephen Peters, Jens-Ulrik Holger Petersen, Ulrich Pfeifer, +Matt Pharr, John McClary Prevost, +Bill Pringlemeir, Mike Pullen, Jim Radford, Colin Rafferty, @@ -15904,6 +15921,7 @@ Teddy, Chuck Thompson, Philippe Troin, James Troup, +Trung Tran-Duc, Aaron M. Ucko, Aki Vehtari, Didier Verna, diff --git a/texi/message.texi b/texi/message.texi index 1fb2dfe..4888e42 100644 --- a/texi/message.texi +++ b/texi/message.texi @@ -285,6 +285,13 @@ subject. Subject of article with @samp{Fwd:} prepended to it. @end table +@item message-wash-forwarded-subjects +@vindex message-wash-forwarded-subjects +If this variable is @code{t}, the subjects of forwarded messages have +the evidence of previous forwards (such as @samp{Fwd:}, @samp{Re:}, +@samp{(fwd)}) removed before the new subject is +constructed. The default value is @code{nil}. + @end table -- 1.7.10.4