(defun gnus-cache-file-name (group article)
(concat (file-name-as-directory gnus-cache-directory)
- (if (gnus-use-long-file-name 'not-cache)
- group
- (let ((group (concat group "")))
- (if (string-match ":" group)
- (aset group (match-beginning 0) ?/))
- (gnus-replace-chars-in-string group ?. ?/)))
- "/" (if (stringp article) article (int-to-string article))))
+ (file-name-as-directory
+ (if (gnus-use-long-file-name 'not-cache)
+ group
+ (let ((group (concat group "")))
+ (if (string-match ":" group)
+ (aset group (match-beginning 0) ?/))
+ (gnus-replace-chars-in-string group ?. ?/))))
+ (if (stringp article) article (int-to-string article))))
(defun gnus-cache-possibly-enter-article
(group article headers ticked dormant unread)
(defvar gnus-post-news-buffer "*post-news*")
(defvar gnus-mail-buffer "*mail*")
(defvar gnus-summary-send-map nil)
+(defvar gnus-send-bounce-map nil)
(defvar gnus-article-copy nil)
(defvar gnus-reply-subject nil)
(defvar gnus-add-to-address nil)
(define-key gnus-summary-send-map "r" 'gnus-summary-reply)
(define-key gnus-summary-send-map "R" 'gnus-summary-reply-with-original)
(define-key gnus-summary-send-map "m" 'gnus-summary-mail-other-window)
-(define-key gnus-summary-send-map "Db" 'gnus-summary-resend-bounced-mail)
-(define-key gnus-summary-send-map "Dc" 'gnus-summary-send-draft)
(define-key gnus-summary-send-map "u" 'gnus-uu-post-news)
(define-key gnus-summary-send-map "om" 'gnus-summary-mail-forward)
(define-key gnus-summary-send-map "op" 'gnus-summary-post-forward)
(define-key gnus-summary-send-map "Om" 'gnus-uu-digest-mail-forward)
(define-key gnus-summary-send-map "Op" 'gnus-uu-digest-post-forward)
+(define-prefix-command 'gnus-send-bounce-map)
+(define-key gnus-summary-send-map "D" 'gnus-send-bounce-map)
+(define-key gnus-send-bounce-map "b" 'gnus-summary-resend-bounced-mail)
+(define-key gnus-send-bounce-map "c" 'gnus-summary-send-draft)
+(define-key gnus-send-bounce-map "r" 'gnus-summary-resend-message)
+
;;; Internal functions.
(defun gnus-number-base36 (num len)
(delete-region (progn (beginning-of-line) (point))
(progn (forward-line 1) (point))))
(setq headers (cdr headers)))))
-
+
+;;; Since the X-Newsreader/X-Mailer are ``vanity'' headers, they might
+;;; as well include the Emacs version as well.
+;;; The following function works with later GNU Emacs, and XEmacs.
+(defun gnus-extended-version ()
+ "Stringified Gnus version and Emacs version"
+ (interactive)
+ (concat
+ gnus-version
+ "/"
+ (cond
+ ((string-match "^\\([0-9]+\\.[0-9]+\\)\\.[.0-9]+$" emacs-version)
+ (concat "Emacs " (substring emacs-version
+ (match-beginning 1)
+ (match-end 1))))
+ ((string-match "\\([A-Z]*[Mm][Aa][Cc][Ss]\\)" emacs-version)
+ (concat (substring emacs-version
+ (match-beginning 1)
+ (match-end 1))
+ (format " %d.%d" emacs-major-version emacs-minor-version)))
+ (t emacs-version))))
+
(defun gnus-inews-insert-headers (&optional headers)
"Prepare article headers.
Headers already prepared in the buffer are not modified.
(To nil)
(Distribution nil)
(Lines (gnus-inews-lines))
- (X-Newsreader gnus-version)
- (X-Mailer gnus-version)
+ (X-Newsreader (gnus-extended-version))
+ (X-Mailer (gnus-extended-version))
(headers (or headers gnus-required-headers))
(case-fold-search t)
header value elem)
(forward-line -1))
;; The value of this header was empty, so we clear
;; totally and insert the new value.
- (delete-region (point) (gnus-point-at-bol))
+ (delete-region (point) (gnus-point-at-eol))
(insert value))
;; Add the deletable property to the headers that require it.
(and (memq header gnus-deletable-headers)
(gnus-forward-using-post gnus-article-copy)
(gnus-mail-forward gnus-article-copy)))
+(defun gnus-summary-resend-message (address)
+ "Resend the current article to ADDRESS."
+ (interactive "sResend message to: ")
+ (gnus-summary-select-article)
+ (save-excursion
+ (let (resent)
+ ;; We first set up a normal mail buffer.
+ (nnheader-set-temp-buffer " *Gnus resend*")
+ (gnus-mail-setup 'new address)
+ ;; Insert our usual headers.
+ (gnus-inews-narrow-to-headers)
+ (let ((headers '(From Date To Message-ID Organization)))
+ (gnus-inews-insert-headers headers))
+ (goto-char (point-min))
+ ;; Rename them all to "Resent-*".
+ (while (re-search-forward "^" nil t)
+ (insert "Resent-"))
+ (widen)
+ (delete-region (point) (point-max))
+ ;; Insert the message to be resent.
+ (insert-buffer-substring gnus-original-article-buffer)
+ (goto-char (point-min))
+ (search-forward "\n\n")
+ (forward-char -1)
+ (insert mail-header-separator)
+ ;; Send it.
+ (mail-send)
+ (kill-buffer (current-buffer)))))
+
(defun gnus-summary-post-forward ()
"Forward the current article to a newsgroup."
(interactive)
mailer."
(interactive)
(gnus-set-global-variables)
- (gnus-new-mail))
+ (gnus-new-mail
+ ;; We might want to prompt here.
+ (when (and gnus-interactive-post
+ (not gnus-expert-user))
+ (read-string "To: ")))
+ (gnus-configure-windows 'summary-mail 'force))
(defun gnus-new-mail (&optional to)
(let (subject)
(list (list ?t (current-time-string) "temporary")
'(?p perm "permanent") '(?i now "immediate")))
(mimic gnus-score-mimic-keymap)
- hchar entry temporary tchar pchar end type)
+ hchar entry temporary tchar pchar end type match)
;; First we read the header to score.
(while (not hchar)
(if mimic
;; We have all the data, so we enter this score.
(if end
()
+ (setq match (if (string= (nth 2 entry) "") ""
+ (gnus-summary-header (or (nth 2 entry) (nth 1 entry)))))
+
+ ;; Modify the match, perhaps.
+ (cond
+ ((equal (nth 1 entry) "xref")
+ (when (string-match "^Xref: *" match)
+ (setq match (substring match (match-end 0))))
+ (when (string-match "^[^:]* +" match)
+ (setq match (substring match (match-end 0))))))
+
(gnus-summary-score-entry
(nth 1 entry) ; Header
- (if (string= (nth 2 entry) "") ""
- (gnus-summary-header (or (nth 2 entry) (nth 1 entry)))) ; Match
+ match ; Match
type ; Type
(if (eq 's score) nil score) ; Score
(if (eq 'perm temporary) ; Temp
--- /dev/null
+;;; gnus-setup.el --- Initialization & Setup for Gnus 5
+;; Copyright (C) 1995 Miranova Systems, Inc.
+
+;; Author: Steven L. Baur <steve@miranova.com>
+;; Keywords: news
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING. If not, write to
+;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+
+;;; Commentary:
+;; My head is starting to spin with all the different mail/news packages.
+;; Stop The Madness!
+
+;;; Code:
+
+(defvar gnus-gnus-lisp-directory "/usr/lib/xemacs/gnus-5.0/lisp/"
+ "Directory where Gnus Emacs lisp is found.")
+(defvar gnus-sgnus-lisp-directory "/usr/lib/xemacs/sgnus/lisp/"
+ "Directory where September Gnus Emacs lisp is found.")
+(defvar gnus-tm-lisp-directory "/usr/lib/xemacs/site-lisp/"
+ "Directory where TM Emacs lisp is found.")
+
+(defvar gnus-mailcrypt-lisp-directory
+ "/usr/lib/xemacs/site-lisp/mailcrypt-3.4/"
+ "Directory where Mailcrypt Emacs Lisp is found.")
+
+(defvar gnus-use-tm t
+ "Set this if you want MIME support for Gnus")
+(defvar gnus-use-mhe nil
+ "Set this if you want to use MH-E for mail reading")
+(defvar gnus-use-rmail nil
+ "Set this if you want to use RMAIL for mail reading")
+(defvar gnus-use-sendmail t
+ "Set this if you want to use SENDMAIL for mail reading")
+(defvar gnus-use-vm nil
+ "Set this if you want to use the VM package for mail reading")
+(defvar gnus-use-sc t
+ "Set this if you want to use Supercite")
+(defvar gnus-use-mailcrypt t
+ "Set this if you want to use Mailcrypt for dealing with PGP messages")
+(defvar gnus-use-bbdb nil
+ "Set this if you want to use the Big Brother DataBase")
+(defvar gnus-use-september nil
+ "Set this if you are using the experimental September Gnus")
+
+(let ((gnus-directory (if gnus-use-september
+ gnus-sgnus-lisp-directory
+ gnus-gnus-lisp-directory)))
+ (if (null (member gnus-directory load-path))
+ (setq load-path (cons gnus-directory load-path))))
+
+;;; Tools for MIME by
+;;; UMEDA Masanobu <umerin@mse.kyutech.ac.jp>
+;;; MORIOKA Tomohiko <morioka@jaist.ac.jp>
+
+(if gnus-use-tm
+ (progn
+ (if (null (member gnus-tm-lisp-directory load-path))
+ (setq load-path (cons gnus-tm-lisp-directory load-path))))
+ (load "tm-setup")
+ (load "mime-setup"))
+
+;;; Mailcrypt by
+;;; Jin Choi <jin@atype.com>
+;;; Patrick LoPresti <patl@lcs.mit.edu>
+
+(if gnus-use-mailcrypt
+ (progn
+ (if (null (member gnus-mailcrypt-lisp-directory load-path))
+ (setq load-path (cons gnus-mailcrypt-lisp-directory load-path))))
+ (autoload 'mc-install-write-mode "mailcrypt" nil t)
+ (autoload 'mc-install-read-mode "mailcrypt" nil t)
+ (add-hook 'mail-mode-hook 'mc-install-write-mode)
+ (add-hook 'news-mode-hook 'mc-install-write-mode)
+ (add-hook 'news-reply-mode-hook 'mc-install-write-mode)
+ (add-hook 'gnus-summary-mode-hook 'mc-install-read-mode)
+ (if gnus-use-mhe
+ (progn
+ (add-hook 'mh-folder-mode-hook 'mc-install-read-mode)
+ (add-hook 'mh-letter-mode-hook 'mc-install-write-mode))))
+
+;;; BBDB by
+;;; Jamie Zawinski <jwz@lucid.com>
+
+(if gnus-use-bbdb
+ (progn
+ (autoload 'bbdb "bbdb-com"
+ "Insidious Big Brother Database" t)
+ (autoload 'bbdb-name "bbdb-com"
+ "Insidious Big Brother Database" t)
+ (autoload 'bbdb-company "bbdb-com"
+ "Insidious Big Brother Database" t)
+ (autoload 'bbdb-net "bbdb-com"
+ "Insidious Big Brother Database" t)
+ (autoload 'bbdb-notes "bbdb-com"
+ "Insidious Big Brother Database" t)
+
+ (if gnus-use-vm
+ (progn
+ (autoload 'bbdb-insinuate-vm "bbdb-vm"
+ "Hook BBDB into VM" t)))
+
+ (if gnus-use-rmail
+ (progn
+ (autoload 'bbdb-insinuate-rmail "bbdb-rmail"
+ "Hook BBDB into RMAIL" t)
+ (add-hook 'rmail-mode-hook 'bbdb-insinuate-rmail)))
+
+ (if gnus-use-mhe
+ (progn
+ (autoload 'bbdb-insinuate-mh "bbdb-mh"
+ "Hook BBDB into MH-E" t)
+ (add-hook 'mh-folder-mode-hook 'bbdb-insinuate-mh)))
+
+ (autoload 'bbdb-insinuate-gnus "bbdb-gnus"
+ "Hook BBDB into Gnus" t)
+ (add-hook gnus-startup-hook 'bbdb-insinuate-gnus)
+
+ (if gnus-use-sendmail
+ (progn
+ (autoload 'bbdb-insinuate-sendmail "bbdb"
+ "Insidious Big Brother Database" t)
+ (add-hook 'mail-setup-hook 'bbdb-insinuate-sendmail)))))
+
+(if gnus-use-sc
+ (progn
+ (add-hook 'mail-citation-hook 'sc-cite-original)))
+\f
+;;;### (autoloads (gnus-batch-score gnus-fetch-group gnus gnus-slave gnus-no-server gnus-update-format) "gnus" "lisp/gnus.el" (12473 2137))
+;;; Generated autoloads from lisp/gnus.el
+
+(autoload 'gnus-update-format "gnus" "\
+Update the format specification near point." t nil)
+
+(autoload 'gnus-no-server "gnus" "\
+Read network news.
+If ARG is a positive number, Gnus will use that as the
+startup level. If ARG is nil, Gnus will be started at level 2.
+If ARG is non-nil and not a positive number, Gnus will
+prompt the user for the name of an NNTP server to use.
+As opposed to `gnus', this command will not connect to the local server." t nil)
+
+(autoload 'gnus-slave "gnus" "\
+Read news as a slave." t nil)
+
+(autoload 'gnus "gnus" "\
+Read network news.
+If ARG is non-nil and a positive number, Gnus will use that as the
+startup level. If ARG is non-nil and not a positive number, Gnus will
+prompt the user for the name of an NNTP server to use." t nil)
+
+(autoload 'gnus-fetch-group "gnus" "\
+Start Gnus if necessary and enter GROUP.
+Returns whether the fetching was successful or not." t nil)
+
+(defalias 'gnus-batch-kill 'gnus-batch-score)
+
+(autoload 'gnus-batch-score "gnus" "\
+Run batched scoring.
+Usage: emacs -batch -l gnus -f gnus-batch-score <newsgroups> ...
+Newsgroups is a list of strings in Bnews format. If you want to score
+the comp hierarchy, you'd say \"comp.all\". If you would not like to
+score the alt hierarchy, you'd say \"!alt.all\"." t nil)
+
+;;;***
+
+(provide 'gnus-setup)
+
+(run-hooks 'gnus-setup-load-hook)
+
+;;; gnus-setup.el ends here
(setq buffer-read-only t)
(run-hooks 'gnus-server-mode-hook))
-(defun gnus-server-insert-server-line (sformat name method)
- (let* ((sformat (or sformat gnus-server-line-format-spec))
- (how (car method))
+(defun gnus-server-insert-server-line (name method)
+ (let* ((how (car method))
(where (nth 1 method))
(elem (assoc method gnus-opened-servers))
(status (cond ((eq (nth 1 elem) 'denied)
(eq (nth 1 elem) 'ok))
"(open)")
(t
- "(closed)")))
- b)
+ "(closed)"))))
(beginning-of-line)
- (setq b (point))
- ;; Insert the text.
- (eval sformat)
- (add-text-properties b (1+ b) (list 'gnus-server (intern name)))))
+ (add-text-properties
+ (point)
+ (prog1 (1+ (point))
+ ;; Insert the text.
+ (eval gnus-server-line-format-spec))
+ (list 'gnus-server (intern name)))))
(defun gnus-enter-server-buffer ()
"Set up the server buffer."
;; First we do the real list of servers.
(while alist
(push (cdr (setq server (pop alist))) done)
- (gnus-server-insert-server-line nil (car server) (cdr server)))
+ (when server
+ (gnus-server-insert-server-line (car server) (cdr server))))
;; Then we insert the list of servers that have been opened in
;; this session.
(while opened
(unless (member (car (car opened)) done)
(gnus-server-insert-server-line
- nil (format "%s:%s" (car (car (car opened)))
- (nth 1 (car (car opened))))
+ (format "%s:%s" (car (car (car opened))) (nth 1 (car (car opened))))
(car (car opened))))
(setq opened (cdr opened))))
(goto-char (point-min))
(delete-region (progn (beginning-of-line) (point))
(progn (forward-line 1) (point))))
(let ((entry (assoc server gnus-server-alist)))
- (gnus-server-insert-server-line nil (car entry) (cdr entry))
+ (gnus-server-insert-server-line (car entry) (cdr entry))
(gnus-server-position-point))))))
(defun gnus-server-set-info (server info)
(entries (gnus-topic-find-groups (car type)))
(visiblep (eq (nth 1 type) 'visible)))
;; Insert the topic line.
- (gnus-delete-line)
- (gnus-topic-insert-topic-line
- (car type) visiblep (not (eq (nth 2 type) 'hidden)) level entries)))
+ (if topic
+ (progn
+ (gnus-delete-line)
+ (gnus-topic-insert-topic-line
+ (car type) visiblep
+ (not (eq (nth 2 type) 'hidden)) level entries)))))
;;; Topic mode, commands and keymap.
(define-key gnus-group-topic-map "r" 'gnus-topic-rename)
(define-key gnus-group-topic-map "\177" 'gnus-topic-delete)
- (define-key gnus-group-topic-map gnus-mouse-2 'gnus-mouse-pick-topic)
+ (define-key gnus-topic-mode-map gnus-mouse-2 'gnus-mouse-pick-topic)
)
;;;###autoload
(defun gnus-topic-mark-topic (topic)
"Mark all groups in the topic with the process mark."
(interactive (list (gnus-group-parent-topic)))
- (let ((groups (gnus-topic-find-groups topic)))
+ (let ((groups (cdr (gnus-topic-find-groups topic))))
(while groups
- (gnus-group-set-mark (pop groups)))))
+ (gnus-group-set-mark (gnus-info-group (nth 2 (pop groups)))))))
(defun gnus-topic-get-new-news-this-topic (&optional n)
"Check for new news in the current topic."
(gnus-topic-kill-group)
(gnus-topic-create-topic topic grandparent))))
+(provide 'gnus-topic)
+
;;; gnus-topic.el ends here
(let ((gnus-current-article (car articles)))
(and scan (setq files (gnus-uu-scan-directory gnus-uu-work-dir))))
(and save (gnus-uu-save-files files save))
- (setq files (gnus-uu-unpack-files files))
+ (if (eq gnus-uu-do-not-unpack-archives nil)
+ (setq files (gnus-uu-unpack-files files)))
(gnus-uu-add-file (mapcar (lambda (file) (cdr (assq 'name file))) files))
(setq files (nreverse (gnus-uu-get-actions files)))
(or not-insert (gnus-summary-insert-pseudos files save))))
"*All headers that match this regexp will be hidden.
If `gnus-visible-headers' is non-nil, this variable will be ignored.")
-(defvar gnus-visible-headers "^From:\\|^Newsgroups:\\|^Subject:\\|^Date:\\|^Followup-To:\\|^Reply-To:\\|^Organization:\\|^Summary:\\|^Keywords:\\|^To:\\|^Cc:\\|^Posted-To:\\|^Mail-Copy-To:"
+(defvar gnus-visible-headers "^From:\\|^Newsgroups:\\|^Subject:\\|^Date:\\|^Followup-To:\\|^Reply-To:\\|^Organization:\\|^Summary:\\|^Keywords:\\|^To:\\|^Cc:\\|^Posted-To:\\|^Mail-Copies-To:\\|^Apparently-To:\\|^Resent-"
"*All headers that do not match this regexp will be hidden.
If this variable is non-nil, `gnus-ignored-headers' will be ignored.")
"gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls + Boys)"
"The mail address of the Gnus maintainers.")
-(defconst gnus-version "September Gnus v0.17"
+(defconst gnus-version "September Gnus v0.18"
"Version number for this version of Gnus.")
(defvar gnus-info-nodes
(t
(or level gnus-group-default-list-level gnus-level-subscribed))))
+;;;###autoload
+(defun gnus-slave-no-server (&optional arg)
+ "Read network news as a slave, without connecting to local server"
+ (interactive "P")
+ (gnus-no-server arg t))
;;;###autoload
-(defun gnus-no-server (&optional arg)
+(defun gnus-no-server (&optional arg slave)
"Read network news.
If ARG is a positive number, Gnus will use that as the
startup level. If ARG is nil, Gnus will be started at level 2.
(interactive "P")
(make-local-variable 'gnus-group-use-permanent-levels)
(setq gnus-group-use-permanent-levels t)
- (gnus (or arg (1- gnus-level-default-subscribed)) t))
+ (gnus (or arg (1- gnus-level-default-subscribed)) t slave))
;;;###autoload
(defun gnus-slave (&optional arg)
(defalias 'gnus-group-remove-excess-properties 'ignore)
(defun gnus-group-insert-group-line
- (gnus-tmp-group gnus-tmp-level gnus-tmp-marked gnus-tmp-number
+ (gnus-tmp-group gnus-tmp-level gnus-tmp-marked number
gnus-tmp-method)
"Insert a group line in the group buffer."
(let* ((gnus-tmp-active (gnus-active gnus-tmp-group))
(1+ (- (cdr gnus-tmp-active) (car gnus-tmp-active)))
0))
(gnus-tmp-number-of-unread
- (if (numberp gnus-tmp-number) (int-to-string (max 0 gnus-tmp-number))
+ (if (numberp number) (int-to-string (max 0 number))
"*"))
(gnus-tmp-number-of-read
- (if (numberp gnus-tmp-number)
- (max 0 (- gnus-tmp-number-total gnus-tmp-number))
+ (if (numberp number)
+ (max 0 (- gnus-tmp-number-total number))
"*"))
(gnus-tmp-subscribed
(cond ((<= gnus-tmp-level gnus-level-subscribed) ? )
(format "(%s:%s)" (car gnus-tmp-method)
(car (cdr gnus-tmp-method))) ""))
(gnus-tmp-marked
- (if (and (numberp gnus-tmp-number)
- (zerop gnus-tmp-number)
+ (if (and (numberp number)
+ (zerop number)
(cdr (assq 'tick gnus-tmp-marked)))
?* ? ))
(gnus-tmp-number
- (cond ((eq gnus-tmp-number t) "*" )
- ((numberp gnus-tmp-number) (int-to-string gnus-tmp-number))
- (t gnus-tmp-number)))
+ (cond ((eq number t) "*" )
+ ((numberp number) (int-to-string number))
+ (t number)))
(gnus-tmp-process-marked
(if (member gnus-tmp-group gnus-group-marked)
gnus-process-mark ? ))
;; Insert the text.
(eval gnus-group-line-format-spec))
`(gnus-group ,(gnus-intern-safe gnus-tmp-group gnus-active-hashtb)
- gnus-unread ,(if (numberp gnus-tmp-number)
+ gnus-unread ,(if (numberp number)
(string-to-int gnus-tmp-number-of-unread)
t)
gnus-marked ,gnus-tmp-marked
(and
(let ((unread
(get-text-property (point) 'gnus-unread)))
- ;(and unread
- (or (eq unread t)
- (and unread (> unread 0))));)
+ (and (numberp unread) (> unread 0)))
(setq lev (get-text-property (point)
'gnus-level))
(<= lev gnus-level-subscribed)))
(defun gnus-group-goto-group (group)
"Goto to newsgroup GROUP."
- (let ((b (text-property-any (point-min) (point-max)
- 'gnus-group (gnus-intern-safe
- group gnus-active-hashtb))))
- (and b (goto-char b))))
+ (when group
+ (let ((b (text-property-any (point-min) (point-max)
+ 'gnus-group (gnus-intern-safe
+ group gnus-active-hashtb))))
+ (and b (goto-char b)))))
(defun gnus-group-next-group (n)
"Go to next N'th newsgroup.
(when (and group (gnus-activate-group group 'scan))
(gnus-get-unread-articles-in-group
(gnus-get-info group) (gnus-active group))
- (gnus-group-update-group-line)
+ (when (gnus-group-goto-group group)
+ (gnus-group-update-group-line))
t))
(defun gnus-group-fetch-faq (group &optional faq-dir)
(let (id heads)
(mapatoms
(lambda (refs)
- (if (not (car (symbol-value refs)))
- (progn
- (setq heads (cdr (symbol-value refs)))
- (while heads
- (if (not (memq (mail-header-number (car (car heads)))
- gnus-newsgroup-dormant))
- (progn
- (setq id (symbol-name refs))
- (while (and (setq id (gnus-build-get-header id))
- (not (car (gnus-gethash
- id gnus-newsgroup-dependencies)))))
- (setq heads nil))
- (setq heads (cdr heads)))))))
+ (when (car (symbol-value refs))
+ (setq heads (cdr (symbol-value refs)))
+ (while heads
+ (if (memq (mail-header-number (car (car heads)))
+ gnus-newsgroup-dormant)
+ (setq heads (cdr heads))
+ (setq id (symbol-name refs))
+ (while (and (setq id (gnus-build-get-header id))
+ (not (car (gnus-gethash
+ id gnus-newsgroup-dependencies)))))
+ (setq heads nil)))))
gnus-newsgroup-dependencies)))
(defun gnus-build-get-header (id)
(read (current-buffer)) deps))
(gnus-parent-id (mail-header-references header))))))
(when header
- (setq gnus-newsgroup-headers (cons header gnus-newsgroup-headers)
- gnus-newsgroup-ancient (cons (mail-header-number header)
- gnus-newsgroup-ancient))))))
+ (let ((number (mail-header-number header)))
+ (push number gnus-newsgroup-limit)
+ (push header gnus-newsgroup-headers)
+ (push number gnus-newsgroup-ancient))))))
(defun gnus-rebuild-thread (id)
"Rebuild the thread containing ID."
gnus-newsrc-hashtb)))
(info (nth 2 entry))
(article (car articles)))
- (gnus-summary-goto-subject article)
- (gnus-summary-mark-article article gnus-canceled-mark)
;; Update the group that has been moved to.
(if (not info)
() ; This group does not exist yet.
- (if (not (memq article gnus-newsgroup-unreads))
- (gnus-info-set-read
- info (gnus-add-to-range (gnus-info-read info)
- (list (cdr art-group)))))
+ (unless (memq article gnus-newsgroup-unreads)
+ (gnus-info-set-read
+ info (gnus-add-to-range (gnus-info-read info)
+ (list (cdr art-group)))))
;; Copy any marks over to the new group.
(let ((marks '((tick . gnus-newsgroup-marked)
(gnus-info-group info) (car (car marks))
(list to-article) info))
(setq marks (cdr marks)))))
- ;; Update marks.
- (setq gnus-newsgroup-marked (delq article gnus-newsgroup-marked))
- (setq gnus-newsgroup-unreads (delq article gnus-newsgroup-unreads))
- (setq gnus-newsgroup-dormant
- (delq article gnus-newsgroup-dormant))
- (setq gnus-newsgroup-reads
- (cons (cons article gnus-canceled-mark)
- gnus-newsgroup-reads)))
+ (gnus-summary-goto-subject article)
+ (gnus-summary-mark-article article gnus-canceled-mark))
(gnus-message 1 "Couldn't move article %s" (car articles)))
(gnus-summary-remove-process-mark (car articles))
(setq articles (cdr articles)))
(defun gnus-get-function (method function)
"Return a function symbol based on METHOD and FUNCTION."
;; Translate server names into methods.
+ (unless method
+ (error "Attempted use of a nil select method"))
(when (stringp method)
(setq method (gnus-server-to-method method)))
(let ((func (intern (format "%s-%s" (car method) function))))
(defvar nnbabyl-group-alist nil)
(defvar nnbabyl-active-timestamp nil)
+(defvar nnbabyl-previous-buffer-mode nil)
+
\f
(defvar nnbabyl-current-server nil)
(list 'nnbabyl-get-new-mail nnbabyl-get-new-mail)
'(nnbabyl-current-group nil)
'(nnbabyl-status-string "")
+ '(nnbabyl-previous-buffer-mode nil)
'(nnbabyl-group-alist nil)))
\f
(setq nnbabyl-current-server server)))
(defun nnbabyl-close-server (&optional server)
- (setq nnbabyl-current-server nil)
+ ;; Restore buffer mode.
+ (when (and (nnbabyl-server-opened)
+ nnbabyl-previous-buffer-mode)
+ (save-excursion
+ (set-buffer nnbabyl-mbox-buffer)
+ (narrow-to-region
+ (car (car nnbabyl-previous-buffer-mode))
+ (cdr (car nnbabyl-previous-buffer-mode)))
+ (funcall (cdr nnbabyl-previous-buffer-mode))))
+ (setq nnbabyl-current-server nil
+ nnbabyl-mbox-buffer nil)
t)
(defun nnbabyl-server-opened (&optional server)
(set-buffer (setq nnbabyl-mbox-buffer
(nnheader-find-file-noselect
nnbabyl-mbox-file nil 'raw)))
+ ;; Save buffer mode.
+ (setq nnbabyl-previous-buffer-mode
+ (cons (cons (point-min) (point-max))
+ major-mode))
+
(buffer-disable-undo (current-buffer))
(widen)
(setq buffer-read-only nil)
(defun nnmail-process-unix-mail-format (func)
(let ((delim (concat "^" rmail-unix-mail-delimiter))
start message-id content-length end skip head-end)
+ (goto-char (point-min))
(if (not (and (re-search-forward delim nil t)
(goto-char (match-beginning 0))))
;; Possibly wrong format?
- (error "Found no mail!")
+ ()
;; Carry on until the bitter end.
(while (not (eobp))
(setq start (point)
(defun nnmail-process-mmfd-mail-format (func)
(let ((delim "^\^A\^A\^A\^A$")
start message-id end)
+ (goto-char (point-min))
(if (not (and (re-search-forward delim nil t)
(forward-line 1)))
;; Possibly wrong format?
- (error "Found no mail!")
+ ()
;; Carry on until the bitter end.
(while (not (eobp))
(setq start (point))
+Mon Dec 4 05:09:28 1995 Lars Ingebrigtsen <lars@eyesore.no>
+
+ * gnus.texi (Mail): Addition.
+
Sun Dec 3 00:34:35 1995 Lars Magne Ingebrigtsen <larsi@narfi.ifi.uio.no>
* gnus.texi (Topic Commands): Addition.
--- /dev/null
+\input texinfo
+@c -*-texinfo-*-
+@c Copyright (C) 1995 Free Software Foundation, Inc.
+@setfilename gnus-faq.info
+
+@node Frequently Asked Questions
+@section Frequently Asked Questions
+
+This is the Gnus Frequently Asked Questions list.
+If you have a Web browser, the official hypertext version is at
+@file{http://www.miranova.com/~steve/gnus-faq.html>}, and has
+probably been updated since you got this manual.
+
+@menu
+* Installation FAQ:: Installation of Gnus.
+* Customization FAQ:: Customizing Gnus.
+* Reading News FAQ:: News Reading Questions.
+* Reading Mail FAQ:: Mail Reading Questions.
+@end menu
+
+
+@node Installation FAQ
+@subsection Installation
+
+@itemize @bullet
+@item
+Q1.1 What is the latest version of Gnus?
+
+The latest (and greatest) version is 5.0.10. You might also run
+across something called @emph{September Gnus}. September Gnus
+is the alpha version of the next major release of Gnus. It is currently
+not stable enough to run unless you are prepared to debug lisp.
+
+@item
+Q1.2 Where do I get Gnus?
+
+Any of the following locations:
+
+@itemize @minus
+@item
+@file{ftp://ftp.ifi.uio.no/pub/emacs/gnus/gnus.tar.gz}
+
+@item
+@file{ftp://ftp.pilgrim.umass.edu/pub/misc/ding/}
+
+@item
+@file{gopher://gopher.pilgrim.umass.edu/11/pub/misc/ding/}
+
+@item
+@file{ftp://aphrodite.nectar.cs.cmu.edu/pub/ding-gnus/}
+
+@item
+@file{ftp://ftp.solace.mh.se:/pub/gnu/elisp/}
+
+@end itemize
+
+@item
+Q1.3 Which version of Emacs do I need?
+
+At least GNU Emacs 19.28, or XEmacs 19.12 is recommended. GNU Emacs
+19.25 has been reported to work under certain circumstances, but it
+doesn't @emph{officially} work on it. 19.27 has also been reported to
+work. Gnus has been reported to work under OS/2 as well as Unix.
+
+
+@item
+Q1.4 Where is timezone.el?
+
+Upgrade to XEmacs 19.13. In earlier versions of XEmacs this file was
+placed with Gnus 4.1.3, but that has been corrected.
+
+
+@item
+Q1.5 When I run Gnus on XEmacs 19.13 I get weird error messages.
+
+You're running an old version of Gnus. Upgrade to at least version
+5.0.4.
+
+
+@item
+Q1.6 How do I unsubscribe from the Mailing List?
+
+Send an e-mail message to @file{ding-request@@ifi.uio.no} with the magic word
+@emph{unsubscribe} somewhere in it, and you will be removed.
+
+If you are reading the digest version of the list, send an e-mail message
+to @*
+@file{ding-rn-digests-d-request@@moe.shore.net}
+with @emph{unsubscribe} as the subject and you will be removed.
+
+
+@item
+Q1.7 How do I run Gnus on both Emacs and XEmacs?
+
+The basic answer is to byte-compile under XEmacs, and then you can
+run under either Emacsen. There is, however, a potential version
+problem with easymenu.el with Gnu Emacs prior to 19.29.
+
+Per Abrahamsen <abraham@@dina.kvl.dk> writes :@*
+The internal easymenu.el interface changed between 19.28 and 19.29 in
+order to make it possible to create byte compiled files that can be
+shared between Gnu Emacs and XEmacs. The change is upward
+compatible, but not downward compatible.
+This gives the following compatibility table:
+
+@example
+Compiled with: | Can be used with:
+----------------+--------------------------------------
+19.28 | 19.28 19.29
+19.29 | 19.29 XEmacs
+XEmacs | 19.29 XEmacs
+@end example
+
+If you have Gnu Emacs 19.28 or earlier, or XEmacs 19.12 or earlier, get
+a recent version of auc-menu.el from
+@file{ftp://ftp.iesd.auc.dk/pub/emacs-lisp/auc-menu.el}, and install it
+under the name easymenu.el somewhere early in your load path.
+
+
+@item
+Q1.8 What resources are available?
+
+There is the newsgroup Gnu.emacs.gnus. Discussion of Gnus 5.x is now
+taking place there. There is also a mailing list, send mail to
+@file{ding-request@@ifi.uio.no} with the magic word @emph{subscribe}
+somewhere in it.
+
+@emph{NOTE:} the traffic on this list is heavy so you may not want to be
+on it (unless you use Gnus as your mailer reader, that is). The mailing
+list is mainly for developers and testers.
+
+Gnus has a home World Wide Web page at@*
+@file{http://www.ifi.uio.no/~larsi/ding.html}.
+
+Gnus has a write up in the X Windows Applications FAQ at@*
+@file{http://www.ee.ryerson.ca:8080/~elf/xapps/Q-III.html}.
+
+The Gnus manual is also available on the World Wide Web. The canonical
+source is in Norway at@*
+@file{http://www.ifi.uio.no/~larsi/ding-manual/gnus_toc.html}.
+
+There are three mirrors in the United States:
+@enumerate
+@item
+@file{http://www.miranova.com/gnus-man/}
+
+@item
+@file{http://www.pilgrim.umass.edu/pub/misc/ding/manual/gnus_toc.html}
+
+@item
+@file{http://www.rtd.com/~woo/gnus/}
+
+@end enumerate
+
+PostScript copies of the Gnus Reference card are available from@*
+@file{ftp://ftp.cs.ualberta.ca/pub/oolog/gnus/}. They are mirrored at@*
+@file{ftp://ftp.pilgrim.umass.edu/pub/misc/ding/refcard/} in the
+United States. And@*
+@file{ftp://marvin.fkphy.uni-duesseldorf.de/pub/gnus/}
+in Germany.
+
+An online version of the Gnus FAQ is available at@*
+@file{http://www.miranova.com/~steve/gnus-faq.html}. Off-line formats
+are also available:@*
+ASCII: @file{ftp://ftp.miranova.com/pub/gnus/gnus-faq}@*
+PostScript: @file{ftp://ftp.miranova.com/pub/gnus/gnus-faq.ps}.
+
+
+@item
+Q1.9 Gnus hangs on connecting to NNTP server
+
+I am running XEmacs on SunOS and Gnus prints a message about Connecting
+to NNTP server and then just hangs.
+
+Ben Wing <wing@@netcom.com> writes :@*
+I wonder if you're hitting the infamous @emph{libresolv} problem.
+The basic problem is that under SunOS you can compile either
+with DNS or NIS name lookup libraries but not both. Try
+substituting the IP address and see if that works; if so, you
+need to download the sources and recompile.
+
+
+@item
+Q1.10 Mailcrypt 3.4 doesn't work
+
+This problem is verified to still exist in Gnus 5.0.9 and MailCrypt 3.4.
+The answer comes from Peter Arius
+<arius@@immd2.informatik.uni-erlangen.de>.
+
+I found out that mailcrypt uses
+@code{gnus-eval-in-buffer-window}, which is a macro.
+It seems as if you have
+compiled mailcrypt with plain old GNUS in load path, and the XEmacs byte
+compiler has inserted that macro definition into
+@file{mc-toplev.elc}.
+The solution is to recompile @file{mc-toplev.el} with Gnus 5 in
+load-path, and it works fine.
+
+Steve Baur <steve@@miranova.com> adds :@*
+The problem also manifests itself if neither GNUS 4 nor Gnus 5 is in the
+load-path.
+
+
+@item
+Q1.11 What other packages work with Gnus?
+
+@itemize @minus
+@item
+Mailcrypt.
+
+Mailcrypt is an Emacs interface to PGP. It works, it installs
+without hassle, and integrates very easily. Mailcrypt can be
+obtained from@*
+@file{ftp://cag.lcs.mit.edu/pub/patl/mailcrypt-3.4.tar.gz}.
+
+@item
+Tiny Mime.
+
+Tiny Mime is an Emacs MUA interface to MIME. Installation is
+a two-step process unlike most other packages, so you should
+be prepared to move the byte-compiled code somewhere. There
+are currently two versions of this package available. It can
+be obtained from@*
+@file{ftp://ftp.jaist.ac.jp/pub/GNU/elisp/}.
+Be sure to apply the supplied patch. It works with Gnus through
+version 5.0.9. In order for all dependencies to work correctly
+the load sequence is as follows:
+@lisp
+ (load "tm-setup")
+ (load "gnus")
+ (load "mime-compose")
+@end lisp
+
+@emph{NOTE:} Loading the package disables citation highlighting by
+default. To get the old behavior back, use the @kbd{M-t} command.
+
+@end itemize
+
+@end itemize
+
+
+@node Customization FAQ
+@subsection Customization
+
+@itemize @bullet
+@item
+Q2.1 Custom Edit does not work under XEmacs
+
+The custom package has not been ported to XEmacs.
+
+
+@item
+Q2.2 How do I quote messages?
+
+I see lots of messages with quoted material in them. I am wondering
+how to have Gnus do it for me.
+
+This is Gnus, so there are a number of ways of doing this. You can use
+the built-in commands to do this. There are the @kbd{F} and @kbd{R}
+keys from the summary buffer which automatically include the article
+being responded to. These commands are also selectable as @i{Followup
+and Yank} and @i{Reply and Yank} in the Post menu.
+
+@kbd{C-c C-y} grabs the previous message and prefixes each line with
+@code{ail-indentation-spaces} spaces or @code{mail-yank-prefix} if that is
+non-nil, unless you have set your own @code{mail-citation-hook}, which will
+be called to to do the job.
+
+You might also consider the Supercite package, which allows for pretty
+arbitrarily complex quoting styles. Some people love it, some people
+hate it.
+
+
+@item
+Q2.3 How can I keep my nnvirtual:* groups sorted?
+
+How can I most efficiently arrange matters so as to keep my nnvirtual:*
+(etc) groups at the top of my group selection buffer, whilst keeping
+everything sorted in alphabetical order.
+
+If you don't subscribe often to new groups then the easiest way is to
+first sort the groups and then manually kill and yank the virtuals
+wherever you want them.
+
+
+@item
+Q2.4 Any good suggestions on stuff for an all.SCORE file?
+
+Here is a collection of suggestions from the Gnus mailing list.
+
+@enumerate
+@item
+From ``Dave Disser'' <disser@@sdd.hp.com>@*
+I like blasting anything without lowercase letters. Weeds out most of
+the make $$ fast, as well as the lame titles like ``IBM'' and ``HP-UX''
+with no further description.
+@lisp
+ (("Subject"
+ ("^\\(Re: \\)?[^a-z]*$" -200 nil R)))
+@end lisp
+
+@item
+From ``Peter Arius'' <arius@@immd2.informatik.uni-erlangen.de>@*
+The most vital entries in my (still young) all.SCORE:
+@lisp
+(("xref"
+ ("alt.fan.oj-simpson" -1000 nil s))
+ ("subject"
+ ("\\<\\(make\\|fast\\|big\\)\\s-*\\(money\\|cash\\|bucks?\\)\\>" -1000 nil r)
+ ("$$$$" -1000 nil s)))
+@end lisp
+
+@item
+From ``Per Abrahamsen'' <abraham@@dina.kvl.dk>@*
+@lisp
+(("subject"
+ ;; CAPS OF THE WORLD, UNITE
+ ("^..[^a-z]+$" -1 nil R)
+ ;; $$$ Make Money $$$ (Try work)
+ ("$" -1 nil s)
+ ;; I'm important! And I have exclamation marks to prove it!
+ ("!" -1 nil s)))
+@end lisp
+
+@item
+From ``heddy boubaker'' <boubaker@@cenatls.cena.dgac.fr>@*
+I would like to contribute with mine.
+@lisp
+(
+ (read-only t)
+ ("subject"
+ ;; ALL CAPS SUBJECTS
+ ("^\\([Rr][Ee]: +\\)?[^a-z]+$" -1 nil R)
+ ;; $$$ Make Money $$$
+ ("$$" -10 nil s)
+ ;; Empty subjects are worthless!
+ ("^ *\\([(<]none[>)]\\|(no subject\\( given\\)?)\\)? *$" -10 nil r)
+ ;; Sometimes interesting announces occur!
+ ("ANN?OU?NC\\(E\\|ING\\)" +10 nil r)
+ ;; Some people think they're on mailing lists
+ ("\\(un\\)?sub?scribe" -100 nil r)
+ ;; Stop Micro$oft NOW!!
+ ("\\(m\\(icro\\)?[s$]\\(oft\\|lot\\)?-?\\)?wind?\\(ows\\|aube\\|oze\\)?[- ]*\\('?95\\|NT\\|3[.]1\\|32\\)" -1001 nil r)
+ ;; I've nothing to buy
+ ("\\(for\\|4\\)[- ]*sale" -100 nil r)
+ ;; SELF-DISCIPLINED people
+ ("\\[[^a-z0-9 \t\n][^a-z0-9 \t\n]\\]" +100 nil r)
+ )
+ ("from"
+ ;; To keep track of posters from my site
+ (".dgac.fr" +1000 nil s))
+ ("followup"
+ ;; Keep track of answers to my posts
+ ("boubaker" +1000 nil s))
+ ("lines"
+ ;; Some people have really nothing to say!!
+ (1 -10 nil <=))
+ (mark -100)
+ (expunge -1000)
+ )
+@end lisp
+
+@item
+From ``Christopher Jones'' <cjones@@au.oracle.com>@*
+The sample @file{all.SCORE} files from Per and boubaker could be
+augmented with:
+@lisp
+ (("subject"
+ ;; No junk mail please!
+ ("please ignore" -500 nil s)
+ ("test" -500 nil e))
+ )
+@end lisp
+
+@item
+From ``Brian Edmonds'' <edmonds@@cs.ubc.ca>@*
+Augment any of the above with a fast method of scoring down
+excessively cross posted articles.
+@lisp
+ ("xref"
+ ;; the more cross posting, the exponentially worse the article
+ ("^xref: \\S-+ \\S-+ \\S-+ \\S-+" -1 nil r)
+ ("^xref: \\S-+ \\S-+ \\S-+ \\S-+ \\S-+" -2 nil r)
+ ("^xref: \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+" -4 nil r)
+ ("^xref: \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+" -8 nil r)
+ ("^xref: \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+" -16 nil r)
+ ("^xref: \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+" -32 nil r)
+ ("^xref: \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+" -64 nil r)
+ ("^xref: \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+" -128 nil r)
+ ("^xref: \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+" -256 nil r)
+ ("^xref: \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+ \\S-+" -512 nil r))
+@end lisp
+
+@end enumerate
+
+
+@item
+Q2.5 What do I use to yank-through when replying?
+
+You should probably reply and followup with @kbd{R} and @kbd{F}, instead
+of @kbd{r} and @kbd{f}, which solves your problem. But you could try
+something like:
+
+@example
+(defconst mail-yank-ignored-headers
+ "^.*:"
+ "Delete these headers from old message when it's inserted in a reply.")
+@end example
+
+
+@item
+Q2.6 I don't like the default WWW browser
+
+Now when choosing an URL Gnus starts up a W3 buffer, I would like it
+to always use Netscape (I don't browse in text-mode ;-).
+
+@enumerate
+@item
+Activate `Customize...' from the `Help' menu.
+
+@item
+Scroll down to the `WWW Browser' field.
+
+@item
+Click `mouse-2' on `WWW Browser'.
+
+@item
+Select `Netscape' from the pop up menu.
+
+@item
+Press `C-c C-c'
+
+@end enumerate
+
+If you are using XEmacs then to specify Netscape do
+@lisp
+ (setq gnus-button-url 'gnus-netscape-open-url)
+@end lisp
+
+
+@item
+Q2.7 What, if any, relation is between ``ask-server'' and ``(setq
+gnus-read-active-file 'some)''?
+
+In order for Gnus to show you the complete list of newsgroups, it will
+either have to either store the list locally, or ask the server to
+transmit the list. You enable the first with
+
+@lisp
+ (setq gnus-save-killed-list t)
+@end lisp
+
+and the second with
+
+@lisp
+ (setq gnus-read-active-file t)
+@end lisp
+
+If both are disabled, Gnus will not know what newsgroups exists. There
+is no option to get the list by casting a spell.
+
+
+@item
+Q2.8 Moving between groups is slow.
+
+Per Abrahamsen <abraham@@dina.kvl.dk> writes:@*
+
+Do you call @code{define-key} or something like that in one of the
+summary mode hooks? This would force Emacs to recalculate the keyboard
+shortcuts. Removing the call should speed up @kbd{M-x gnus-summary-mode
+RET} by a couple of orders of magnitude. You can use
+
+@lisp
+(define-key gnus-summary-mode-map KEY COMMAND)
+@end lisp
+
+in your @file{.gnus} instead.
+
+@end itemize
+
+
+@node Reading News FAQ
+@subsection Reading News
+
+@itemize @bullet
+@item
+Q3.1 How do I convert my kill files to score files?
+
+A kill-to-score translator was written by Ethan Bradford
+<ethanb@@ptolemy.astro.washington.edu>. It is available from@*
+@file{http://baugi.ifi.uio.no/~larsi/ding-various/gnus-kill-to-score.el}.
+
+
+@item
+Q3.2 My news server has a lot of groups, and killing groups is painfully
+slow.
+
+Don't do that then. The best way to get rid of groups that should be
+dead is to edit your newsrc directly. This problem will be addressed
+in the near future.
+
+
+@item
+Q3.3 How do I use an NNTP server with authentication?
+
+Put the following into your .gnus:
+@lisp
+ (add-hook 'nntp-server-opened-hook 'nntp-send-authinfo)
+@end lisp
+
+
+@item
+Q3.4 Not reading the first article.
+
+How do I avoid reading the first article when a group is selected?
+
+@enumerate
+@item
+Use @kbd{RET} to select the group instead of @kbd{SPC}.
+
+@item
+@code{(setq gnus-auto-select first nil)}
+
+@item
+Luis Fernandes <elf@@mailhost.ee.ryerson.ca>writes:@*
+This is what I use...customize as necessary...
+
+@lisp
+;;; Don't auto-select first article if reading sources, or archives or
+;;; jobs postings, etc. and just display the summary buffer
+(add-hook 'gnus-select-group-hook
+ (function
+ (lambda ()
+ (cond ((string-match "sources" gnus-newsgroup-name)
+ (setq gnus-auto-select-first nil))
+ ((string-match "jobs" gnus-newsgroup-name)
+ (setq gnus-auto-select-first nil))
+ ((string-match "comp\\.archives" gnus-newsgroup-name)
+ (setq gnus-auto-select-first nil))
+ ((string-match "reviews" gnus-newsgroup-name)
+ (setq gnus-auto-select-first nil))
+ ((string-match "announce" gnus-newsgroup-name)
+ (setq gnus-auto-select-first nil))
+ ((string-match "binaries" gnus-newsgroup-name)
+ (setq gnus-auto-select-first nil))
+ (t
+ (setq gnus-auto-select-first t))))))
+@end lisp
+
+@item
+Per Abrahamsen <abraham@@dina.kvl.dk> writes:@*
+Another possibility is to create an @file{all.binaries.all.SCORE} file
+like this:
+
+@lisp
+((local
+ (gnus-auto-select-first nil)))
+@end lisp
+
+and insert
+@lisp
+ (setq gnus-auto-select-first t)
+@end lisp
+
+in your @file{.gnus}.
+
+@end enumerate
+
+@item
+Q3.5 Why aren't BBDB known posters marked in the summary buffer?
+
+Brian Edmonds <edmonds@@cs.ubc.ca> writes:@*
+Due to changes in Gnus 5.0, @file{bbdb-gnus.el} no longer marks known
+posters in the summary buffer. An updated version, @file{gnus-bbdb.el}
+is available at the locations listed below. This package also supports
+autofiling of incoming mail to folders specified in the BBDB. Extensive
+instructions are included as comments in the file.
+
+Send mail to @file{majordomo@@edmonds.home.cs.ubc.ca} with the following
+line in the body of the message: @emph{get misc gnus-bbdb.el}.
+
+Or get it from the World Wide Web:@*
+@file{http://www.cs.ubc.ca/spider/edmonds/gnus-bbdb.el}.
+
+@end itemize
+
+
+@node Reading Mail FAQ
+@subsection Reading Mail
+
+@itemize @bullet
+@item
+Q4.1 What does the message ``Buffer has changed on disk'' mean in a mail
+group?
+
+Your filter program should not deliver mail directly to your folders,
+instead it should put the mail into spool files. Gnus will then move
+the mail safely from the spool files into the folders. This will
+eliminate the problem. Look it up in the manual, in the section
+entitled ``Mail & Procmail''.
+
+
+@item
+Q4.2 How do you make articles un-expirable?
+
+I am using nnml to read news and have used
+@code{gnus-auto-expirable-newsgroups} to automagically expire articles
+in some groups (Gnus being one of them). Sometimes there are
+interesting articles in these groups that I want to keep. Is there any
+way of explicitly marking an article as un-expirable - that is mark it
+as read but not expirable?
+
+Use @kbd{u}, @kbd{!}, @kbd{d} or @kbd{M-u} in the summary buffer. You
+just remove the @kbd{E} mark by setting some other mark. It's not
+necessary to tick the articles.
+
+
+@item
+Q4.3 How do I delete bogus nnml: groups?
+
+My problem is that I have various mail (nnml) groups generated while
+experimenting with Gnus. How do I remove them now? Setting the level to
+9 does not help. Also @code{gnus-group-check-bogus-groups} does not
+recognize them.
+
+Removing mail groups is tricky at the moment. (It's on the to-do list,
+though.) You basically have to kill the groups in Gnus, shut down Gnus,
+edit the active file to exclude these groups, and probably remove the
+nnml directories that contained these groups as well. Then start Gnus
+back up again.
+
+
+@item
+Q4.4 What happened to my new mail groups?
+
+I got new mail, but I have
+never seen the groups they should have been placed in.
+
+They are probably there, but as zombies. Press @kbd{A z} to list
+zombie groups, and then subscribe to the groups you want with @kbd{u}.
+This is all documented quite nicely in the user's manual.
+
+
+@item
+Q4.5 Not scoring mail groups
+
+How do you @emph{totally} turn off scoring in mail groups?
+
+Use an nnbabyl:all.SCORE (or nnmh, or nnml, or whatever) file containing:
+
+@example
+((adapt ignore)
+ (local (gnus-use-scoring nil))
+ (exclude-files "all.SCORE"))
+@end example
+
+@end itemize
+
+
@node Slave Gnusii
-@section Slave Gnusii
+@section Slave Gnusiï
@cindex slave
You might want to run more than one Emacs with more than one Gnus at the
same time. If you are using different @file{.newsrc} files (eg., if you
-are using the two different Gnusii to read from two different servers),
+are using the two different Gnusiï to read from two different servers),
that is no problem whatsoever. You just do it.
-The problem appears when you want to run two Gnusii that use the same
+The problem appears when you want to run two Gnusiï that use the same
@code{.newsrc} file.
To work around that problem some, we here at the Think-Tank at the Gnus
Applications}) will be much more expensive, of course.)
Anyways, you start one Gnus up the normal way with @kbd{M-x gnus} (or
-however you do it). Each subsequent slave Gnusii should be started with
+however you do it). Each subsequent slave Gnusiï should be started with
@kbd{M-x gnus-slave}. These slaves won't save normal @file{.newsrc}
files, but some slave files that contains information only on what
groups have been read in the slave session. When a master Gnus starts,
Commands for composing a mail message:
@table @kbd
+
@item S r
@itemx r
@kindex S r (Summary)
@findex gnus-summary-reply
Mail a reply to the author of the current article
(@code{gnus-summary-reply}).
+
@item S R
@itemx R
@kindex R (Summary)
Mail a reply to the author of the current article and include the
original message (@code{gnus-summary-reply-with-original}). This
command uses the process/prefix convention.
+
@item S o m
@kindex S o m (Summary)
@findex gnus-summary-mail-forward
Forward the current article to some other person
(@code{gnus-summary-mail-forward}).
+
@item S o p
@kindex S o p (Summary)
@findex gnus-summary-post-forward
Forward the current article to a newsgroup
(@code{gnus-summary-post-forward}).
+
@item S m
@itemx m
@kindex m (Summary)
@findex gnus-summary-mail-other-window
Send a mail to some other person
(@code{gnus-summary-mail-other-window}).
+
@item S D b
@kindex S D b (Summary)
@findex gnus-summary-resend-bounced-mail
the bounced mail is a reply to some other mail, Gnus will try to fetch
that mail and display it for easy perusal of its headers. This might
very well fail, though.
+
+@item S D r
+@kindex S D r (Summary)
+@findex gnus-summary-resend-message
+Not to be confused with the previous command,
+@code{gnus-summary-resend-message} will prompt you for an address to
+send the current message off to, and then send it to that place. The
+headers of the message won't be altered---but lots of headers that say
+@samp{Resent-To}, @samp{Resent-From} and so on will be added. This
+means that you actually send a mail to someone that has a @samp{To}
+header that (proabbly) points to yourself. This will confuse people.
+So, natcherly you'll only do that if you're really eVIl.
+
+This command is mainly used if you have several accounts and want to
+ship a mail to a different account of yours. (If you're both
+@samp{root} and @samp{postmaster} and get a mail for @samp{postmaster}
+to the @samp{root} account, you may want to resend it to
+@samp{postmaster}. Ordnung muss sein!
+
@item S O m
@kindex S O m (Summary)
@findex gnus-uu-digest-mail-forward
Digest the current series and forward the result using mail
(@code{gnus-uu-digest-mail-forward}). This command uses the
process/prefix convention (@pxref{Process/Prefix}).
+
@item S O p
@kindex S O p (Summary)
@findex gnus-uu-digest-post-forward
to it.
@findex gnus-summary-send-draft
-@kindex S D c S (Summary)
+@kindex S D c (Summary)
When you want to continue editing the article, you simply enter the
draft group and push @kbd{S D c} (@code{gnus-summary-send-draft}) to do
that. You will be placed in a buffer where you left off.
former). The manual is unambiguous, but it can be confusing.
-
-@node Frequently Asked Questions
-@section Frequently Asked Questions
-
-
+@include gnus-faq.texi
@node Index
@chapter Index