+2001-05-01 19:21:19 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
+ * gnus.el: Oort Gnus v0.03 is released.
+
+2001-05-01 19:06:21 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * nnultimate.el (nnultimate-topic-article-to-article): Use the
+ group.
+
+2001-04-24 19:50:14 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-srvr.el (gnus-server-insert-server-line): Add a space.
+
+2001-04-15 14:55:03 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * nnultimate.el (nnultimate-retrieve-headers): Return all
+ available headers.
+
+ * gnus-sum.el (gnus-read-all-available-headers): New variable.
+ (gnus-get-newsgroup-headers-xover): Use it.
+
+2001-04-14 15:47:26 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * nnultimate.el (nnultimate-retrieve-headers): Clean up.
+
+2001-04-30 17:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * nntp.el (nntp-retrieve-groups): Use throw instead of error.
+
+2001-04-29 09:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * nnrss.el (nnrss-insert-w3): Use cache before I figure out how to
+ disable it.
+
+ * gnus.el (gnus-info-nodes): Remove a few The's.
+
+2001-04-29 08:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * mail-source.el (mail-source-movemail): Call-process may return a
+ signal description string.
+
+ * gnus-start.el (gnus-read-newsrc-el-file):
+ gnus-newsrc-file-version may be nil.
+
+ * nnmail.el (nnmail-get-new-mail): Use the exact file only.
+ Suggested by Michael Sperber [Mr. Preprocessor]
+ <sperber@informatik.uni-tuebingen.de>.
+
+2001-04-25 Per Abrahamsen <abraham@dina.kvl.dk>
+
+ * mm-uu.el (mm-uu-configure-list): Fixed customize type.
+
+2001-04-24 Hrvoje Niksic <hniksic@arsdigita.com>
+
+ * mm-view.el (mm-display-inline-fontify): Allow XEmacs to fully
+ fontify HANDLE.
+
+2001-04-18 Simon Josefsson <simon@josefsson.org>
+
+ * smime.el (smime-ask-passphrase): Rework to return value.
+ (smime-sign-region): Rework to bind value and use it.
+ (smime-decrypt-region): Ditto.
+
+2001-04-18 Mathias Herberts <Mathias.Herberts@iroise.net>
+ Committed by Simon Josefsson <simon@josefsson.org>
+
+ * smime.el (smime-ask-passphrase): New function.
+ (smime-sign-region): Use it.
+ (smime-encrypt-cipher): New variable.
+ (smime-decrypt-region): Ditto.
+
+2001-04-12 Jason Merrill <jason_merrill@redhat.com>
+ Committed by Simon Josefsson <simon@josefsson.org>
+
+ * imap.el (imap-shell-open): Erase the buffer *after* copying it into
+ the log.
+
2001-04-14 01:14:42 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
*gnus.el: Oort Gnus v0.02 is released.
(gnus-tmp-agent (if (and gnus-agent
(member method
gnus-agent-covered-methods))
- "(agent)"
+ " (agent)"
"")))
(beginning-of-line)
(gnus-add-text-properties
(error "Error in %s" ding-file))))
;; Older versions of `gnus-format-specs' are no longer valid
;; in Oort Gnus 0.01.
- (let ((version (gnus-continuum-version gnus-newsrc-file-version)))
+ (let ((version
+ (and gnus-newsrc-file-version
+ (gnus-continuum-version gnus-newsrc-file-version))))
(when (or (not version)
(< version 5.090002))
(setq gnus-format-specs nil)))
:group 'gnus-summary
:type 'regexp)
+(defcustom gnus-read-all-available-headers nil
+ "Whether Gnus should parse all headers made available to it.
+This is mostly relevant for slow backends where the user may
+wish to widen the summary buffer to include all headers
+that were fetched. Say, for nnultimate groups."
+ :group 'gnus-summary
+ :type '(choice boolean regexp))
;;; Internal variables
(mail-parse-ignored-charsets gnus-newsgroup-ignored-charsets)
(cur nntp-server-buffer)
(dependencies (or dependencies gnus-newsgroup-dependencies))
+ (allp (cond
+ ((eq gnus-read-all-available-headers t)
+ t)
+ ((stringp gnus-read-all-available-headers)
+ (string-match gnus-read-all-available-headers group))
+ (t
+ nil)))
number headers header)
(save-excursion
(set-buffer nntp-server-buffer)
(goto-char (point-min))
(while (not (eobp))
(condition-case ()
- (while (and sequence (not (eobp)))
+ (while (and (or sequence allp)
+ (not (eobp)))
(setq number (read cur))
- (while (and sequence
- (< (car sequence) number))
- (setq sequence (cdr sequence)))
- (and sequence
- (eq number (car sequence))
- (progn
- (setq sequence (cdr sequence))
- (setq header (inline
- (gnus-nov-parse-line
- number dependencies force-new))))
- (push header headers))
+ (when (not allp)
+ (while (and sequence
+ (< (car sequence) number))
+ (setq sequence (cdr sequence))))
+ (when (and (or allp
+ (and sequence
+ (eq number (car sequence))))
+ (progn
+ (setq sequence (cdr sequence))
+ (setq header (inline
+ (gnus-nov-parse-line
+ number dependencies force-new)))))
+ (push header headers))
(forward-line 1))
(error
(gnus-error 4 "Strange nov line (%d)"
:link '(custom-manual "(gnus)Exiting Gnus")
:group 'gnus)
-(defconst gnus-version-number "0.02"
+(defconst gnus-version-number "0.03"
"Version number for this version of Gnus.")
(defconst gnus-version (format "Oort Gnus v%s" gnus-version-number)
"The mail address of the Gnus maintainers.")
(defvar gnus-info-nodes
- '((gnus-group-mode "(gnus)The Group Buffer")
- (gnus-summary-mode "(gnus)The Summary Buffer")
- (gnus-article-mode "(gnus)The Article Buffer")
- (gnus-server-mode "(gnus)The Server Buffer")
+ '((gnus-group-mode "(gnus)Group Buffer")
+ (gnus-summary-mode "(gnus)Summary Buffer")
+ (gnus-article-mode "(gnus)Article Buffer")
+ (gnus-server-mode "(gnus)Server Buffer")
(gnus-browse-mode "(gnus)Browse Foreign Server")
(gnus-tree-mode "(gnus)Tree Display"))
"Alist of major modes and related Info nodes.")
(not (imap-parse-greeting)))
(accept-process-output process 1)
(sit-for 1))
- (erase-buffer)
(and imap-log
(with-current-buffer (get-buffer-create imap-log)
(imap-disable-multibyte)
(buffer-disable-undo)
(goto-char (point-max))
(insert-buffer-substring buffer)))
+ (erase-buffer)
(when (memq (process-status process) '(open run))
(setq done process)))))
(if done
(goto-char (point-min))
(when (looking-at "movemail: ")
(delete-region (point-min) (match-end 0)))
+ ;; Result may be a signal description string.
(unless (yes-or-no-p
- (format "movemail: %s (%d return). Continue? "
+ (format "movemail: %s (%s return). Continue? "
(buffer-string) result))
(error "%s" (buffer-string)))
(setq to nil)))))))
"A list of mm-uu configuration.
To disable dissecting shar codes, for instance, add
`(shar . disabled)' to this list."
- :type `(repeat (cons
- ,(cons 'choice
- (mapcar
- (lambda (entry)
- (cons 'item (car entry)))
- mm-uu-type-alist))
- (choice (item disabled))))
+ :type 'alist
+ :options (mapcar (lambda (entry)
+ (list (car entry) '(const disabled)))
+ mm-uu-type-alist)
:group 'gnus-article-mime)
;; functions
(defun mm-display-inline-fontify (handle mode)
(let (text)
- (with-temp-buffer
- (mm-insert-part handle)
- (funcall mode)
- (font-lock-fontify-buffer)
- (when (fboundp 'extent-list)
- (map-extents (lambda (ext ignored)
- (set-extent-property ext 'duplicable t)
- nil)
- nil nil nil nil nil 'text-prop))
- (setq text (buffer-string)))
+ ;; XEmacs @#$@ version of font-lock refuses to fully turn itself
+ ;; on for buffers whose name begins with " ". That's why we use
+ ;; save-current-buffer/get-buffer-create rather than
+ ;; with-temp-buffer.
+ (save-current-buffer
+ (set-buffer (generate-new-buffer "*fontification*"))
+ (unwind-protect
+ (progn
+ (buffer-disable-undo)
+ (mm-insert-part handle)
+ (funcall mode)
+ (let ((font-lock-verbose nil))
+ ;; I find font-lock a bit too verbose.
+ (font-lock-fontify-buffer))
+ ;; By default, XEmacs font-lock uses non-duplicable text
+ ;; properties. This code forces all the text properties
+ ;; to be copied along with the text.
+ (when (fboundp 'extent-list)
+ (map-extents (lambda (ext ignored)
+ (set-extent-property ext 'duplicable t)
+ nil)
+ nil nil nil nil nil 'text-prop))
+ (setq text (buffer-string)))
+ (kill-buffer (current-buffer))))
(mm-insert-inline handle text)))
+;; Shouldn't these functions check whether the user even wants to use
+;; font-lock? At least under XEmacs, this fontification is pretty
+;; much unconditional. Also, it would be nice to change for the size
+;; of the fontified region.
+
(defun mm-display-patch-inline (handle)
(mm-display-inline-fontify handle 'diff-mode))
(list
:predicate
`(lambda (file)
- (string-match
- ,(concat
- (regexp-quote (concat group suffix))
- "$")
- file)))))))
+ (string-equal
+ ,(concat group suffix)
+ (file-name-nondirectory file))))))))
(when nnmail-fetched-sources
(if (member source nnmail-fetched-sources)
(setq source nil)
(defun nnrss-no-cache (url)
"")
+;; TODO:: disable cache.
+;;
+;; (defun nnrss-insert-w3 (url)
+;; (require 'url)
+;; (require 'url-cache)
+;; (let ((url-cache-creation-function 'nnrss-no-cache))
+;; (mm-with-unibyte-current-buffer
+;; (nnweb-insert url))))
+
(defun nnrss-insert-w3 (url)
- (require 'url)
- (require 'url-cache)
- (let ((url-cache-creation-function 'nnrss-no-cache))
- (mm-with-unibyte-current-buffer
- (nnweb-insert url))))
+ (mm-with-unibyte-current-buffer
+ (nnweb-insert url)))
(defun nnrss-decode-entities-unibyte-string (string)
(mm-with-unibyte-buffer
"Retrieve group info on GROUPS."
(nntp-possibly-change-group nil server)
(when (nntp-find-connection-buffer nntp-server-buffer)
- (save-excursion
- ;; Erase nntp-server-buffer before nntp-inhibit-erase.
- (set-buffer nntp-server-buffer)
- (erase-buffer)
- (set-buffer (nntp-find-connection-buffer nntp-server-buffer))
- ;; The first time this is run, this variable is `try'. So we
- ;; try.
- (when (eq nntp-server-list-active-group 'try)
- (nntp-try-list-active (car groups)))
- (erase-buffer)
- (let ((count 0)
- (received 0)
- (last-point (point-min))
- (nntp-inhibit-erase t)
- (buf (nntp-find-connection-buffer nntp-server-buffer))
- (command (if nntp-server-list-active-group "LIST ACTIVE" "GROUP")))
- (while groups
- ;; Send the command to the server.
- (nntp-send-command nil command (pop groups))
- (incf count)
- ;; Every 400 requests we have to read the stream in
- ;; order to avoid deadlocks.
- (when (or (null groups) ;All requests have been sent.
- (zerop (% count nntp-maximum-request)))
- (nntp-accept-response)
+ (catch 'done
+ (save-excursion
+ ;; Erase nntp-server-buffer before nntp-inhibit-erase.
+ (set-buffer nntp-server-buffer)
+ (erase-buffer)
+ (set-buffer (nntp-find-connection-buffer nntp-server-buffer))
+ ;; The first time this is run, this variable is `try'. So we
+ ;; try.
+ (when (eq nntp-server-list-active-group 'try)
+ (nntp-try-list-active (car groups)))
+ (erase-buffer)
+ (let ((count 0)
+ (received 0)
+ (last-point (point-min))
+ (nntp-inhibit-erase t)
+ (buf (nntp-find-connection-buffer nntp-server-buffer))
+ (command (if nntp-server-list-active-group "LIST ACTIVE" "GROUP")))
+ (while groups
+ ;; Send the command to the server.
+ (nntp-send-command nil command (pop groups))
+ (incf count)
+ ;; Every 400 requests we have to read the stream in
+ ;; order to avoid deadlocks.
+ (when (or (null groups) ;All requests have been sent.
+ (zerop (% count nntp-maximum-request)))
+ (nntp-accept-response)
+ (while (and (gnus-buffer-live-p buf)
+ (progn
+ ;; Search `blue moon' in this file for the
+ ;; reason why set-buffer here.
+ (set-buffer buf)
+ (goto-char last-point)
+ ;; Count replies.
+ (while (re-search-forward "^[0-9]" nil t)
+ (incf received))
+ (setq last-point (point))
+ (< received count)))
+ (nntp-accept-response))))
+
+ ;; Wait for the reply from the final command.
+ (unless (gnus-buffer-live-p buf)
+ (nnheader-report 'nntp "Connection to %s is closed." server)
+ (throw 'done nil))
+ (set-buffer buf)
+ (goto-char (point-max))
+ (re-search-backward "^[0-9]" nil t)
+ (when (looking-at "^[23]")
(while (and (gnus-buffer-live-p buf)
(progn
- ;; Search `blue moon' in this file for the
- ;; reason why set-buffer here.
(set-buffer buf)
- (goto-char last-point)
- ;; Count replies.
- (while (re-search-forward "^[0-9]" nil t)
- (incf received))
- (setq last-point (point))
- (< received count)))
- (nntp-accept-response))))
-
- ;; Wait for the reply from the final command.
- (unless (gnus-buffer-live-p buf)
- (error
- (nnheader-report 'nntp "Connection to %s is closed." server)))
- (set-buffer buf)
- (goto-char (point-max))
- (re-search-backward "^[0-9]" nil t)
- (when (looking-at "^[23]")
- (while (and (gnus-buffer-live-p buf)
- (progn
- (set-buffer buf)
- (goto-char (point-max))
- (if (not nntp-server-list-active-group)
- (not (re-search-backward "\r?\n" (- (point) 3) t))
- (not (re-search-backward "^\\.\r?\n"
- (- (point) 4) t)))))
- (nntp-accept-response)))
-
- ;; Now all replies are received. We remove CRs.
- (unless (gnus-buffer-live-p buf)
- (error
- (nnheader-report 'nntp "Connection to %s is closed." server)))
- (set-buffer buf)
- (goto-char (point-min))
- (while (search-forward "\r" nil t)
- (replace-match "" t t))
-
- (if (not nntp-server-list-active-group)
- (progn
- (copy-to-buffer nntp-server-buffer (point-min) (point-max))
- 'group)
- ;; We have read active entries, so we just delete the
- ;; superfluous gunk.
+ (goto-char (point-max))
+ (if (not nntp-server-list-active-group)
+ (not (re-search-backward "\r?\n" (- (point) 3) t))
+ (not (re-search-backward "^\\.\r?\n"
+ (- (point) 4) t)))))
+ (nntp-accept-response)))
+
+ ;; Now all replies are received. We remove CRs.
+ (unless (gnus-buffer-live-p buf)
+ (nnheader-report 'nntp "Connection to %s is closed." server)
+ (throw 'done nil))
+ (set-buffer buf)
(goto-char (point-min))
- (while (re-search-forward "^[.2-5]" nil t)
- (delete-region (match-beginning 0)
- (progn (forward-line 1) (point))))
- (copy-to-buffer nntp-server-buffer (point-min) (point-max))
- 'active)))))
-
+ (while (search-forward "\r" nil t)
+ (replace-match "" t t))
+
+ (if (not nntp-server-list-active-group)
+ (progn
+ (copy-to-buffer nntp-server-buffer (point-min) (point-max))
+ 'group)
+ ;; We have read active entries, so we just delete the
+ ;; superfluous gunk.
+ (goto-char (point-min))
+ (while (re-search-forward "^[.2-5]" nil t)
+ (delete-region (match-beginning 0)
+ (progn (forward-line 1) (point))))
+ (copy-to-buffer nntp-server-buffer (point-min) (point-max))
+ 'active))))))
+
(deffoo nntp-retrieve-articles (articles &optional group server)
(nntp-possibly-change-group group server)
(save-excursion
(setq map mapping)
(while (and (setq article (car articles))
map)
+ ;; Skip past the articles in the map until we reach the
+ ;; article we're looking for.
(while (and map
(or (> article (caar map))
(< (cadar map) (caar map))))
(setq contents (cdr (nth 2 (car (nth 2 table)))))
(setq total-contents (nconc total-contents contents))
(incf current-page))
- ;;(setq total-contents (nreverse total-contents))
- (dolist (art (cdr elem))
- (if (not (nth (1- (cdr art)) total-contents))
- () ;(debug)
- (push (list (car art)
- (nth (1- (cdr art)) total-contents)
- subject)
- nnultimate-articles)))))
+ (when t
+ (let ((i 0))
+ (dolist (co total-contents)
+ (push (list (or (nnultimate-topic-article-to-article
+ group (car elem) (incf i))
+ 1)
+ co subject)
+ nnultimate-articles))))
+ (when nil
+ (dolist (art (cdr elem))
+ (when (nth (1- (cdr art)) total-contents)
+ (push (list (car art)
+ (nth (1- (cdr art)) total-contents)
+ subject)
+ nnultimate-articles))))))
(setq nnultimate-articles
(sort nnultimate-articles 'car-less-than-car))
;; Now we have all the articles, conveniently in an alist
from (or date "")
(concat "<" (number-to-string sid) "%"
(number-to-string article)
- "@ultimate>")
+ "@ultimate." server ">")
"" 0
(/ (length (mapconcat
'identity
(nnheader-insert-nov (cdr header))))))
'nov)))
+(defun nnultimate-topic-article-to-article (group topic article)
+ (catch 'found
+ (dolist (elem (nth 5 (assoc group nnultimate-groups)))
+ (when (and (= topic (nth 2 elem))
+ (>= article (nth 3 elem))
+ (< article (+ (- (nth 1 elem) (nth 0 elem)) 1
+ (nth 3 elem))))
+ (throw 'found
+ (+ (nth 0 elem) (- article (nth 3 elem))))))))
+
(deffoo nnultimate-request-group (group &optional server dont-check)
(nnultimate-possibly-change-server nil server)
(when (not nnultimate-groups)
;; that decision. One might think that this even influenced were I
;; store my keys, and one would probably be right. :-)
;;
+;; Update: Mathias Herberts sent the patch. However, it uses
+;; environment variables to pass the password to OpenSSL, which is
+;; slightly insecure. Hence a new todo: use a better -passin method.
+;;
;; Suggestions and comments are appreciated, mail me at simon@josefsson.org.
;; <rant>
;;; Code:
(require 'dig)
+(require 'comint)
(eval-when-compile (require 'cl))
(defgroup smime nil
:type 'string
:group 'smime)
+;; OpenSSL option to select the encryption cipher
+
+(defcustom smime-encrypt-cipher "-des3"
+ "Cipher algorithm used for encryption."
+ :type '(choice (const :tag "Triple DES" "-des3")
+ (const :tag "DES" "-des")
+ (const :tag "RC2 40 bits" "-rc2-40")
+ (const :tag "RC2 64 bits" "-rc2-64")
+ (const :tag "RC2 128 bits" "-rc2-128"))
+ :group 'smime)
+
(defcustom smime-dns-server nil
"DNS server to query certificates from.
If nil, use system defaults."
(defvar smime-details-buffer "*OpenSSL output*")
+;; Password dialog function
+
+(defun smime-ask-passphrase ()
+ "Asks the passphrase to unlock the secret key."
+ (let ((passphrase
+ (comint-read-noecho
+ "Passphrase for secret key (RET for no passphrase): " t)))
+ (if (string= passphrase "")
+ nil
+ passphrase)))
+
;; OpenSSL wrappers.
(defun smime-call-openssl-region (b e buf &rest args)
If signing fails, the buffer is not modified. Region is assumed to
have proper MIME tags. KEYFILE is expected to contain a PEM encoded
private key and certificate."
- (let ((buffer (generate-new-buffer (generate-new-buffer-name " *smime*"))))
+ (let ((buffer (generate-new-buffer (generate-new-buffer-name " *smime*")))
+ (passphrase (smime-ask-passphrase)))
+ (if passphrase
+ (setenv "GNUS_SMIME_PASSPHRASE" passphrase))
(prog1
- (when (smime-call-openssl-region b e buffer "smime" "-sign"
- "-signer" (expand-file-name keyfile))
+ (when (apply 'smime-call-openssl-region b e buffer "smime" "-sign"
+ "-signer" (expand-file-name keyfile)
+ (if passphrase
+ (list "-passin" "env:GNUS_SMIME_PASSPHRASE")))
(delete-region b e)
(insert-buffer buffer)
(when (looking-at "^MIME-Version: 1.0$")
(delete-region (point) (progn (forward-line 1) (point))))
t)
+ (if passphrase
+ (setenv "GNUS_SMIME_PASSPHRASE" "" t))
(with-current-buffer (get-buffer-create smime-details-buffer)
(goto-char (point-max))
(insert-buffer buffer))
(let ((buffer (generate-new-buffer (generate-new-buffer-name " *smime*"))))
(prog1
(when (apply 'smime-call-openssl-region b e buffer "smime" "-encrypt"
- (mapcar 'expand-file-name certfiles))
+ smime-encrypt-cipher (mapcar 'expand-file-name certfiles))
(delete-region b e)
(insert-buffer buffer)
(when (looking-at "^MIME-Version: 1.0$")
(defun smime-decrypt-region (b e keyfile)
(let ((buffer (generate-new-buffer (generate-new-buffer-name "*smime*")))
- CAs)
- (when (apply 'smime-call-openssl-region b e buffer "smime" "-decrypt"
- "-recip" (list keyfile))
-
+ CAs (passphrase (smime-ask-passphrase)))
+ (if passphrase
+ (setenv "GNUS_SMIME_PASSPHRASE" passphrase))
+ (when (apply 'smime-call-openssl-region
+ b e buffer "smime" "-decrypt"
+ "-recip" (list keyfile)
+ (if passphrase
+ (list "-passin" "env:GNUS_SMIME_PASSPHRASE" )))
)
+ (if passphrase
+ (setenv "GNUS_SMIME_PASSPHRASE" "" t))
(with-current-buffer (get-buffer-create smime-details-buffer)
(goto-char (point-max))
(insert-buffer buffer))
+2001-04-15 19:38:54 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.texi (Mail and Post): Fix.
+
+2001-04-29 09:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * gnus.texi: Remove a few The's.
+ (RSS): New.
+
+2001-04-26 Kai Gro\e,A_\e(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+ * gnus.texi (Unread Articles): Say that dormants are similar to
+ ticked.
+
2001-04-13 Kai Gro\e,A_\e(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus.texi (Sorting Groups): Note `C-k' and `C-y' for manually
* Subscription Methods:: What Gnus should do with new groups.
* Filtering New Groups:: Making Gnus ignore certain new groups.
-The Group Buffer
+Group Buffer
* Group Buffer Format:: Information listed and how you can change it.
* Group Maneuvering:: Commands for moving in the group buffer.
* Group Timestamp:: Making Gnus keep track of when you last read a group.
* File Commands:: Reading and writing the Gnus files.
-The Summary Buffer
+Summary Buffer
* Summary Buffer Format:: Deciding how the summary buffer is to look.
* Summary Maneuvering:: Moving around the summary buffer.
* Summary Generation Commands:: (Re)generating the summary buffer.
* Really Various Summary Commands:: Those pesky non-conformant commands.
-The Article Buffer
+Article Buffer
* Hiding Headers:: Deciding what headers should be displayed.
* Using MIME:: Pushing articles through @sc{mime} before reading them.
* Combined Groups:: Combining groups into one group.
* Gnus Unplugged:: Reading news and mail offline.
-The Server Buffer
+Server Buffer
* Server Buffer Format:: You can customize the look of this buffer.
* Server Commands:: Commands to manipulate servers.
* Slashdot:: Reading the Slashdot comments.
* Ultimate:: The Ultimate Bulletin Board systems.
* Web Archive:: Reading mailing list archived on web.
+* RSS:: Reading RDF site summary.
+* Customizing w3:: Doing stuff to Emacs/w3 from Gnus.
Other Sources
@dfn{Dormant articles} will only appear in the summary buffer if there
are followups to it. If you want to see them even if they don't have
followups, you can use the @kbd{/ D} command (@pxref{Limiting}).
+Otherwise (except for the visibility issue), they are just like ticked
+messages.
@item SPACE
@vindex gnus-unread-mark
off sparse leaf nodes that don't lead anywhere. This variable is
@code{nil} by default.
+@item gnus-read-all-available-headers
+@vindex gnus-read-all-available-headers
+This is a rather obscure variable that few will find useful. It's
+intended for those non-news newsgroups where the backend has to fetch
+quite a lot to present the summary buffer, and where it's impossible to
+go back to parents of articles. This is mostly the case in the
+web-based groups, like the @code{nnultimate} groups.
+
+If you don't use those, then it's safe to leave this as the default
+@code{nil}. If you want to use this variable, it should be a regexp
+that matches the group name, or @code{t} for all groups.
+
@end table
(add-hook 'gnus-select-group-hook
(lambda ()
(cond
- ((string-match "^de\\." gnus-newsgroup-name)
+ ((string-match
+ "^de\\." (gnus-group-real-name gnus-newsgroup-name))
(ispell-change-dictionary "deutsch"))
(t
(ispell-change-dictionary "english")))))
* Slashdot:: Reading the Slashdot comments.
* Ultimate:: The Ultimate Bulletin Board systems.
* Web Archive:: Reading mailing list archived on web.
+* RSS:: Reading RDF site summary.
* Customizing w3:: Doing stuff to Emacs/w3 from Gnus.
@end menu
The password for your account on the web server.
@end table
+@node RSS
+@subsection RSS
+@cindex nnrss
+@cindex RSS
+
+Some sites have RDF site summary (RSS)
+@uref{http://purl.org/rss/1.0/spec}. It has a quite regular and nice
+interface, and it's possible to get the information Gnus needs to keep
+groups updated.
+
+The easiest way to get started with @code{nnrss} is to say something
+like the following in the group buffer: @kbd{B nnrss RET RET}, then
+subscribe groups.
+
+The following @code{nnrss} variables can be altered:
+
+@table @code
+@item nnrss-directory
+@vindex nnrss-directory
+The directory where @code{nnrss} stores its files. The default is
+@samp{~/News/rss/}.
+
+@end table
@node Customizing w3
@subsection Customizing w3