+2001-09-10 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * lisp/gnus-xmas.el (gnus-tilde-pad-form): Abolished. Use the
+ new function `gnus-correct-pad-form' instead.
+ * lisp/gnus-spec.el (gnus-tilde-pad-form): Ditto.
+
2001-09-05 TSUCHIYA Masatoshi <tsuchiya@namazu.org>
* lisp/nnir.el (nnir-run-namazu): Fix a side effect when handling
+2001-09-09 Simon Josefsson <jas@extundo.com>
+
+ * mm-decode.el (mm-inline-media-tests): Add
+ application/x-emacs-lisp.
+ (mm-attachment-override-types): Add
+ application/{x-,}pkcs7-signature.
+
+ * gnus-srvr.el (gnus-server-mode-hook, gnus-server-exit-hook)
+ (gnus-server-line-format, gnus-server-mode-line-format)
+ (gnus-server-browse-in-group-buffer): Customize.
+
+2001-09-08 16:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * nnml.el (nnml-marks-changed-p): Typo.
+ (nnml-save-marks, nnml-open-marks): Use gnus-sethash.
+ (nnml-marks-changed-p): Use gnus-gethash.
+ (nnml-marks-modtime): Use gnus-make-hashtable.
+
+ * nnfolder.el (nnfolder-marks-changed-p): Typo.
+ (nnfolder-request-expire-articles, nnfolder-save-marks)
+ (nnfolder-open-marks): Typo.
+ (nnfolder-save-marks, nnfolder-open-marks): Use gnus-sethash.
+ (nnfolder-marks-changed-p): Use gnus-gethash.
+ (nnfolder-marks-modtime): Use gnus-make-hashtable.
+
+2001-09-08 Simon Josefsson <jas@extundo.com>
+
+ * nnfolder.el (nnfolder-marks-modtime): New variable.
+ (nnfolder-marks-changed-p): New function.
+ (nnfolder-save-marks, nnfolder-open-marks): Save modtime.
+ (nnfolder-request-update-info): Don't update if marks didn't change.
+
+ * nnml.el (nnml-marks-modtime): New variable.
+ (nnml-marks-changed-p): New function.
+ (nnml-save-marks, nnml-open-marks): Save modtime.
+ (nnml-request-update-info): Don't update if marks didn't change.
+
+ * gnus-agent.el (gnus-agent-any-covered-gcc)
+ (gnus-agent-add-server, gnus-agent-remove-server): Use
+ gnus-agent-method-p.
+
+ * gnus-art.el (gnus-buttonized-mime-types): New variable.
+ (gnus-unbuttonized-mime-type-p): Use it.
+
+ * gnus-agent.el (gnus-agent-fetch-group): If online, actually
+ fetch group.
+
+2001-09-08 Simon Josefsson <jas@extundo.com>
+ From Daniel Pittman <daniel@rimspace.net>
+
+ * gnus-spec.el (gnus-correct-pad-form): New function.
+ (gnus-parse-simple-format): Use it.
+
+2001-09-07 Simon Josefsson <jas@extundo.com>
+
+ * gnus-group.el (gnus-group-sort-groups): Unmark all groups.
+ (gnus-group-sort-selected-groups): Ditto. Suggested by Harry
+ Putnam <reader@newsguy.com>.
+ (gnus-group-sort-selected-groups): Touch dribble file.
+
2001-09-07 Raja R Harinath <harinath@cs.umn.edu>
* nnml.el (nnml-filenames-are-evil): New variable.
gcc " ,")))))
covered)
(while (and (not covered) methods)
- (setq covered
- (member (car methods) gnus-agent-covered-methods)
+ (setq covered (gnus-agent-method-p (car methods))
methods (cdr methods)))
covered)))
(let ((state gnus-plugged))
(unwind-protect
(progn
+ (unless group
+ (error "No group on the current line"))
(unless state
- (gnus-agent-toggle-plugged gnus-plugged)
- (unless group
- (error "No group on the current line"))
- (let ((gnus-command-method (gnus-find-method-for-group group)))
- (gnus-agent-with-fetch
- (gnus-agent-fetch-group-1 group gnus-command-method)
- (gnus-message 5 "Fetching %s...done" group)))))
+ (gnus-agent-toggle-plugged gnus-plugged))
+ (let ((gnus-command-method (gnus-find-method-for-group group)))
+ (gnus-agent-with-fetch
+ (gnus-agent-fetch-group-1 group gnus-command-method)
+ (gnus-message 5 "Fetching %s...done" group))))
(when (and (not state)
gnus-plugged)
(gnus-agent-toggle-plugged gnus-plugged)))))
(unless server
(error "No server on the current line"))
(let ((method (gnus-server-get-method nil (gnus-server-server-name))))
- (when (member method gnus-agent-covered-methods)
+ (when (gnus-agent-method-p method)
(error "Server already in the agent program"))
(push method gnus-agent-covered-methods)
(gnus-server-update-server server)
(unless server
(error "No server on the current line"))
(let ((method (gnus-server-get-method nil (gnus-server-server-name))))
- (unless (member method gnus-agent-covered-methods)
+ (unless (gnus-agent-method-p method)
(error "Server not in the agent program"))
(setq gnus-agent-covered-methods
(delete method gnus-agent-covered-methods))
:type '(repeat regexp))
(defcustom gnus-unbuttonized-mime-types '(".*/.*")
- "List of MIME types that should not be given buttons when rendered inline."
+ "List of MIME types that should not be given buttons when rendered inline.
+See also `gnus-buttonized-mime-types' which may override this variable."
+ :version "21.1"
+ :group 'gnus-article-mime
+ :type '(repeat regexp))
+
+(defcustom gnus-buttonized-mime-types nil
+ "List of MIME types that should be given buttons when rendered inline.
+If set, this variable overrides `gnus-unbuttonized-mime-types'.
+To see e.g. security buttons you could set this to
+`(\"multipart/signed\")'."
:version "21.1"
:group 'gnus-article-mime
:type '(repeat regexp))
(defun gnus-unbuttonized-mime-type-p (type)
"Say whether TYPE is to be unbuttonized."
(unless gnus-inhibit-mime-unbuttonizing
- (catch 'found
- (let ((types gnus-unbuttonized-mime-types))
- (while types
- (when (string-match (pop types) type)
- (throw 'found t)))))))
+ (when (catch 'found
+ (let ((types gnus-unbuttonized-mime-types))
+ (while types
+ (when (string-match (pop types) type)
+ (throw 'found t)))))
+ (not (catch 'found
+ (let ((types gnus-buttonized-mime-types))
+ (while types
+ (when (string-match (pop types) type)
+ (throw 'found t)))))))))
(defun gnus-article-insert-newline ()
"Insert a newline, but mark it as undeletable."
(interactive (list gnus-group-sort-function current-prefix-arg))
(funcall gnus-group-sort-alist-function
(gnus-make-sort-function func) reverse)
+ (gnus-group-unmark-all-groups)
(gnus-group-list-groups)
(gnus-dribble-touch))
(let ((groups (gnus-group-process-prefix n)))
(funcall gnus-group-sort-selected-function
groups (gnus-make-sort-function func) reverse)
- (gnus-group-list-groups)))
+ (gnus-group-unmark-all-groups)
+ (gnus-group-list-groups)
+ (gnus-dribble-touch)))
(defun gnus-group-sort-selected-flat (groups func reverse)
(let (entries infos)
(point) (progn ,@form (point))
'(gnus-face t face ,(symbol-value (intern (format "gnus-face-%d" type))))))
-;;; Avoid byte-compile warning.
-(defun gnus-tilde-pad-form (el pad-width)
- "Dummy function except for XEmacs-mule. It will be redefined
-by `gnus-xmas-redefine'."
- (let ((val (if (symbolp el) (eval el) el)))
- (` (, val))))
-
(defun gnus-balloon-face-function (form type)
`(gnus-put-text-property
(point) (progn ,@form (point))
(if (equal val ,ignore-value)
"" val))))
+(defun gnus-correct-pad-form (el pad-width)
+ "Return a form that pads EL to PAD-WIDTH accounting for multi-column
+characters correctly. This is because `format' may pad to columns or to
+characters when given a pad value."
+ (let ((pad (abs pad-width)))
+ (if (symbolp el)
+ `(let ((need (- ,pad (gnus-correct-length ,el))))
+ (if (> need 0)
+ (concat ,el (make-string need ?\ ))
+ ,el))
+ `(let* ((val (eval ,el))
+ (need (- ,pad (gnus-correct-length ,el))))
+ (if (> need 0)
+ (concat ,el (make-string need ?\ ))
+ ,el)))))
+
(defun gnus-parse-format (format spec-alist &optional insert)
;; This function parses the FORMAT string with the help of the
;; SPEC-ALIST and returns a list that can be eval'ed to return the
;; This function parses the FORMAT string with the help of the
;; SPEC-ALIST and returns a list that can be eval'ed to return a
;; string.
- (let ((xemacs-mule-p (and (featurep 'xemacs) (featurep 'mule)))
- max-width
+ (let (max-width
spec flist fstring elem result dontinsert user-defined
type value pad-width spec-beg cut-width ignore-value
tilde-form tilde elem-type)
(setq elem '("*" ?s))))
(setq elem-type (cadr elem))
;; Insert the new format elements.
- (and pad-width (not xemacs-mule-p)
- (insert (number-to-string pad-width)))
+ (when (and pad-width
+ (not (and (featurep 'xemacs)
+ gnus-use-correct-string-widths)))
+ (insert (number-to-string pad-width)))
;; Create the form to be evaled.
(if (or max-width cut-width ignore-value
- (and pad-width xemacs-mule-p))
+ (and (featurep 'xemacs)
+ gnus-use-correct-string-widths))
(progn
(insert ?s)
(let ((el (car elem)))
(setq el (gnus-tilde-cut-form el cut-width)))
(when max-width
(setq el (gnus-tilde-max-form el max-width)))
- (and pad-width xemacs-mule-p
- (setq el (gnus-tilde-pad-form el pad-width)))
+ (when pad-width
+ (setq el (gnus-correct-pad-form el pad-width)))
(push el flist)))
(insert elem-type)
(push (car elem) flist))))
(require 'gnus-int)
(require 'gnus-range)
-(defvar gnus-server-mode-hook nil
- "Hook run in `gnus-server-mode' buffers.")
+(defcustom gnus-server-mode-hook nil
+ "Hook run in `gnus-server-mode' buffers."
+ :group 'gnus-server
+ :type 'hook)
-(defconst gnus-server-line-format " {%(%h:%w%)} %s%a\n"
+(defcustom gnus-server-exit-hook nil
+ "Hook run when exiting the server buffer."
+ :group 'gnus-server
+ :type 'hook)
+
+(defcustom gnus-server-line-format " {%(%h:%w%)} %s%a\n"
"Format of server lines.
It works along the same lines as a normal formatting string,
with some simple extensions.
%n name
%w address
%s status
-%a agent covered")
-
-(defvar gnus-server-mode-line-format "Gnus: %%b"
- "The format specification for the server mode line.")
+%a agent covered"
+ :group 'gnus-server-visual
+ :type 'string)
-(defvar gnus-server-exit-hook nil
- "*Hook run when exiting the server buffer.")
+(defcustom gnus-server-mode-line-format "Gnus: %%b"
+ "The format specification for the server mode line."
+ :group 'gnus-server-visual
+ :type 'string)
-(defvar gnus-server-browse-in-group-buffer nil
- "Whether browse server in group buffer.")
+(defcustom gnus-server-browse-in-group-buffer nil
+ "Whether browse server in group buffer."
+ :group 'gnus-server-visual
+ :type 'string)
;;; Internal variables.
(setq str (substring str from-idx idx))
(if padding
(concat head-padding str tail-padding)
- str))))
-
- (defun gnus-tilde-pad-form (el pad-width)
- "Return a form that pads EL to PAD-WIDTH."
- (let ((pad (abs pad-width)))
- (if (symbolp el)
- (if (< pad-width 0)
- `(let ((val (format "%s" ,el)))
- (concat val (make-string
- (max 0 (- ,pad (string-width val))) ?\ )))
- `(let ((val (format "%s" ,el)))
- (concat (make-string
- (max 0 (- ,pad (string-width val))) ?\ )
- val)))
- (if (< pad-width 0)
- `(let ((val (eval ,el)))
- (concat val (make-string
- (max 0 (- ,pad (string-width val))) ?\ )))
- `(let ((val (eval ,el)))
- (concat (make-string
- (max 0 (- ,pad (string-width val))) ?\ )
- val))))))
- ))
+ str))))))
;;; XEmacs logo and toolbar.
(lambda (handle)
(locate-library "diff-mode")))
("application/emacs-lisp" mm-display-elisp-inline identity)
+ ("application/x-emacs-lisp" mm-display-elisp-inline identity)
("text/html"
mm-inline-text
(lambda (handle)
(defcustom mm-attachment-override-types '("text/x-vcard"
"application/pkcs7-mime"
- "application/x-pkcs7-mime")
+ "application/x-pkcs7-mime"
+ "application/pkcs7-signature"
+ "application/x-pkcs7-signature")
"Types to have \"attachment\" ignored if they can be displayed inline."
:type '(repeat string)
:group 'mime-display)
(defvoo nnfolder-marks-file-suffix ".mrk")
+(defvar nnfolder-marks-modtime (gnus-make-hashtable))
+
\f
;;; Interface functions
(with-temp-buffer
(nnfolder-request-article (car maybe-expirable)
newsgroup server (current-buffer))
- (let ((nnml-current-directory nil))
+ (let ((nnfolder-current-directory nil))
(nnmail-expiry-target-group
nnmail-expiry-target newsgroup))))
(nnheader-message 5 "Deleting article %d in %s..."
(when (and server
(not (nnfolder-server-opened server)))
(nnfolder-open-server server))
- (unless nnfolder-marks-is-evil
+ (when (and (not nnfolder-marks-is-evil) (nnfolder-marks-changed-p group))
(nnheader-message 8 "Updating marks for %s..." group)
(nnfolder-open-marks group server)
;; Update info using `nnfolder-marks'.
(let ((nnfolder-directory (or nnfolder-marks-directory nnfolder-directory)))
(concat (nnfolder-group-pathname group) nnfolder-marks-file-suffix)))
+(defun nnfolder-marks-changed-p (group)
+ (let ((file (nnfolder-group-marks-pathname group)))
+ (if (null (gnus-gethash file nnfolder-marks-modtime))
+ t ;; never looked at marks file, assume it has changed
+ (not (eq (gnus-gethash file nnfolder-marks-modtime)
+ (nth 5 (file-attributes file)))))))
+
(defun nnfolder-save-marks (group server)
(let ((file-name-coding-system nnmail-pathname-coding-system)
(file (nnfolder-group-marks-pathname group)))
(condition-case err
- (with-temp-file file
- (erase-buffer)
- (princ nnfolder-marks (current-buffer))
- (insert "\n"))
+ (progn
+ (with-temp-file file
+ (erase-buffer)
+ (princ nnfolder-marks (current-buffer))
+ (insert "\n"))
+ (gnus-sethash file
+ (nth 5 (file-attributes file))
+ nnfolder-marks-modtime))
(error (or (gnus-yes-or-no-p
(format "Could not write to %s (%s). Continue? " file err))
(error "Cannot write to %s (%s)" err))))))
(if (file-exists-p file)
(setq nnfolder-marks (condition-case err
(with-temp-buffer
+ (gnus-sethash file
+ (nth 5 (file-attributes file))
+ nnfolder-marks-modtime)
(nnheader-insert-file-contents file)
(read (current-buffer)))
(error (or (gnus-yes-or-no-p
(defvoo nnml-marks nil)
-\f
+(defvar nnml-marks-modtime (gnus-make-hashtable))
+\f
;;; Interface functions.
(nnoo-define-basics nnml)
(deffoo nnml-request-update-info (group info &optional server)
(nnml-possibly-change-directory group server)
- (unless nnml-marks-is-evil
+ (when (and (not nnml-marks-is-evil) (nnml-marks-changed-p group))
(nnheader-message 8 "Updating marks for %s..." group)
(nnml-open-marks group server)
;; Update info using `nnml-marks'.
(nnheader-message 8 "Updating marks for %s...done" group))
info)
+(defun nnml-marks-changed-p (group)
+ (let ((file (expand-file-name nnml-marks-file-name
+ (nnmail-group-pathname group nnml-directory))))
+ (if (null (gnus-gethash file nnml-marks-modtime))
+ t ;; never looked at marks file, assume it has changed
+ (not (eq (gnus-gethash file nnml-marks-modtime)
+ (nth 5 (file-attributes file)))))))
+
(defun nnml-save-marks (group server)
(let ((file-name-coding-system nnmail-pathname-coding-system)
(file (expand-file-name nnml-marks-file-name
(with-temp-file file
(erase-buffer)
(princ nnml-marks (current-buffer))
- (insert "\n")))
+ (insert "\n"))
+ (gnus-sethash file
+ (nth 5 (file-attributes file))
+ nnml-marks-modtime))
(error (or (gnus-yes-or-no-p
(format "Could not write to %s (%s). Continue? " file err))
(error "Cannot write to %s (%s)" err))))))
(if (file-exists-p file)
(setq nnml-marks (condition-case err
(with-temp-buffer
+ (gnus-sethash file
+ (nth 5 (file-attributes file))
+ nnml-marks-modtime)
(nnheader-insert-file-contents file)
(read (current-buffer)))
(error (or (gnus-yes-or-no-p
+2001-09-08 Simon Josefsson <jas@extundo.com>
+
+ * gnus.texi (MIME Commands): Add gnus-buttonized-mime-types.
+
+2001-09-08 Kai Gro\e,A_\e(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+ * gnus.texi (Topic Commands): Make this the first subsection of
+ `Group Topics'. Rearrange keys to mention the most important keys
+ first and to have subsections. Add some more explanation for
+ C-k/C-y.
+ (Group Buffer): Add comment from Alex Schroeder as todo item.
+
2001-09-06 Kai Gro\e,A_\e(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* gnus.texi (Fancy Mail Splitting): Mention `delete' near the
@chapter Group Buffer
@cindex group buffer
+@c Alex Schroeder suggests to rearrange this as follows:
+@c
+@c <kensanata> ok, just save it for reference. I'll go to bed in a minute.
+@c 1. Selecting a Group, 2. (new) Finding a Group, 3. Group Levels,
+@c 4. Subscription Commands, 5. Group Maneuvering, 6. Group Data,
+@c 7. Group Score, 8. Group Buffer Format
+@c <kensanata> Group Levels should have more information on levels 5 to 9. I
+@c suggest to split the 4th paragraph ("Gnus considers groups...") as follows:
+@c <kensanata> First, "Gnus considers groups... (default 9)."
+@c <kensanata> New, a table summarizing what levels 1 to 9 mean.
+@c <kensanata> Third, "Gnus treats subscribed ... reasons of efficiency"
+@c <kensanata> Then expand the next paragraph or add some more to it.
+@c This short one sentence explains levels 1 and 2, therefore I understand
+@c that I should keep important news at 3 and boring news at 4.
+@c Say so! Then go on to explain why I should bother with levels 6 to 9.
+@c Maybe keep those that you don't want to read temporarily at 6,
+@c those that you never want to read at 8, those that offend your
+@c human rights at 9...
+
+
The @dfn{group buffer} lists all (or parts) of the available groups. It
is the first buffer shown when gnus starts, and will never be killed as
long as gnus is active.
is a toggling command.)
Go ahead, just try it. I'll still be here when you get back. La de
-dum... Nice tune, that... la la la... What, you're back? Yes, and now
-press @kbd{l}. There. All your groups are now listed under
+dum... Nice tune, that... la la la... What, you're back? Yes, and
+now press @kbd{l}. There. All your groups are now listed under
@samp{misc}. Doesn't that make you feel all warm and fuzzy? Hot and
bothered?
If you want this permanently enabled, you should add that minor mode to
-the hook for the group mode:
+the hook for the group mode. Put the following line in your
+@file{~/.gnus} file:
@lisp
(add-hook 'gnus-group-mode-hook 'gnus-topic-mode)
@end lisp
@menu
-* Topic Variables:: How to customize the topics the Lisp Way.
* Topic Commands:: Interactive E-Z commands.
+* Topic Variables:: How to customize the topics the Lisp Way.
* Topic Sorting:: Sorting each topic individually.
* Topic Topology:: A map of the world.
* Topic Parameters:: Parameters that apply to all groups in a topic.
@end menu
-@node Topic Variables
-@subsection Topic Variables
-@cindex topic variables
-
-Now, if you select a topic, it will fold/unfold that topic, which is
-really neat, I think.
-
-@vindex gnus-topic-line-format
-The topic lines themselves are created according to the
-@code{gnus-topic-line-format} variable (@pxref{Formatting Variables}).
-Valid elements are:
-
-@table @samp
-@item i
-Indentation.
-@item n
-Topic name.
-@item v
-Visibility.
-@item l
-Level.
-@item g
-Number of groups in the topic.
-@item a
-Number of unread articles in the topic.
-@item A
-Number of unread articles in the topic and all its subtopics.
-@end table
-
-@vindex gnus-topic-indent-level
-Each sub-topic (and the groups in the sub-topics) will be indented with
-@code{gnus-topic-indent-level} times the topic level number of spaces.
-The default is 2.
-
-@vindex gnus-topic-mode-hook
-@code{gnus-topic-mode-hook} is called in topic minor mode buffers.
-
-@vindex gnus-topic-display-empty-topics
-The @code{gnus-topic-display-empty-topics} says whether to display even
-topics that have no unread articles in them. The default is @code{t}.
-
-
@node Topic Commands
@subsection Topic Commands
@cindex topic commands
available. In addition, a few of the standard keys change their
definitions slightly.
+In general, the following kinds of operations are possible on topics.
+First of all, you want to create topics. Secondly, you want to put
+groups in topics and to move them around until you have an order you
+like. The third kind of operation is to show/hide parts of the whole
+shebang. You might want to hide a topic including its subtopics and
+groups, to get a better overview of the other groups.
+
+Here is a list of the basic keys that you might need to set up topics
+the way you like.
+
@table @kbd
@item T n
Prompt for a new topic name and create it
(@code{gnus-topic-create-topic}).
+@item T TAB
+@itemx TAB
+@kindex T TAB (Topic)
+@kindex TAB (Topic)
+@findex gnus-topic-indent
+``Indent'' the current topic so that it becomes a sub-topic of the
+previous topic (@code{gnus-topic-indent}). If given a prefix,
+``un-indent'' the topic instead.
+
+@item M-TAB
+@kindex M-TAB (Topic)
+@findex gnus-topic-unindent
+``Un-indent'' the current topic so that it becomes a sub-topic of the
+parent of its current parent (@code{gnus-topic-unindent}).
+
+@end table
+
+The following two keys can be used to move groups and topics around.
+They work like the well-known cut and paste. @kbd{C-k} is like cut and
+@kbd{C-y} is like paste. Of course, this being Emacs, we use the terms
+kill and yank rather than cut and paste.
+
+@table @kbd
+
+@item C-k
+@kindex C-k (Topic)
+@findex gnus-topic-kill-group
+Kill a group or topic (@code{gnus-topic-kill-group}). All groups in the
+topic will be removed along with the topic.
+
+@item C-y
+@kindex C-y (Topic)
+@findex gnus-topic-yank-group
+Yank the previously killed group or topic
+(@code{gnus-topic-yank-group}). Note that all topics will be yanked
+before all groups.
+
+So, to move a topic to the beginning of the list of topics, just hit
+@kbd{C-k} on it. This is like the `cut' part of cut and paste. Then,
+move the cursor to the beginning of the buffer (just below the `Gnus'
+topic) and hit @kbd{C-y}. This is like the `paste' part of cut and
+paste. Like I said -- E-Z.
+
+You can use @kbd{C-k} and @kbd{C-y} on groups as well as on topics. So
+you can move topics around as well as groups.
+
+@end table
+
+After setting up the topics the way you like them, you might wish to
+hide a topic, or to show it again. That's why we have the following
+key.
+
+@table @kbd
+
+@item RET
+@kindex RET (Topic)
+@findex gnus-topic-select-group
+@itemx SPACE
+Either select a group or fold a topic (@code{gnus-topic-select-group}).
+When you perform this command on a group, you'll enter the group, as
+usual. When done on a topic line, the topic will be folded (if it was
+visible) or unfolded (if it was folded already). So it's basically a
+toggling command on topics. In addition, if you give a numerical
+prefix, group on that level (and lower) will be displayed.
+
+@end table
+
+Now for a list of other commands, in no particular order.
+
+@table @kbd
+
@item T m
@kindex T m (Topic)
@findex gnus-topic-move-group
Remove the process mark from all groups in the current topic
(@code{gnus-topic-unmark-topic}).
-@item T TAB
-@itemx TAB
-@kindex T TAB (Topic)
-@kindex TAB (Topic)
-@findex gnus-topic-indent
-``Indent'' the current topic so that it becomes a sub-topic of the
-previous topic (@code{gnus-topic-indent}). If given a prefix,
-``un-indent'' the topic instead.
-
-@item M-TAB
-@kindex M-TAB (Topic)
-@findex gnus-topic-unindent
-``Un-indent'' the current topic so that it becomes a sub-topic of the
-parent of its current parent (@code{gnus-topic-unindent}).
-
-@item RET
-@kindex RET (Topic)
-@findex gnus-topic-select-group
-@itemx SPACE
-Either select a group or fold a topic (@code{gnus-topic-select-group}).
-When you perform this command on a group, you'll enter the group, as
-usual. When done on a topic line, the topic will be folded (if it was
-visible) or unfolded (if it was folded already). So it's basically a
-toggling command on topics. In addition, if you give a numerical
-prefix, group on that level (and lower) will be displayed.
-
@item C-c C-x
@kindex C-c C-x (Topic)
@findex gnus-topic-expire-articles
expiry process (if any)
(@code{gnus-topic-expire-articles}). (@pxref{Expiring Mail}).
-@item C-k
-@kindex C-k (Topic)
-@findex gnus-topic-kill-group
-Kill a group or topic (@code{gnus-topic-kill-group}). All groups in the
-topic will be removed along with the topic.
-
-@item C-y
-@kindex C-y (Topic)
-@findex gnus-topic-yank-group
-Yank the previously killed group or topic
-(@code{gnus-topic-yank-group}). Note that all topics will be yanked
-before all groups.
-
@item T r
@kindex T r (Topic)
@findex gnus-topic-rename
@end table
+@node Topic Variables
+@subsection Topic Variables
+@cindex topic variables
+
+The previous section told you how to tell Gnus which topics to display.
+This section explains how to tell Gnus what to display about each topic.
+
+@vindex gnus-topic-line-format
+The topic lines themselves are created according to the
+@code{gnus-topic-line-format} variable (@pxref{Formatting Variables}).
+Valid elements are:
+
+@table @samp
+@item i
+Indentation.
+@item n
+Topic name.
+@item v
+Visibility.
+@item l
+Level.
+@item g
+Number of groups in the topic.
+@item a
+Number of unread articles in the topic.
+@item A
+Number of unread articles in the topic and all its subtopics.
+@end table
+
+@vindex gnus-topic-indent-level
+Each sub-topic (and the groups in the sub-topics) will be indented with
+@code{gnus-topic-indent-level} times the topic level number of spaces.
+The default is 2.
+
+@vindex gnus-topic-mode-hook
+@code{gnus-topic-mode-hook} is called in topic minor mode buffers.
+
+@vindex gnus-topic-display-empty-topics
+The @code{gnus-topic-display-empty-topics} says whether to display even
+topics that have no unread articles in them. The default is @code{t}.
+
+
@node Topic Sorting
@subsection Topic Sorting
@cindex topic sorting
@vindex gnus-unbuttonized-mime-types
This is a list of regexps. @sc{mime} types that match a regexp from
this list won't have @sc{mime} buttons inserted unless they aren't
-displayed. The default value is @code{(".*/.*")}.
+displayed or this variable is overriden by
+@code{gnus-buttonized-mime-types}. The default value is
+@code{(".*/.*")}.
+
+@item gnus-buttonized-mime-types
+@vindex gnus-buttonized-mime-types
+This is a list of regexps. @sc{mime} types that match a regexp from
+this list will have @sc{mime} buttons inserted unless they aren't
+displayed. This variable overrides
+@code{gnus-unbuttonized-mime-types}. The default value is @code{nil}.
+
+To see e.g. security buttons but no other buttons, you could set this
+variable to @code{("multipart/signed")} and leave
+@code{gnus-unbuttonized-mime-types} to the default value.
@item gnus-article-mime-part-function
@vindex gnus-article-mime-part-function