From 3bee6f730b33ba5760d770f70dd46ba3bb6f9193 Mon Sep 17 00:00:00 2001 From: morioka Date: Thu, 27 Nov 1997 07:38:42 +0000 Subject: [PATCH] Quassia Gnus v0.12. --- GNUS-NEWS | 2 ++ lisp/ChangeLog | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++ lisp/gnus-agent.el | 55 +++++++++++++++--------------- lisp/gnus-art.el | 8 ++--- lisp/gnus-cache.el | 5 ++- lisp/gnus-demon.el | 27 ++++++++++++--- lisp/gnus-group.el | 2 +- lisp/gnus-int.el | 13 +++---- lisp/gnus-msg.el | 17 ++++++---- lisp/gnus-salt.el | 2 +- lisp/gnus-score.el | 1 - lisp/gnus-sum.el | 41 +++++++++++++---------- lisp/gnus-uu.el | 1 + lisp/gnus-xmas.el | 1 + lisp/gnus.el | 45 +++---------------------- lisp/message.el | 30 ++++++++++------- lisp/messcompat.el | 5 +-- lisp/nndraft.el | 20 ++++------- lisp/nnmail.el | 23 +++++++++---- lisp/nnmh.el | 1 + lisp/nntp.el | 9 ++++- texi/ChangeLog | 14 ++++++++ texi/gnus-faq.texi | 2 +- texi/gnus.texi | 44 +++++++++++++++++------- texi/message.texi | 13 +++---- 25 files changed, 308 insertions(+), 168 deletions(-) diff --git a/GNUS-NEWS b/GNUS-NEWS index cfa841d..c7e4692 100644 --- a/GNUS-NEWS +++ b/GNUS-NEWS @@ -51,3 +51,5 @@ limit. *** `M-RET' is a new Message command for breaking cited text. +*** \\1-expressions are now valid in `nnmail-split-methods'. + diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 3a3d50b..f22101b 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -2,6 +2,101 @@ Sat Sep 13 21:21:38 1997 Lars Magne Ingebrigtsen * gnus.el: Quassia Gnus v0.1 is released. +Sat Oct 4 00:53:55 1997 Lars Magne Ingebrigtsen + + * gnus.el: Quassia Gnus v0.12 is released. + +Sat Oct 4 00:16:39 1997 Lars Magne Ingebrigtsen + + * nnmail.el (nnmail-delete-incoming): Changed default to nil. + + * gnus-int.el (gnus-request-scan): Don't do anything if + unplugged. + +Fri Oct 3 21:09:19 1997 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-ignored-headers): Doc fix. + + * gnus-demon.el (gnus-demon-add-nntp-close-connection): New + function. + (gnus-demon-nntp-close-connection): Ditto. + + * nntp.el (nntp-last-command-time): New variable. + (nntp-retrieve-data): Use it. + + * message.el (message-news-p): Messages with Posted-To aren't + news. + (message-mode): Heed message-yank-prefix when filling. + + * nndraft.el (nndraft-request-restore-buffer): Remove Xrefs and + Lines headers. + + * nntp.el (nntp-encode-text): Encode according to RFC977. + +Wed Oct 1 18:27:26 1997 Lars Magne Ingebrigtsen + + * gnus-msg.el (gnus-inews-insert-archive-gcc): gcc-self didn't + work if `gnus-message-archive-method' was nil. + + * nnmail.el (nnmail-article-group): Allow \\1 substitution. + +Sat Sep 27 12:57:44 1997 Lars Magne Ingebrigtsen + + * gnus-salt.el (gnus-pick-mouse-pick-region): Use it. + + * gnus-xmas.el (gnus-xmas-window-edges): New function. + + * gnus-score.el (gnus-score-edit-current-scores): Don't select + window. + +Sat Sep 27 12:52:31 1997 Hallvard B. Furuseth + + * messcompat.el ((boundp 'mail-mode-hook)): Check. + +Sat Sep 27 09:22:15 1997 Lars Magne Ingebrigtsen + + * nndraft.el (nndraft-possibly-change-group): Always open server. + + * gnus-sum.el (gnus-summary-pop-article): Force. + + * gnus-art.el (gnus-article-prepare): Push the article onto the + history. + + * gnus-sum.el (gnus-summary-pop-article): Pop to the right + article. + + * gnus-demon.el (gnus-demon-scan-news): Save excursion. + +Sat Sep 27 09:06:55 1997 Hallvard B. Furuseth + + * gnus-cache.el (gnus-summary-limit-include-cached): New command + and keystroke. + +Sat Sep 27 06:45:58 1997 Lars Magne Ingebrigtsen + + * gnus-uu.el (gnus-uu-invert-processable): Make interactive. + +Sat Sep 27 06:43:38 1997 Kim-Minh Kaplan + + * gnus-picon.el: Doc fixes. + +1997-09-23 Hrvoje Niksic + + * gnus.el: Removed definition of `custom-face-lookup'. + +Sat Sep 27 05:36:11 1997 Lars Magne Ingebrigtsen + + * nndraft.el: Would block nnmh. + + * gnus-sum.el (gnus-mark-article-as-unread): Don't allow marking + negative articles. + + * gnus-group.el (gnus-fetch-group): Use `gnus-no-server'. + + * gnus-agent.el (gnus-agent-with-fetch): Moved. + + * gnus-sum.el (gnus-nov-read-integer): Really skip to next field. + Sat Sep 27 04:32:45 1997 Lars Magne Ingebrigtsen * gnus.el: Quassia Gnus v0.11 is released. diff --git a/lisp/gnus-agent.el b/lisp/gnus-agent.el index 721b92b..cb893b5 100644 --- a/lisp/gnus-agent.el +++ b/lisp/gnus-agent.el @@ -62,9 +62,6 @@ (defvar gnus-agent-file-name nil) (defvar gnus-agent-send-mail-function nil) -(defvar gnus-plugged t - "Whether Gnus is plugged or not.") - ;; Dynamic variables (defvar gnus-headers) (defvar gnus-score) @@ -118,6 +115,33 @@ "The full path of the Gnus agent library FILE." (concat (gnus-agent-directory) "agent.lib/" file)) +;;; Fetching setup functions. + +(defun gnus-agent-start-fetch () + "Initialize data structures for efficient fetching." + (gnus-agent-open-history) + (setq gnus-agent-current-history (gnus-agent-history-buffer))) + +(defun gnus-agent-stop-fetch () + "Save all data structures and clean up." + (gnus-agent-save-history) + (gnus-agent-close-history) + (setq gnus-agent-spam-hashtb nil) + (save-excursion + (set-buffer nntp-server-buffer) + (widen))) + +(defmacro gnus-agent-with-fetch (&rest forms) + "Do FORMS safely." + `(unwind-protect + (progn + (gnus-agent-start-fetch) + ,@forms) + (gnus-agent-stop-fetch))) + +(put 'gnus-agent-with-fetch 'lisp-indent-function 0) +(put 'gnus-agent-with-fetch 'edebug-form-spec '(body)) + ;;; ;;; Mode infestation ;;; @@ -522,31 +546,6 @@ the actual number of articles toggled is returned." ;;; Fetching ;;; -(defun gnus-agent-start-fetch () - "Initialize data structures for efficient fetching." - (gnus-agent-open-history) - (setq gnus-agent-current-history (gnus-agent-history-buffer))) - -(defun gnus-agent-stop-fetch () - "Save all data structures and clean up." - (gnus-agent-save-history) - (gnus-agent-close-history) - (setq gnus-agent-spam-hashtb nil) - (save-excursion - (set-buffer nntp-server-buffer) - (widen))) - -(defmacro gnus-agent-with-fetch (&rest forms) - "Do FORMS safely." - `(unwind-protect - (progn - (gnus-agent-start-fetch) - ,@forms) - (gnus-agent-stop-fetch))) - -(put 'gnus-agent-with-fetch 'lisp-indent-function 0) -(put 'gnus-agent-with-fetch 'edebug-form-spec '(body)) - (defun gnus-agent-fetch-articles (group articles) "Fetch ARTICLES from GROUP and put them into the agent." (when articles diff --git a/lisp/gnus-art.el b/lisp/gnus-art.el index db13b3d..ec6cbbe 100644 --- a/lisp/gnus-art.el +++ b/lisp/gnus-art.el @@ -95,7 +95,7 @@ "^Date-Received:" "^References:" "^Control:" "^Xref:" "^Lines:" "^Posted:" "^Relay-Version:" "^Message-ID:" "^Nf-ID:" "^Nf-From:" "^Approved:" "^Sender:" "^Received:" "^Mail-from:") - "All headers that match this regexp will be hidden. + "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." :type '(choice :custom-show nil @@ -1953,9 +1953,8 @@ If ALL-HEADERS is non-nil, no headers are hidden." (progn (save-excursion (set-buffer summary-buffer) + (push article gnus-newsgroup-history) (setq gnus-last-article gnus-current-article - gnus-newsgroup-history (cons gnus-current-article - gnus-newsgroup-history) gnus-current-article 0 gnus-current-headers nil gnus-article-current nil) @@ -1973,9 +1972,8 @@ If ALL-HEADERS is non-nil, no headers are hidden." ;; `gnus-current-article' must be an article number. (save-excursion (set-buffer summary-buffer) + (push article gnus-newsgroup-history) (setq gnus-last-article gnus-current-article - gnus-newsgroup-history (cons gnus-current-article - gnus-newsgroup-history) gnus-current-article article gnus-current-headers (gnus-summary-article-header gnus-current-article) diff --git a/lisp/gnus-cache.el b/lisp/gnus-cache.el index 3a7cd8d..8744414 100644 --- a/lisp/gnus-cache.el +++ b/lisp/gnus-cache.el @@ -362,10 +362,13 @@ Returns the list of articles removed." (let ((cached gnus-newsgroup-cached) (gnus-verbose (max 6 gnus-verbose))) (unless cached - (error "No cached articles for this group")) + (gnus-message 3 "No cached articles for this group")) (while cached (gnus-summary-goto-subject (pop cached) t)))) +(defalias 'gnus-summary-limit-include-cached + 'gnus-summary-insert-cached-articles) + ;;; Internal functions. (defun gnus-cache-change-buffer (group) diff --git a/lisp/gnus-demon.el b/lisp/gnus-demon.el index ec1f2bd..40934ac 100644 --- a/lisp/gnus-demon.el +++ b/lisp/gnus-demon.el @@ -30,6 +30,7 @@ (require 'gnus) (require 'gnus-int) (require 'nnheader) +(require 'nntp) (eval-and-compile (if (string-match "XEmacs" (emacs-version)) (require 'itimer) @@ -259,6 +260,18 @@ time Emacs has been idle for IDLE `gnus-demon-timestep's." (save-window-excursion (gnus-close-backends))) +(defun gnus-demon-add-nntp-close-connection () + "Add daemonic nntp server disconnection to Gnus. +If no commands have gone out via nntp during the last five +minutes, the connection is closed." + (gnus-demon-add-handler 'gnus-demon-close-connections 5 nil)) + +(defun gnus-demon-nntp-close-connection () + (save-window-excursion + (when (nnmail-time-less '(0 300) + (nnmail-time-since nntp-last-command-time)) + (nntp-close-server)))) + (defun gnus-demon-add-scanmail () "Add daemonic scanning of mail from the mail backends." (gnus-demon-add-handler 'gnus-demon-scan-mail 120 60)) @@ -278,11 +291,15 @@ time Emacs has been idle for IDLE `gnus-demon-timestep's." (gnus-demon-add-handler 'gnus-demon-scan-news 120 60)) (defun gnus-demon-scan-news () - (save-window-excursion - (when (gnus-alive-p) - (save-excursion - (set-buffer gnus-group-buffer) - (gnus-group-get-new-news))))) + (let ((win (current-window-configuration))) + (unwind-protect + (save-window-excursion + (save-excursion + (when (gnus-alive-p) + (save-excursion + (set-buffer gnus-group-buffer) + (gnus-group-get-new-news))))) + (set-window-configuration win)))) (defun gnus-demon-add-scan-timestamps () "Add daemonic updating of timestamps in empty newgroups." diff --git a/lisp/gnus-group.el b/lisp/gnus-group.el index d63442b..6196b5f 100644 --- a/lisp/gnus-group.el +++ b/lisp/gnus-group.el @@ -1558,7 +1558,7 @@ be permanent." Returns whether the fetching was successful or not." (interactive "sGroup name: ") (unless (get-buffer gnus-group-buffer) - (gnus)) + (gnus-no-server)) (gnus-group-read-group nil nil group)) (defvar gnus-ephemeral-group-server 0) diff --git a/lisp/gnus-int.el b/lisp/gnus-int.el index 1fc205b..674f2be 100644 --- a/lisp/gnus-int.el +++ b/lisp/gnus-int.el @@ -361,12 +361,13 @@ If BUFFER, insert the article in that group." (defun gnus-request-scan (group gnus-command-method) "Request a SCAN being performed in GROUP from GNUS-COMMAND-METHOD. If GROUP is nil, all groups on GNUS-COMMAND-METHOD are scanned." - (let ((gnus-command-method - (if group (gnus-find-method-for-group group) gnus-command-method)) - (gnus-inhibit-demon t)) - (funcall (gnus-get-function gnus-command-method 'request-scan) - (and group (gnus-group-real-name group)) - (nth 1 gnus-command-method)))) + (when gnus-plugged + (let ((gnus-command-method + (if group (gnus-find-method-for-group group) gnus-command-method)) + (gnus-inhibit-demon t)) + (funcall (gnus-get-function gnus-command-method 'request-scan) + (and group (gnus-group-real-name group)) + (nth 1 gnus-command-method))))) (defsubst gnus-request-update-info (info gnus-command-method) "Request that GNUS-COMMAND-METHOD update INFO." diff --git a/lisp/gnus-msg.el b/lisp/gnus-msg.el index 12f06ae..86d5941 100644 --- a/lisp/gnus-msg.el +++ b/lisp/gnus-msg.el @@ -981,8 +981,12 @@ this is a reply." "Insert the Gcc to say where the article is to be archived." (let* ((var gnus-message-archive-group) (group (or group gnus-newsgroup-name "")) - result - gcc-self-val + (gcc-self-val + (and gnus-newsgroup-name + (setq gcc-self-val + (gnus-group-find-parameter + gnus-newsgroup-name 'gcc-self)))) + result (groups (cond ((null gnus-message-archive-method) @@ -1018,7 +1022,7 @@ this is a reply." (setq var (cdr var))) result))) name) - (when groups + (when (or groups gcc-self-val) (when (stringp groups) (setq groups (list groups))) (save-excursion @@ -1026,10 +1030,8 @@ this is a reply." (message-narrow-to-headers) (goto-char (point-max)) (insert "Gcc: ") - (if (and gnus-newsgroup-name - (setq gcc-self-val - (gnus-group-find-parameter - gnus-newsgroup-name 'gcc-self))) + (if gcc-self-val + ;; Use the `gcc-self' param value instead. (progn (insert (if (stringp gcc-self-val) @@ -1040,6 +1042,7 @@ this is a reply." (progn (beginning-of-line) (kill-line)))) + ;; Use the list of groups. (while (setq name (pop groups)) (insert (if (string-match ":" name) name diff --git a/lisp/gnus-salt.el b/lisp/gnus-salt.el index 955d203..07ba0b1 100644 --- a/lisp/gnus-salt.el +++ b/lisp/gnus-salt.el @@ -203,7 +203,7 @@ This must be bound to a button-down mouse event." (start-line (1+ (count-lines 1 start-point))) (start-window (posn-window start-posn)) (start-frame (window-frame start-window)) - (bounds (window-edges start-window)) + (bounds (gnus-window-edges start-window)) (top (nth 1 bounds)) (bottom (if (window-minibuffer-p start-window) (nth 3 bounds) diff --git a/lisp/gnus-score.el b/lisp/gnus-score.el index 59d4741..36692c7 100644 --- a/lisp/gnus-score.el +++ b/lisp/gnus-score.el @@ -1019,7 +1019,6 @@ SCORE is the score to add." (gnus-make-directory (file-name-directory file)) (setq gnus-score-edit-buffer (find-file-noselect file)) (gnus-configure-windows 'edit-score) - (select-window (get-buffer-window gnus-score-edit-buffer)) (gnus-score-mode) (setq gnus-score-edit-exit-function 'gnus-score-edit-done) (make-local-variable 'gnus-prev-winconf) diff --git a/lisp/gnus-sum.el b/lisp/gnus-sum.el index 5d5a4f0..dd6591f 100644 --- a/lisp/gnus-sum.el +++ b/lisp/gnus-sum.el @@ -33,6 +33,7 @@ (require 'gnus-range) (require 'gnus-int) (require 'gnus-undo) +(autoload 'gnus-summary-limit-include-cached "gnus-cache" nil t) (defcustom gnus-kill-summary-on-exit t "*If non-nil, kill the summary buffer when you exit from it. @@ -1248,6 +1249,7 @@ increase the score of each group you read." "u" gnus-summary-limit-to-unread "m" gnus-summary-limit-to-marks "v" gnus-summary-limit-to-score + "*" gnus-summary-limit-include-cached "D" gnus-summary-limit-include-dormant "T" gnus-summary-limit-include-thread "d" gnus-summary-limit-exclude-dormant @@ -4408,7 +4410,7 @@ The resulting hash table is returned, or nil if no Xrefs were found." (let ((num (ignore-errors (read buffer)))) (if (numberp num) num 0))) (unless (eobp) - (forward-char 1)))) + (search-forward "\t" eol 'move)))) (defmacro gnus-nov-skip-field () '(search-forward "\t" eol 'move)) @@ -5824,7 +5826,7 @@ NUMBER articles will be popped off." (setq gnus-newsgroup-history (cdr (setq to (nthcdr number gnus-newsgroup-history)))) (if to - (gnus-summary-goto-article (car to)) + (gnus-summary-goto-article (car to) nil t) (error "Article history empty"))) (gnus-summary-position-point)) @@ -7603,8 +7605,8 @@ returned." (defun gnus-summary-mark-article-as-unread (mark) "Mark the current article quickly as unread with MARK." (let ((article (gnus-summary-article-number))) - (if (< article 0) - (gnus-error 1 "Unmarkable article") + (if (<= article 0) + (gnus-error 1 "Can't mark negative article numbers") (setq gnus-newsgroup-marked (delq article gnus-newsgroup-marked)) (setq gnus-newsgroup-dormant (delq article gnus-newsgroup-dormant)) (setq gnus-newsgroup-expirable (delq article gnus-newsgroup-expirable)) @@ -7740,19 +7742,24 @@ marked." gnus-newsgroup-expirable (delq article gnus-newsgroup-expirable) gnus-newsgroup-unreads (delq article gnus-newsgroup-unreads)) - ;; Unsuppress duplicates? - (when gnus-suppress-duplicates - (gnus-dup-unsuppress-article article)) - - (cond ((= mark gnus-ticked-mark) - (push article gnus-newsgroup-marked)) - ((= mark gnus-dormant-mark) - (push article gnus-newsgroup-dormant)) - (t - (push article gnus-newsgroup-unreads))) - (setq gnus-newsgroup-reads - (delq (assq article gnus-newsgroup-reads) - gnus-newsgroup-reads)))) + (if (<= article 0) + (progn + (gnus-error 1 "Can't mark negative article numbers") + nil) + ;; Unsuppress duplicates? + (when gnus-suppress-duplicates + (gnus-dup-unsuppress-article article)) + + (cond ((= mark gnus-ticked-mark) + (push article gnus-newsgroup-marked)) + ((= mark gnus-dormant-mark) + (push article gnus-newsgroup-dormant)) + (t + (push article gnus-newsgroup-unreads))) + (setq gnus-newsgroup-reads + (delq (assq article gnus-newsgroup-reads) + gnus-newsgroup-reads)) + t))) (defalias 'gnus-summary-mark-as-unread-forward 'gnus-summary-tick-article-forward) diff --git a/lisp/gnus-uu.el b/lisp/gnus-uu.el index 48c502d..8e095f6 100644 --- a/lisp/gnus-uu.el +++ b/lisp/gnus-uu.el @@ -634,6 +634,7 @@ didn't work, and overwrite existing files. Otherwise, ask each time." (defun gnus-uu-invert-processable () "Invert the list of process-marked articles." + (interactive) (let ((data gnus-newsgroup-data) d number) (save-excursion diff --git a/lisp/gnus-xmas.el b/lisp/gnus-xmas.el index bb49aab..02ed971 100644 --- a/lisp/gnus-xmas.el +++ b/lisp/gnus-xmas.el @@ -417,6 +417,7 @@ call it with the value of the `gnus-data' text property." (fset 'gnus-add-text-properties 'gnus-xmas-add-text-properties) (fset 'gnus-put-text-property 'gnus-xmas-put-text-property) (fset 'gnus-deactivate-mark 'ignore) + (fset 'gnus-window-edges 'window-pixel-edges) (require 'text-props) (if (and (<= emacs-major-version 19) diff --git a/lisp/gnus.el b/lisp/gnus.el index 34e6cb9..cacbd7d 100644 --- a/lisp/gnus.el +++ b/lisp/gnus.el @@ -244,7 +244,7 @@ is restarted, and sometimes reloaded." :link '(custom-manual "(gnus)Exiting Gnus") :group 'gnus) -(defconst gnus-version-number "0.11" +(defconst gnus-version-number "0.12" "Version number for this version of Gnus.") (defconst gnus-version (format "Quassia Gnus v%s" gnus-version-number) @@ -281,47 +281,9 @@ be set in `.emacs' instead." (defalias 'gnus-mode-line-buffer-identification 'identity) (defalias 'gnus-characterp 'numberp) (defalias 'gnus-deactivate-mark 'deactivate-mark) + (defalias 'gnus-window-edges 'window-edges) (defalias 'gnus-key-press-event-p 'numberp)) -;; The XEmacs people think this is evil, so it must go. -(defun custom-face-lookup (&optional fg bg stipple bold italic underline) - "Lookup or create a face with specified attributes." - (let ((name (intern (format "custom-face-%s-%s-%s-%S-%S-%S" - (or fg "default") - (or bg "default") - (or stipple "default") - bold italic underline)))) - (if (and (custom-facep name) - (fboundp 'make-face)) - () - (copy-face 'default name) - (when (and fg - (not (string-equal fg "default"))) - (ignore-errors - (set-face-foreground name fg))) - (when (and bg - (not (string-equal bg "default"))) - (ignore-errors - (set-face-background name bg))) - (when (and stipple - (not (string-equal stipple "default")) - (not (eq stipple 'custom:asis)) - (fboundp 'set-face-stipple)) - (set-face-stipple name stipple)) - (when (and bold - (not (eq bold 'custom:asis))) - (ignore-errors - (make-face-bold name))) - (when (and italic - (not (eq italic 'custom:asis))) - (ignore-errors - (make-face-italic name))) - (when (and underline - (not (eq underline 'custom:asis))) - (ignore-errors - (set-face-underline-p name t)))) - name)) - ;; We define these group faces here to avoid the display ;; update forced when creating new faces. @@ -1397,6 +1359,9 @@ want." :group 'gnus-article-saving :type 'directory) +(defvar gnus-plugged t + "Whether Gnus is plugged or not.") + ;;; Internal variables diff --git a/lisp/message.el b/lisp/message.el index 257d226..2c062d5 100644 --- a/lisp/message.el +++ b/lisp/message.el @@ -199,13 +199,13 @@ included. Organization, Lines and X-Mailer are optional." :type 'sexp) (defcustom message-ignored-news-headers - "^NNTP-Posting-Host:\\|^Xref:\\|^Bcc:\\|^Gcc:\\|^Fcc:\\|^Resent-Fcc:" + "^NNTP-Posting-Host:\\|^Xref:\\|^[BGF]cc:\\|^Resent-Fcc:" "*Regexp of headers to be removed unconditionally before posting." :group 'message-news :group 'message-headers :type 'regexp) -(defcustom message-ignored-mail-headers "^Gcc:\\|^Fcc:\\|^Resent-Fcc:" +(defcustom message-ignored-mail-headers "^[GF]cc:\\|^Resent-Fcc:" "*Regexp of headers to be removed unconditionally before mailing." :group 'message-mail :group 'message-headers @@ -1074,7 +1074,8 @@ Return the number of headers removed." (save-excursion (save-restriction (message-narrow-to-headers) - (message-fetch-field "newsgroups"))))) + (and (message-fetch-field "newsgroups") + (not (message-fetch-field "posted-to"))))))) (defun message-mail-p () "Say whether the current buffer contains a mail message." @@ -1267,16 +1268,19 @@ C-c C-r message-caesar-buffer-body (rot13 the message body)." facemenu-remove-face-function t) (make-local-variable 'paragraph-separate) (make-local-variable 'paragraph-start) - (setq paragraph-start (concat (regexp-quote mail-header-separator) - "$\\|[ \t]*[-_][-_][-_]+$\\|" - "-- $\\|" - "[> ]+$\\|" - paragraph-start)) - (setq paragraph-separate (concat (regexp-quote mail-header-separator) - "$\\|[ \t]*[-_][-_][-_]+$\\|" - "-- $\\|" - "[> ]+$\\|" - paragraph-separate)) + (setq paragraph-start + (concat (regexp-quote mail-header-separator) + "$\\|[ \t]*[-_][-_][-_]+$\\|" + "-- $\\|" + ;;!!! Uhm... shurely this can't be right. + "[> " (regexp-quote message-yank-prefix) "]+$\\|" + paragraph-start)) + (setq paragraph-separate + (concat (regexp-quote mail-header-separator) + "$\\|[ \t]*[-_][-_][-_]+$\\|" + "-- $\\|" + "[> " (regexp-quote message-yank-prefix) "]+$\\|" + paragraph-separate)) (make-local-variable 'message-reply-headers) (setq message-reply-headers nil) (make-local-variable 'message-newsreader) diff --git a/lisp/messcompat.el b/lisp/messcompat.el index 19371fe..ca29462 100644 --- a/lisp/messcompat.el +++ b/lisp/messcompat.el @@ -56,8 +56,9 @@ nil means let mailer mail back a message to report errors.") "Normal hook, run each time a new outgoing message is initialized. The function `message-setup' runs this hook.") -(defvar message-mode-hook mail-mode-hook - "Hook run in message mode buffers.") +(if (boundp 'mail-mode-hook) + (defvar message-mode-hook mail-mode-hook + "Hook run in message mode buffers.")) (defvar message-indentation-spaces mail-indentation-spaces "*Number of spaces to insert at the beginning of each cited line. diff --git a/lisp/nndraft.el b/lisp/nndraft.el index 31eaf32..5e134ec 100644 --- a/lisp/nndraft.el +++ b/lisp/nndraft.el @@ -125,6 +125,8 @@ "Request a new buffer that is restored to the state of ARTICLE." (nndraft-possibly-change-group group) (when (nndraft-request-article article group server (current-buffer)) + (message-remove-header "xrefs") + (message-remove-header "lines") (let ((gnus-verbose-backends nil)) (nndraft-request-expire-articles (list article) group server t)) t)) @@ -162,9 +164,8 @@ (deffoo nndraft-request-expire-articles (articles group &optional server force) (nndraft-possibly-change-group group) (let* ((nnmh-allow-delete-final t) - (res (nndraft-execute-nnmh-command - `(nnmh-request-expire-articles - ',articles group ,server ,force))) + (res (nnmh-request-expire-articles + articles group server force)) article) ;; Delete all the "state" files of articles that have been expired. (while articles @@ -178,8 +179,7 @@ (deffoo nndraft-request-accept-article (group &optional server last noinsert) (nndraft-possibly-change-group group) (let ((gnus-verbose-backends nil)) - (nndraft-execute-nnmh-command - `(nnmh-request-accept-article group ,server ,last noinsert)))) + (nnmh-request-accept-article group server last noinsert))) (deffoo nndraft-request-create-group (group &optional server args) (nndraft-possibly-change-group group) @@ -199,19 +199,11 @@ (defun nndraft-possibly-change-group (group) (when (and group (not (equal group nndraft-current-group))) + (nndraft-open-server "") (setq nndraft-current-group group) (setq nndraft-current-directory (nnheader-concat nndraft-directory group)))) -(defun nndraft-execute-nnmh-command (command) - (let* ((dir (directory-file-name - (expand-file-name nndraft-current-directory))) - (group (file-name-nondirectory dir)) - (nnmh-directory (file-name-directory dir)) - (nnmail-keep-last-article nil) - (nnmh-get-new-mail nil)) - (eval command))) - (defun nndraft-article-filename (article &rest args) (apply 'concat (file-name-as-directory nndraft-current-directory) diff --git a/lisp/nnmail.el b/lisp/nnmail.el index 200d060..4fde8c8 100644 --- a/lisp/nnmail.el +++ b/lisp/nnmail.el @@ -405,7 +405,7 @@ Example: :group 'nnmail-split :type '(repeat (cons :format "%v" symbol regexp))) -(defcustom nnmail-delete-incoming t +(defcustom nnmail-delete-incoming nil "*If non-nil, the mail backends will delete incoming files after splitting." :group 'nnmail-retrieve @@ -1038,14 +1038,13 @@ FUNC will be called with the buffer narrowed to each mail." (funcall exit-func)) (kill-buffer (current-buffer))))) -;; Mail crossposts suggested by Brian Edmonds . (defun nnmail-article-group (func) "Look at the headers and return an alist of groups that match. FUNC will be called with the group name to determine the article number." (let ((methods nnmail-split-methods) (obuf (current-buffer)) (beg (point-min)) - end group-art method) + end group-art method regrepp) (if (and (sequencep methods) (= (length methods) 1)) ;; If there is only just one group to put everything in, we ;; just return a list with just this one method in. @@ -1092,21 +1091,31 @@ FUNC will be called with the group name to determine the article number." (lambda (group) (cons group (funcall func group))) split)))) ;; Go through the split methods to find a match. - (while (and methods (or nnmail-crosspost (not group-art))) + (while (and methods + (or nnmail-crosspost + (not group-art))) (goto-char (point-max)) - (setq method (pop methods)) + (setq method (pop methods) + regrepp nil) (if (or methods (not (equal "" (nth 1 method)))) (when (and (ignore-errors (if (stringp (nth 1 method)) - (re-search-backward (cadr method) nil t) + (progn + (setq regrepp + (string-match "\\\\[0-9&]" (car method))) + (re-search-backward (cadr method) nil t)) ;; Function to say whether this is a match. (funcall (nth 1 method) (car method)))) ;; Don't enter the article into the same ;; group twice. (not (assoc (car method) group-art))) - (push (cons (car method) (funcall func (car method))) + (push (cons (if regrepp + (replace-match + (car method) nil nil (car method)) + (car method)) + (funcall func (car method))) group-art)) ;; This is the final group, which is used as a ;; catch-all. diff --git a/lisp/nnmh.el b/lisp/nnmh.el index 6db83bd..900eede 100644 --- a/lisp/nnmh.el +++ b/lisp/nnmh.el @@ -145,6 +145,7 @@ (string-to-int (file-name-nondirectory file))))) (deffoo nnmh-request-group (group &optional server dont-check) + (nnmh-possibly-change-directory group server) (let ((pathname (nnmail-group-pathname group nnmh-directory)) (pathname-coding-system 'binary) dir) diff --git a/lisp/nntp.el b/lisp/nntp.el index d1470f6..2971db9 100644 --- a/lisp/nntp.el +++ b/lisp/nntp.el @@ -168,6 +168,7 @@ server there that you can connect to. See also `nntp-open-connection-function'" (defvar nntp-process-decode nil) (defvar nntp-process-start-point nil) (defvar nntp-inside-change-function nil) +(defvoo nntp-last-command-time nil) (defvar nntp-connection-list nil) @@ -261,6 +262,7 @@ server there that you can connect to. See also `nntp-open-connection-function'" (defsubst nntp-retrieve-data (command address port buffer &optional wait-for callback decode) "Use COMMAND to retrieve data into BUFFER from PORT on ADDRESS." + (setq nntp-last-command-time (current-time)) (let ((process (or (nntp-find-connection buffer) (nntp-open-connection buffer)))) (if (not process) @@ -896,7 +898,12 @@ This function is supposed to be called from `nntp-server-opened-hook'." (insert "\n")) ;; Insert `.' at end of buffer (end of text mark). (goto-char (point-max)) - (insert "." nntp-end-of-line))) + (insert ".\n") + (goto-char (point-min)) + (while (not (eobp)) + (end-of-line) + (insert "\r") + (forward-line 1)))) (defun nntp-retrieve-headers-with-xover (articles &optional fetch-old) (set-buffer nntp-server-buffer) diff --git a/texi/ChangeLog b/texi/ChangeLog index f883167..c4608be 100644 --- a/texi/ChangeLog +++ b/texi/ChangeLog @@ -1,3 +1,17 @@ +Wed Oct 1 18:37:55 1997 Lars Magne Ingebrigtsen + + * gnus.texi (Startup Files): Addition. + +Sat Sep 27 09:37:17 1997 Lars Magne Ingebrigtsen + + * message.texi (Sending Variables): Fix. + + * gnus.texi (Choosing Commands): Addition. + +Sat Sep 27 05:56:44 1997 Hallvard B. Furuseth + + * gnus.texi: Various fixes. + Sat Sep 27 04:24:41 1997 Lars Magne Ingebrigtsen * message.texi (Various Commands): Addition. diff --git a/texi/gnus-faq.texi b/texi/gnus-faq.texi index a6fb13a..abc9054 100644 --- a/texi/gnus-faq.texi +++ b/texi/gnus-faq.texi @@ -1,4 +1,4 @@ -\input texinfo +@c Insert "\input texinfo" at 1st line before texing this file alone. @c -*-texinfo-*- @c Copyright (C) 1995 Free Software Foundation, Inc. @setfilename gnus-faq.info diff --git a/texi/gnus.texi b/texi/gnus.texi index e70d9f9..c262bc5 100644 --- a/texi/gnus.texi +++ b/texi/gnus.texi @@ -833,7 +833,9 @@ files was the most recently saved, which enabled people to swap between That was kinda silly, so Gnus went one better: In addition to the @file{.newsrc} and @file{.newsrc.el} files, Gnus also has a file called @file{.newsrc.eld}. It will read whichever of these files that are most -recent, but it will never write a @file{.newsrc.el} file. +recent, but it will never write a @file{.newsrc.el} file. You should +never delete the @file{.newsrc.eld} file---it contains much information +not stored in the @file{.newsrc} file. @vindex gnus-save-newsrc-file You can turn off writing the @file{.newsrc} file by setting @@ -3157,7 +3159,7 @@ cases. If this is unacceptable to you, use the other function instead. @vindex gnus-summary-same-subject @code{gnus-summary-same-subject} is a string indicating that the current article has the same subject as the previous. This string will be used -with those specs that require it. The default is @samp{}. +with those specs that require it. The default is @code{""}. @node Summary Buffer Lines @@ -3181,7 +3183,7 @@ Subject string. @item s Subject if the article is the root of the thread or the previous article had a different subject, @code{gnus-summary-same-subject} otherwise. -(@code{gnus-summary-same-subject} defaults to @samp{}.) +(@code{gnus-summary-same-subject} defaults to @code{""}.) @item F Full @code{From} header. @item n @@ -3543,8 +3545,9 @@ Go to the previous article read (@code{gnus-summary-goto-last-article}). Pop an article off the summary history and go to this article (@code{gnus-summary-pop-article}). This command differs from the command above in that you can pop as many previous articles off the -history as you like. For a somewhat related issue (if you use this -command a lot), @pxref{Article Backlog}. +history as you like, while @kbd{l} toggles the two last read articles. +For a somewhat related issue (if you use these commands a lot), +@pxref{Article Backlog}. @end table @@ -6879,7 +6882,7 @@ A hook called in all tree mode buffers. @item gnus-tree-mode-line-format @vindex gnus-tree-mode-line-format A format string for the mode bar in the tree mode buffers. The default -is @samp{Gnus: %%b [%A] %Z}. For a list of valid specs, @pxref{Summary +is @samp{Gnus: %%b %S %Z}. For a list of valid specs, @pxref{Summary Buffer Mode Line}. @item gnus-selected-tree-face @@ -6922,7 +6925,7 @@ Variables related to the display are: This is used for differentiating between ``real'' articles and ``sparse'' articles. The format is @var{((real-open . real-close) (sparse-open . sparse-close) (dummy-open . dummy-close))}, and the -default is @code{((?[ . ?]) (?( . ?)) (?@{ . ?@}))}. +default is @code{((?[ . ?]) (?( . ?)) (?@{ . ?@}) (?< . ?>))}. @item gnus-tree-parent-child-edges @vindex gnus-tree-parent-child-edges @@ -8028,7 +8031,10 @@ use to store sent messages. The default is: @lisp (nnfolder "archive" - (nnfolder-directory "~/Mail/archive/")) + (nnfolder-directory "~/Mail/archive") + (nnfolder-active-file "~/Mail/archive/active") + (nnfolder-get-new-mail nil) + (nnfolder-inhibit-expiry t)) @end lisp You can, however, use any mail select method (@code{nnml}, @@ -8972,7 +8978,7 @@ and might be useful, for instance, to speed up reading groups that contain very big articles---@samp{alt.binaries.pictures.furniture}, for instance. -Anyways, you just specify @code{nnspool} as the method and @samp{} (or +Anyways, you just specify @code{nnspool} as the method and @code{""} (or anything else) as the address. If you have access to a local spool, you should probably use that as the @@ -9118,7 +9124,13 @@ This variable is a list of lists, where the first element of each of these lists is the name of the mail group (they do not have to be called something beginning with @samp{mail}, by the way), and the second element is a regular expression used on the header of each mail to -determine if it belongs in this mail group. +determine if it belongs in this mail group. The first string may +contain @samp{\\1} forms, like the ones used by @code{replace-match} to +insert sub-expressions from the matched text. For instance: + +@lisp +("list.\\1" "From:.*\\(.*\\)-list@@majordomo.com") +@end lisp If the first element is the special symbol @code{junk}, then messages that match the regexp will disappear into the aether. Use with @@ -13992,6 +14004,7 @@ your @file{.gnus} file: @findex gnus-demon-add-disconnection Some ready-made functions to do this have been created: @code{gnus-demon-add-nocem}, @code{gnus-demon-add-disconnection}, +@code{gnus-demon-add-nntp-close-connection}, @code{gnus-demon-add-scan-timestamps}, @code{gnus-demon-add-rescan}, and @code{gnus-demon-add-scanmail}. Just put those functions in your @file{.gnus} if you want those abilities. @@ -14049,7 +14062,8 @@ default is @code{("news.lists.filters" "news.admin.net-abuse.bulletins" @vindex gnus-nocem-issuers There are many people issuing NoCeM messages. This list says what people you want to listen to. The default is @code{("Automoose-1" -"clewis@@ferret.ocunix.on.ca;" "jem@@xpat.com;" "red@@redpoll.mrfs.oh.us +"rbraver@@ohww.norman.ok.us" "clewis@@ferret.ocunix.on.ca" +"jem@@xpat.com" "snowhare@@xmission.com" "red@@redpoll.mrfs.oh.us (Richard E. Depew)")}; fine, upstanding citizens all of them. Known despammers that you can put in this list include: @@ -15847,6 +15861,7 @@ could point your Web browser over that-a-way. @iftex +@page @node The Manual @section The Manual @cindex colophon @@ -15908,6 +15923,7 @@ of the mysteries of this world, I guess.) @end iftex +@page @node Terminology @section Terminology @@ -16092,6 +16108,7 @@ specified by RFC1153. @end table +@page @node Customization @section Customization @cindex general customization @@ -16218,6 +16235,7 @@ Set @code{gnus-article-display-hook} to @code{nil} to make article processing a bit faster. +@page @node Troubleshooting @section Troubleshooting @cindex troubleshooting @@ -16294,6 +16312,7 @@ You can also ask on the ding mailing list---@samp{ding@@gnus.org}. Write to @samp{ding-request@@gnus.org} to subscribe. +@page @node A Programmers Guide to Gnus @section A Programmer@'s Guide to Gnus @@ -17646,6 +17665,7 @@ description = @end example +@page @node Emacs for Heathens @section Emacs for Heathens @@ -17765,7 +17785,7 @@ On the other hand, if the manual says ``set @code{gnus-nntp-server} to So be careful not to mix up strings (the latter) with symbols (the former). The manual is unambiguous, but it can be confusing. - +@page @include gnus-faq.texi @node Index diff --git a/texi/message.texi b/texi/message.texi index 4371e49..c5f8b18 100644 --- a/texi/message.texi +++ b/texi/message.texi @@ -229,7 +229,7 @@ supersede the message in the current buffer. Headers matching the @code{message-ignored-supersedes-headers} are removed before popping up the new message buffer. The default is@* @samp{^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|@* -^Received:\\|^X-From-Line:\\|Return-Path:}. +^Received:\\|^X-From-Line:\\|Return-Path:\\|^Supersedes:}. @@ -292,7 +292,7 @@ undeliverable. @vindex message-ignored-bounced-headers Headers that match the @code{message-ignored-bounced-headers} regexp will be removed before popping up the buffer. The default is -@samp{^Received:}. +@samp{^\\(Received\\|Return-Path\\):}. @node Commands @@ -705,7 +705,7 @@ buffers. @item message-ignored-mail-headers @vindex message-ignored-mail-headers Regexp of headers to be removed before mailing. The default is -@samp{^Gcc:\\|^Fcc:}. +@samp{^[GF]cc:\\|^Resent-Fcc:}. @item message-default-mail-headers @vindex message-default-mail-headers @@ -905,7 +905,7 @@ All these conditions are checked by default. @item message-ignored-news-headers @vindex message-ignored-news-headers Regexp of headers to be removed before posting. The default is@* -@samp{^NNTP-Posting-Host:\\|^Xref:\\|^Bcc:\\|^Gcc:\\|^Fcc:}. +@samp{^NNTP-Posting-Host:\\|^Xref:\\|^[BGF]cc:\\|^Resent-Fcc:}. @item message-default-news-headers @vindex message-default-news-headers @@ -979,7 +979,8 @@ you send to mailing lists, you could do something like the following: (gnus-group-find-parameter group 'to-list)) (insert "Mail-Copies-To: never\n")))) -(add-hook 'message-header-setup-hook 'my-message-header-setup-hook) +(add-hook 'message-header-setup-hook + 'my-message-header-setup-hook) @end lisp @item message-send-hook @@ -1059,7 +1060,7 @@ A function to be called if @var{predicate} returns non-@code{nil}. @vindex message-fcc-handler-function A function called to save outgoing articles. This function will be called with the name of the file to store the article in. The default -function is @code{rmail-output} which saves in Unix mailbox format. +function is @code{message-output} which saves in Unix mailbox format. @item message-courtesy-message @vindex message-courtesy-message -- 1.7.10.4