*** `M-RET' is a new Message command for breaking cited text.
+*** \\1-expressions are now valid in `nnmail-split-methods'.
+
* gnus.el: Quassia Gnus v0.1 is released.
+Sat Oct 4 00:53:55 1997 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Quassia Gnus v0.12 is released.
+
+Sat Oct 4 00:16:39 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * 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 <larsi@ifi.uio.no>
+
+ * 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 <larsi@ifi.uio.no>
+
+ * 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 <larsi@ifi.uio.no>
+
+ * 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 <h.b.furuseth@usit.uio.no>
+
+ * messcompat.el ((boundp 'mail-mode-hook)): Check.
+
+Sat Sep 27 09:22:15 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * 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 <h.b.furuseth@usit.uio.no>
+
+ * gnus-cache.el (gnus-summary-limit-include-cached): New command
+ and keystroke.
+
+Sat Sep 27 06:45:58 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-uu.el (gnus-uu-invert-processable): Make interactive.
+
+Sat Sep 27 06:43:38 1997 Kim-Minh Kaplan <kimminh.kaplan@utopia.eunet.fr>
+
+ * gnus-picon.el: Doc fixes.
+
+1997-09-23 Hrvoje Niksic <hniksic@srce.hr>
+
+ * gnus.el: Removed definition of `custom-face-lookup'.
+
+Sat Sep 27 05:36:11 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * 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 <larsi@menja.ifi.uio.no>
* gnus.el: Quassia Gnus v0.11 is released.
(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)
"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
;;;
;;; 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
"^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
(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)
;; `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)
(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)
(require 'gnus)
(require 'gnus-int)
(require 'nnheader)
+(require 'nntp)
(eval-and-compile
(if (string-match "XEmacs" (emacs-version))
(require 'itimer)
(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))
(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."
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)
(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."
"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)
(setq var (cdr var)))
result)))
name)
- (when groups
+ (when (or groups gcc-self-val)
(when (stringp groups)
(setq groups (list groups)))
(save-excursion
(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)
(progn
(beginning-of-line)
(kill-line))))
+ ;; Use the list of groups.
(while (setq name (pop groups))
(insert (if (string-match ":" name)
name
(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)
(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)
(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.
"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
(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))
(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))
(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))
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)
(defun gnus-uu-invert-processable ()
"Invert the list of process-marked articles."
+ (interactive)
(let ((data gnus-newsgroup-data)
d number)
(save-excursion
(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)
: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)
(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.
:group 'gnus-article-saving
:type 'directory)
+(defvar gnus-plugged t
+ "Whether Gnus is plugged or not.")
+
\f
;;; Internal variables
: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
(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."
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)
"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.
"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))
(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
(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)
(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)
: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
(funcall exit-func))
(kill-buffer (current-buffer)))))
-;; Mail crossposts suggested by Brian Edmonds <edmonds@cs.ubc.ca>.
(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.
(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.
(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)
(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)
(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)
(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)
+Wed Oct 1 18:37:55 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.texi (Startup Files): Addition.
+
+Sat Sep 27 09:37:17 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * message.texi (Sending Variables): Fix.
+
+ * gnus.texi (Choosing Commands): Addition.
+
+Sat Sep 27 05:56:44 1997 Hallvard B. Furuseth <h.b.furuseth@usit.uio.no>
+
+ * gnus.texi: Various fixes.
+
Sat Sep 27 04:24:41 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
* message.texi (Various Commands): Addition.
-\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
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
@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
@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
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
@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
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
@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},
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
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
@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.
@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:
@iftex
+@page
@node The Manual
@section The Manual
@cindex colophon
@end iftex
+@page
@node Terminology
@section Terminology
@end table
+@page
@node Customization
@section Customization
@cindex general customization
processing a bit faster.
+@page
@node Troubleshooting
@section Troubleshooting
@cindex troubleshooting
Write to @samp{ding-request@@gnus.org} to subscribe.
+@page
@node A Programmers Guide to Gnus
@section A Programmer@'s Guide to Gnus
@end example
+@page
@node Emacs for Heathens
@section Emacs for Heathens
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
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:}.
@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
@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
@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
(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
@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