From: yamaoka Date: Mon, 10 Sep 2001 00:58:40 +0000 (+0000) Subject: Sync with Oort Gnus (Translating gnus-ja.texi has not been done yet). X-Git-Tag: semi-gnus~31 X-Git-Url: http://git.chise.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8d5b94488b8fe507a83eb5475ecaa54afb8a98b8;p=elisp%2Fgnus.git- Sync with Oort Gnus (Translating gnus-ja.texi has not been done yet). --- diff --git a/ChangeLog b/ChangeLog index dea75a1..dbef953 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2001-09-10 Katsumi Yamaoka + + * 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 * lisp/nnir.el (nnir-run-namazu): Fix a side effect when handling diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 6ae1de5..4074cfe 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,63 @@ +2001-09-09 Simon Josefsson + + * 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 + + * 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 + + * 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 + From Daniel Pittman + + * gnus-spec.el (gnus-correct-pad-form): New function. + (gnus-parse-simple-format): Use it. + +2001-09-07 Simon Josefsson + + * gnus-group.el (gnus-group-sort-groups): Unmark all groups. + (gnus-group-sort-selected-groups): Ditto. Suggested by Harry + Putnam . + (gnus-group-sort-selected-groups): Touch dribble file. + 2001-09-07 Raja R Harinath * nnml.el (nnml-filenames-are-evil): New variable. diff --git a/lisp/gnus-agent.el b/lisp/gnus-agent.el index 1e6340a..fa97cce 100644 --- a/lisp/gnus-agent.el +++ b/lisp/gnus-agent.el @@ -445,8 +445,7 @@ be a select method." 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))) @@ -481,14 +480,14 @@ be a select method." (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))))) @@ -578,7 +577,7 @@ be a select method." (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) @@ -591,7 +590,7 @@ be a select method." (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)) diff --git a/lisp/gnus-art.el b/lisp/gnus-art.el index 79aaaae..2abe7a6 100644 --- a/lisp/gnus-art.el +++ b/lisp/gnus-art.el @@ -709,7 +709,17 @@ displayed by the first non-nil matching CONTENT face." :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)) @@ -4313,11 +4323,16 @@ If no internal viewer is available, use an external viewer." (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." diff --git a/lisp/gnus-group.el b/lisp/gnus-group.el index 90b47eb..27784e8 100644 --- a/lisp/gnus-group.el +++ b/lisp/gnus-group.el @@ -2635,6 +2635,7 @@ If REVERSE (the prefix), reverse the sorting order." (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)) @@ -2701,7 +2702,9 @@ If REVERSE, sort in reverse order." (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) diff --git a/lisp/gnus-spec.el b/lisp/gnus-spec.el index 0171a91..a4cb769 100644 --- a/lisp/gnus-spec.el +++ b/lisp/gnus-spec.el @@ -280,13 +280,6 @@ (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)) @@ -411,6 +404,22 @@ by `gnus-xmas-redefine'." (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 @@ -488,8 +497,7 @@ by `gnus-xmas-redefine'." ;; 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) @@ -576,11 +584,14 @@ by `gnus-xmas-redefine'." (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))) @@ -594,8 +605,8 @@ by `gnus-xmas-redefine'." (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)))) diff --git a/lisp/gnus-srvr.el b/lisp/gnus-srvr.el index bc9df3d..029d6aa 100644 --- a/lisp/gnus-srvr.el +++ b/lisp/gnus-srvr.el @@ -34,10 +34,17 @@ (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. @@ -48,16 +55,19 @@ The following specs are understood: %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. diff --git a/lisp/gnus-xmas.el b/lisp/gnus-xmas.el index f691cb7..70acff9 100644 --- a/lisp/gnus-xmas.el +++ b/lisp/gnus-xmas.el @@ -541,29 +541,7 @@ the resulting string may be narrower than END-COLUMN. (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. diff --git a/lisp/mm-decode.el b/lisp/mm-decode.el index d300c6e..d370da8 100644 --- a/lisp/mm-decode.el +++ b/lisp/mm-decode.el @@ -151,6 +151,7 @@ (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) @@ -226,7 +227,9 @@ when selecting a different article." (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) diff --git a/lisp/nnfolder.el b/lisp/nnfolder.el index 3f31789..979dfab 100644 --- a/lisp/nnfolder.el +++ b/lisp/nnfolder.el @@ -163,6 +163,8 @@ This variable is a virtual server slot. See the Gnus manual for details.") (defvoo nnfolder-marks-file-suffix ".mrk") +(defvar nnfolder-marks-modtime (gnus-make-hashtable)) + ;;; Interface functions @@ -426,7 +428,7 @@ This variable is a virtual server slot. See the Gnus manual for details.") (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..." @@ -1170,7 +1172,7 @@ This command does not work if you use short group names." (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'. @@ -1197,14 +1199,25 @@ This command does not work if you use short group names." (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)))))) @@ -1214,6 +1227,9 @@ This command does not work if you use short group names." (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 diff --git a/lisp/nnml.el b/lisp/nnml.el index a292c6b..710c882 100644 --- a/lisp/nnml.el +++ b/lisp/nnml.el @@ -128,8 +128,9 @@ This variable is a virtual server slot. See the Gnus manual for details.") (defvoo nnml-marks nil) - +(defvar nnml-marks-modtime (gnus-make-hashtable)) + ;;; Interface functions. (nnoo-define-basics nnml) @@ -951,7 +952,7 @@ Use the nov database for the current group if available." (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'. @@ -973,6 +974,14 @@ Use the nov database for the current group if available." (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 @@ -983,7 +992,10 @@ Use the nov database for the current group if available." (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)))))) @@ -995,6 +1007,9 @@ Use the nov database for the current group if available." (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 diff --git a/texi/ChangeLog b/texi/ChangeLog index e0519b3..d9be9a8 100644 --- a/texi/ChangeLog +++ b/texi/ChangeLog @@ -1,3 +1,15 @@ +2001-09-08 Simon Josefsson + + * gnus.texi (MIME Commands): Add gnus-buttonized-mime-types. + +2001-09-08 Kai Gro,A_(Bjohann + + * 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,A_(Bjohann * gnus.texi (Fancy Mail Splitting): Mention `delete' near the diff --git a/texi/gnus.texi b/texi/gnus.texi index bb72261..7317ad9 100644 --- a/texi/gnus.texi +++ b/texi/gnus.texi @@ -1593,6 +1593,26 @@ default is @samp{Tuxedomoon.Jingle4.au}. @chapter Group Buffer @cindex group buffer +@c Alex Schroeder suggests to rearrange this as follows: +@c +@c 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 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 First, "Gnus considers groups... (default 9)." +@c New, a table summarizing what levels 1 to 9 mean. +@c Third, "Gnus treats subscribed ... reasons of efficiency" +@c 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. @@ -3331,69 +3351,28 @@ To get this @emph{fab} functionality you simply turn on (ooh!) the 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 @@ -3402,6 +3381,16 @@ When the topic minor mode is turned on, a new @kbd{T} submap will be 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 @@ -3410,6 +3399,77 @@ definitions slightly. 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 @@ -3485,32 +3545,6 @@ Mark all groups in the current topic with the process mark 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 @@ -3518,19 +3552,6 @@ Run all expirable articles in the current group or topic through the 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 @@ -3559,6 +3580,48 @@ Edit the topic parameters (@code{gnus-topic-edit-parameters}). @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 @@ -8251,7 +8314,20 @@ To have all Vcards be ignored, you'd say something like this: @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