From: yamaoka Date: Thu, 18 Oct 2001 23:31:55 +0000 (+0000) Subject: Synch with Oort Gnus. X-Git-Tag: t-gnus-6_15_4-08-quimby-last-~41 X-Git-Url: http://git.chise.org/gitweb/?a=commitdiff_plain;h=02c7ef82df8b0097086b5dda1bd453405de4d5d5;p=elisp%2Fgnus.git- Synch with Oort Gnus. --- diff --git a/GNUS-NEWS b/GNUS-NEWS index bfb5e60..9aca31f 100644 --- a/GNUS-NEWS +++ b/GNUS-NEWS @@ -8,6 +8,15 @@ For older news, see Gnus info node "New Features". * Changes in Oort Gnus +** Extended format specs. + +Format spec "%&user-date;" is added into +gnus-summary-line-format-alist. Also, user defined extended format +specs are supported. The extended format specs look like "%u&foo;", +which invokes function gnus-user-format-function-foo. Because "&" is +used as the escape character, old user defined format "%u&" is no +longer supported. + ** `/ *' (gnus-summary-limit-include-cached) is rewritten. It was aliased to `Y c' (gnus-summary-insert-cached-articles). The new diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 10acb92..e58570e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,7 +1,55 @@ +2001-10-18 Simon Josefsson + + * gnus-sum.el (gnus-group-make-articles-read): Call g-r-set-mark + when undoing. + +2001-10-18 Simon Josefsson + From Frank Schmitt + + * gnus-sum.el (gnus-summary-limit-to-display-predicate): Fix typo. + (gnus-summary-make-menu-bar): Ditto. + +2001-10-17 Simon Josefsson + + * nnimap.el (nnimap-expiry-target): Make sure it is back to the + server. Suggested by ShengHuo ZHU . + +2001-10-17 17:00:00 ShengHuo ZHU + + * gnus-sum.el (gnus-summary-line-format-alist): user-date entry. + * gnus-util.el (gnus-user-date): New function. + From Frank Schmitt . + +2001-10-17 Per Abrahamsen + + * message.el (message-check-news-header-syntax): Special case + nnvirtual groups. + + * gnus-sum.el (gnus-summary-respool-default-method): Changed + customize type to `symbol'. + +2001-10-17 12:00:00 ShengHuo ZHU + + * gnus-spec.el (gnus-parse-simple-format): Support extended spec + %&foo;. + (gnus-parse-simple-format): Support user extended spec too. + %u&foo; invokes gnus-user-format-function-foo. + +2001-10-17 11:00:00 ShengHuo ZHU + + * nnml.el (nnml-request-expire-articles): Make sure it is back to + the server. + * nnmbox.el (nnmbox-request-expire-articles): Ditto. + * nnfolder.el (nnfolder-request-expire-articles): Ditto. + * nnbabyl.el (nnbabyl-request-expire-articles): Ditto. + * nndiary.el (nndiary-request-expire-articles): Ditto. + (nndiary-schedule): Defsubst it before use it. + (nndiary-error): eval-and-compile. + 2001-10-17 Per Abrahamsen * gnus-msg.el (gnus-post-method): Changed two instances of - 'active' to 'current' and one 'null' to 'not'. + `active' to `current' and one `null' to `not'. 2001-10-16 Kai Gro,A_(Bjohann From Katsumi Yamaoka . diff --git a/lisp/gnus-spec.el b/lisp/gnus-spec.el index 966cf60..bbab0bc 100644 --- a/lisp/gnus-spec.el +++ b/lisp/gnus-spec.el @@ -308,7 +308,7 @@ (wseek 0) (seek 0) (length (length string)) - (string (concat string "\0"))) + (string (concat string "\0"))) ;; Find the start position. (while (and (< seek length) (< wseek start)) @@ -480,7 +480,7 @@ characters when given a pad value." (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) + tilde-form tilde elem-type extended-spec) (save-excursion (gnus-set-work-buffer) (insert format) @@ -492,7 +492,8 @@ characters when given a pad value." max-width nil cut-width nil ignore-value nil - tilde-form nil) + tilde-form nil + extended-spec nil) (setq spec-beg (1- (point))) ;; Parse this spec fully. @@ -533,10 +534,18 @@ characters when given a pad value." t) (t nil))) - ;; User-defined spec -- find the spec name. - (when (eq (setq spec (char-after)) ?u) + (cond + ;; User-defined spec -- find the spec name. + ((eq (setq spec (char-after)) ?u) (forward-char 1) - (setq user-defined (char-after))) + (when (and (eq (setq user-defined (char-after)) ?&) + (looking-at "&\\([^;]+\\);")) + (setq user-defined (match-string 1)) + (goto-char (match-end 1)))) + ;; extended spec + ((and (eq spec ?&) (looking-at "&\\([^;]+\\);")) + (setq extended-spec (intern (match-string 1))) + (goto-char (match-end 1)))) (forward-char 1) (delete-region spec-beg (point)) @@ -554,12 +563,15 @@ characters when given a pad value." (user-defined (setq elem (list - (list (intern (format "gnus-user-format-function-%c" - user-defined)) + (list (intern (format + (if (stringp user-defined) + "gnus-user-format-function-%s" + "gnus-user-format-function-%c") + user-defined)) 'gnus-tmp-header) ?s))) ;; Find the specification from `spec-alist'. - ((setq elem (cdr (assq spec spec-alist)))) + ((setq elem (cdr (assq (or extended-spec spec) spec-alist)))) (t (setq elem '("*" ?s)))) (setq elem-type (cadr elem)) @@ -596,7 +608,7 @@ characters when given a pad value." (setq result (cond - ;; Emptyness. + ;; Emptiness. ((string= fstring "") nil) ;; Not a format string. diff --git a/lisp/gnus-sum.el b/lisp/gnus-sum.el index 82613a0..e8ad47d 100644 --- a/lisp/gnus-sum.el +++ b/lisp/gnus-sum.el @@ -1130,7 +1130,9 @@ that were fetched. Say, for nnultimate groups." ?c) (?u gnus-tmp-user-defined ?s) (?P (gnus-pick-line-number) ?d) - (?B gnus-tmp-thread-tree-header-string ?s)) + (?B gnus-tmp-thread-tree-header-string ?s) + (user-date (gnus-user-date + ,(macroexpand '(mail-header-date gnus-tmp-header))) ?s)) "An alist of format specifications that can appear in summary lines. These are paired with what variables they correspond with, along with the type of the variable (string, integer, character, etc).") @@ -2078,7 +2080,7 @@ increase the score of each group you read." ["Age..." gnus-summary-limit-to-age t] ["Extra..." gnus-summary-limit-to-extra t] ["Score" gnus-summary-limit-to-score t] - ["Score" gnus-summary-limit-to-display-predicate t] + ["Display Predicate" gnus-summary-limit-to-display-predicate t] ["Unread" gnus-summary-limit-to-unread t] ["Non-dormant" gnus-summary-limit-exclude-dormant t] ["Articles" gnus-summary-limit-to-articles t] @@ -5156,6 +5158,7 @@ The resulting hash table is returned, or nil if no Xrefs were found." (gnus-info-set-marks ',info ',(gnus-info-marks info) t) (gnus-info-set-read ',info ',(gnus-info-read info)) (gnus-get-unread-articles-in-group ',info (gnus-active ,group)) + (gnus-request-set-mark group (list (list ',range 'del '(read)))) (gnus-group-update-group ,group t)))) ;; Add the read articles to the range. (gnus-info-set-read info range) @@ -6926,7 +6929,7 @@ articles that are younger than AGE days." "Limit the summary buffer to the predicated in the `display' group parameter." (interactive) (unless gnus-newsgroup-display - (error "There is no `diplay' group parameter")) + (error "There is no `display' group parameter")) (let (articles) (dolist (number gnus-newsgroup-articles) (when (funcall gnus-newsgroup-display) @@ -8357,10 +8360,9 @@ re-spool using this method." (gnus-summary-move-article n nil nil 'crosspost)) (defcustom gnus-summary-respool-default-method nil - "Default method for respooling an article. + "Default method type for respooling an article. If nil, use to the current newsgroup method." - :type '(choice (gnus-select-method :value (nnml "")) - (const nil)) + :type 'symbol :group 'gnus-summary-mail) (defun gnus-summary-respool-article (&optional n method) diff --git a/lisp/gnus-util.el b/lisp/gnus-util.el index fdf0c08..f22a062 100644 --- a/lisp/gnus-util.el +++ b/lisp/gnus-util.el @@ -325,6 +325,70 @@ (yes-or-no-p prompt) (message ""))) +;; By Frank Schmitt . Allows to have +;; age-depending date representations. (e.g. just the time if it's +;; from today, the day of the week if it's within the last 7 days and +;; the full date if it's older) +(defun gnus-seconds-today () + "Returns the number of seconds passed today" + (let ((now (decode-time (current-time)))) + (+ (car now) (* (car (cdr now)) 60) (* (car (nthcdr 2 now)) 3600)))) + +(defun gnus-seconds-month () + "Returns the number of seconds passed this month" + (let ((now (decode-time (current-time)))) + (+ (car now) (* (car (cdr now)) 60) (* (car (nthcdr 2 now)) 3600) + (* (- (car (nthcdr 3 now)) 1) 3600 24)))) + +(defun gnus-seconds-year () + "Returns the number of seconds passed this year" + (let ((now (decode-time (current-time))) + (days (format-time-string "%j" (current-time)))) + (+ (car now) (* (car (cdr now)) 60) (* (car (nthcdr 2 now)) 3600) + (* (- (string-to-number days) 1) 3600 24)))) + +(defvar gnus-user-date-format-alist + '(((gnus-seconds-today) . "%k:%M") + (604800 . "%a %k:%M") ;;that's one week + ((gnus-seconds-month) . "%a %d") + ((gnus-seconds-year) . "%b %d") + (t . "%b %m '%y")) ;;this one is used when no other does match + "Alist of time in seconds and format specification used to display dates not older. +The first element must be a number or a function returning a +number. The second element is a format-specification as described in +the documentation for format-time-string. The list must be ordered +smallest number up. When there is an element, which is not a number, +the corresponding format-specification will be used, disregarding any +following elements. You can use the functions gnus-seconds-today, +gnus-seconds-month, gnus-seconds-year which will return the number of +seconds which passed today/this month/this year.") + +(defun gnus-user-date (messy-date) + "Format the messy-date acording to gnus-user-date-format-alist. +Returns \" ? \" if there's bad input or if an other error occurs. +Input should look like this: \"Sun, 14 Oct 2001 13:34:39 +0200\"." + (condition-case () + (let* ((messy-date (safe-date-to-time messy-date)) + (now (current-time)) + ;;If we don't find something suitable we'll use this one + (my-format "%b %m '%y") + (high (lsh (- (car now) (car messy-date)) 16))) + (if (and (> high -1) (= (logand high 65535) 0)) + ;;overflow and bad input + (let* ((difference (+ high (- (car (cdr now)) + (car (cdr messy-date))))) + (templist gnus-user-date-format-alist) + (top (eval (caar templist)))) + (while (if (numberp top) (< top difference) (not top)) + (progn + (setq templist (cdr templist)) + (setq top (eval (caar templist))))) + (if (stringp (cdr (car templist))) + (setq my-format (cdr (car templist)))))) + (format-time-string (eval my-format) messy-date)) + (error " ? "))) +;;end of Frank's code + (defun gnus-dd-mmm (messy-date) "Return a string like DD-MMM from a big messy string." (condition-case () diff --git a/lisp/message.el b/lisp/message.el index d6f446c..8522623 100644 --- a/lisp/message.el +++ b/lisp/message.el @@ -3495,12 +3495,23 @@ This sub function is for exclusive use of `message-send-news'." (if followup-to (concat newsgroups "," followup-to) newsgroups))) - (method (if (message-functionp message-post-method) - (funcall message-post-method) - message-post-method)) + (post-method (if (message-functionp message-post-method) + (funcall message-post-method) + message-post-method)) + ;; KLUDGE to handle nnvirtual groups. Doing this right + ;; would probably involve a new nnoo function. + ;; -- Per Abrahamsen , 2001-10-17. + (method (if (and (consp post-method) + (eq (car post-method) 'nnvirtual) + gnus-message-group-art) + (let ((group (car (nnvirtual-find-group-art + (car gnus-message-group-art) + (cdr gnus-message-group-art))))) + (gnus-find-method-for-group group)) + post-method)) (known-groups (mapcar (lambda (n) - (gnus-group-name-decode + (gnus-group-name-decode (gnus-group-real-name n) (gnus-group-name-charset method n))) (gnus-groups-from-server method))) diff --git a/lisp/nnbabyl.el b/lisp/nnbabyl.el index 6e4f883..e8add07 100644 --- a/lisp/nnbabyl.el +++ b/lisp/nnbabyl.el @@ -297,7 +297,8 @@ This variable is a virtual server slot. See the Gnus manual for details.") (current-buffer)) (let ((nnml-current-directory nil)) (nnmail-expiry-target-group - nnmail-expiry-target newsgroup)))) + nnmail-expiry-target newsgroup))) + (nnbabyl-possibly-change-newsgroup newsgroup server)) (nnheader-message 5 "Deleting article %d in %s..." (car articles) newsgroup) (nnbabyl-delete-mail)) diff --git a/lisp/nndiary.el b/lisp/nndiary.el index 309365e..4616805 100644 --- a/lisp/nndiary.el +++ b/lisp/nndiary.el @@ -211,11 +211,12 @@ ;; Compatibility Functions ================================================= -(if (fboundp 'signal-error) +(eval-and-compile + (if (fboundp 'signal-error) + (defun nndiary-error (&rest args) + (apply #'signal-error 'nndiary args)) (defun nndiary-error (&rest args) - (apply #'signal-error 'nndiary args)) - (defun nndiary-error (&rest args) - (apply #'error args))) + (apply #'error args)))) ;; Backend behavior customization =========================================== @@ -371,7 +372,6 @@ all. This may very well take some time.") (interactive) (message "NNDiary version %s" nndiary-version)) - (defvoo nndiary-nov-file-name ".overview") (defvoo nndiary-current-directory nil) @@ -479,6 +479,19 @@ all. This may very well take some time.") ;; the (relative) number of seconds ahead GMT. ) +(defsubst nndiary-schedule () + (let (head) + (condition-case arg + (mapcar + (lambda (elt) + (setq head (nth 0 elt)) + (nndiary-parse-schedule (nth 0 elt) (nth 1 elt) (nth 2 elt))) + nndiary-headers) + (t + (nnheader-report 'nndiary "X-Diary-%s header parse error: %s." + head (cdr arg)) + nil)) + )) ;;; Interface functions ===================================================== @@ -691,7 +704,8 @@ all. This may very well take some time.") (with-temp-buffer (nndiary-request-article number group server (current-buffer)) (let ((nndiary-current-directory nil)) - (nnmail-expiry-target-group nnmail-expiry-target group)))) + (nnmail-expiry-target-group nnmail-expiry-target group))) + (nndiary-possibly-change-directory group server)) (nnheader-message 5 "Deleting article %s in %s" number group) (condition-case () (funcall nnmail-delete-file-function article) @@ -1337,20 +1351,6 @@ all. This may very well take some time.") (nndiary-parse-schedule-value (match-string 1) min-or-values max)) )) -(defsubst nndiary-schedule () - (let (head) - (condition-case arg - (mapcar - (lambda (elt) - (setq head (nth 0 elt)) - (nndiary-parse-schedule (nth 0 elt) (nth 1 elt) (nth 2 elt))) - nndiary-headers) - (t - (nnheader-report 'nndiary "X-Diary-%s header parse error: %s." - head (cdr arg)) - nil)) - )) - (defun nndiary-max (spec) ;; Returns the max of specification SPEC, or nil for permanent schedules. (unless (null spec) diff --git a/lisp/nnfolder.el b/lisp/nnfolder.el index 28b0f4f..7f5d10d 100644 --- a/lisp/nnfolder.el +++ b/lisp/nnfolder.el @@ -431,7 +431,8 @@ This variable is a virtual server slot. See the Gnus manual for details.") newsgroup server (current-buffer)) (let ((nnfolder-current-directory nil)) (nnmail-expiry-target-group - nnmail-expiry-target newsgroup)))) + nnmail-expiry-target newsgroup))) + (nnfolder-possibly-change-group newsgroup server)) (nnheader-message 5 "Deleting article %d in %s..." (car maybe-expirable) newsgroup) (nnfolder-delete-mail) @@ -1229,7 +1230,7 @@ This command does not work if you use short group names." (if (file-exists-p file) (condition-case err (with-temp-buffer - (gnus-sethash file (nth 5 (file-attributes file)) + (gnus-sethash file (nth 5 (file-attributes file)) nnfolder-marks-modtime) (nnheader-insert-file-contents file) (setq nnfolder-marks (read (current-buffer))) diff --git a/lisp/nnimap.el b/lisp/nnimap.el index b1d9167..ae1d5e7 100644 --- a/lisp/nnimap.el +++ b/lisp/nnimap.el @@ -866,7 +866,7 @@ function is generally only called when Gnus is shutting down." (or (member "\\NoSelect" (imap-mailbox-get 'list-flags group nnimap-server-buffer)) (let ((info (nnimap-find-minmax-uid group 'examine))) - (when (> (or (imap-mailbox-get 'recent group + (when (> (or (imap-mailbox-get 'recent group nnimap-server-buffer) 0) 0) (push (list (cons group 0)) nnmail-split-history)) @@ -1154,7 +1154,10 @@ function is generally only called when Gnus is shutting down." (let ((nnimap-current-move-article art) (nnimap-current-move-group group) (nnimap-current-move-server server)) - (nnmail-expiry-target-group nnmail-expiry-target group)))))) + (nnmail-expiry-target-group nnmail-expiry-target group)))) + ;; It is not clear if `nnmail-expiry-target' somehow cause the + ;; current group to be changed or not, so we make sure here. + (nnimap-possibly-change-group group server))) ;; Notice that we don't actually delete anything, we just mark them deleted. (deffoo nnimap-request-expire-articles (articles group &optional server force) diff --git a/lisp/nnmbox.el b/lisp/nnmbox.el index d20ae3d..a20777f 100644 --- a/lisp/nnmbox.el +++ b/lisp/nnmbox.el @@ -284,7 +284,8 @@ This variable is a virtual server slot. See the Gnus manual for details.") (current-buffer)) (let ((nnml-current-directory nil)) (nnmail-expiry-target-group - nnmail-expiry-target newsgroup)))) + nnmail-expiry-target newsgroup))) + (nnmbox-possibly-change-newsgroup newsgroup server)) (nnheader-message 5 "Deleting article %d in %s..." (car articles) newsgroup) (nnmbox-delete-mail)) diff --git a/lisp/nnml.el b/lisp/nnml.el index 5cae12c..3740e16 100644 --- a/lisp/nnml.el +++ b/lisp/nnml.el @@ -90,8 +90,8 @@ marks file will be regenerated properly by Gnus. This variable is a virtual server slot. See the Gnus manual for details.") (defvoo nnml-filenames-are-evil t - "If non-nil, Gnus will not assume that the articles file name -is the same as the article number listed in the nov database. This + "If non-nil, Gnus will not assume that the articles file name +is the same as the article number listed in the nov database. This variable should be set if any of the files are compressed. This variable is a virtual server slot. See the Gnus manual for details.") @@ -339,7 +339,9 @@ This variable is a virtual server slot. See the Gnus manual for details.") (let (nnml-current-directory nnml-current-group nnml-article-file-alist) - (nnmail-expiry-target-group nnmail-expiry-target group)))) + (nnmail-expiry-target-group nnmail-expiry-target group))) + ;; Maybe directory is changed during nnmail-expiry-target-group. + (nnml-possibly-change-directory group server)) (nnheader-message 5 "Deleting article %s in %s" number group) (condition-case () @@ -914,7 +916,7 @@ Use the nov database for that directory if available." (defun nnml-current-group-article-to-file-alist () "Return an alist of article/file pairs in the current group. Use the nov database for the current group if available." - (if (or gnus-nov-is-evil + (if (or gnus-nov-is-evil nnml-nov-is-evil nnml-filenames-are-evil (not (file-exists-p diff --git a/texi/ChangeLog b/texi/ChangeLog index 8e8c8db..ee2e88d 100644 --- a/texi/ChangeLog +++ b/texi/ChangeLog @@ -1,3 +1,16 @@ +2001-10-17 21:00:00 ShengHuo ZHU + + * gnus.texi (Archived Messages): Add new line after @item. + From: Jesper Harder + +2001-10-17 21:00:00 ShengHuo ZHU + + * gnus.texi (Formatting Basics): Extended format specs. + +2001-10-17 Per Abrahamsen + + * gnus.texi (Summary Buffer Lines): Documment %( and %). + 2001-09-04 21:43:05 Lars Magne Ingebrigtsen * gnus.texi (Topic Sorting): Addition. diff --git a/texi/gnus-ja.texi b/texi/gnus-ja.texi index 2035399..15961c1 100644 --- a/texi/gnus-ja.texi +++ b/texi/gnus-ja.texi @@ -4226,7 +4226,7 @@ Gnus $B$OJQ?t(B @code{gnus-extract-address-components} $B$NCM$r(B @code{From $B=i4|CM$NJ8;zNs$O(B @samp{%U%R%z%I%(%[%4L: %-23,23n%]%) %s\n} $B$G$9!#(B -$B0J2<$NMM<0;X<(J8;z$r;H$&$3$H$,$G$-$^$9(B: +$B0J2<$NMM<0;X<(J8;z$H3HD%MM<0;X<($r;H$&$3$H$,$G$-$^$9(B: @table @samp @item N @@ -4314,6 +4314,9 @@ Gnus $B$OJQ?t(B @code{gnus-extract-address-components} $B$NCM$r(B @code{From $B9T?t!#(B @item O $B%@%&%s%m!<%I$N0u!#(B +@item &user-date; +$B7P2a;~4V$NMM<0!#$$$m$$$m$JMM<0$,(B @code{gnus-user-date-format-alist} $B$GDj(B +$B5A$5$l$F$$$^$9!#(B @item u $BMxMQuBV(B), @samp{%R} ($BJVEz:Q$_(B), @samp{%z} (zcore) $B$N07$$$K$O5$$r(B $BIU$1$kI,MW$,$"$j$^$9!#8zN($N$?$a$K!"(Bgnus $B$O$3$l$i$NJ8;z$,$I$N7e$K8=$l$k(B $B$+$r7W;;$7!"!X%O!<%I!&%3!<%I!Y$7$^$9!#$3$l$O!"2DJQD9$N;EMM$N8e$G$O!"$3$l(B @@ -9784,7 +9791,8 @@ Gnus $B$O30$X=P$F9T$/A4$F$N%a%C%;!<%8$K!"0l$D$+$=$l0J>e$N$=$N%5!<%P!<$N%0(B $B$3$NJQ?t$O$KA*BrJ}K!$r4^$a$k$3$H$,$G$-$^$9$,!"$=$&$9$k$H$=$N%a%C(B @@ -9797,11 +9805,14 @@ Gnus $B$O30$X=P$F9T$/A4$F$N%a%C%;!<%8$K!"0l$D$+$=$l0J>e$N$=$N%5!<%P!<$N%0(B $B$"$J$?$,(B @code{"nnml:foo"} $B$H$$$&CM$r;H$&$H!"(B@samp{nnml:foo} $B$KJ]B8$5$l(B $B$^$9!#(B @samp{nnml:foo}. -@item $BJ8;zNs$N%j%9%H(B +@item +$BJ8;zNs$N%j%9%H(B $B%a%C%;!<%8$O$=$l$i$NA4$F$N%0%k!<%W$KJ]B8$5$l$^$9!#(B -@item $B@55,I=8=!"4X?t!"MM<0$NO"A[%j%9%H(B +@item +$B@55,I=8=!"4X?t!"MM<0$NO"A[%j%9%H(B $B%-!<$,!X9gCW!Y$9$k$H!"7k2L$,;H$o$l$^$9!#(B -@item @code{nil} +@item +@code{nil} $B%a%C%;!<%8$NJ]B8$O9T$o$l$^$;$s!#$3$l$,%G%#%U%)%k%H$G$9!#(B @end itemize @@ -17784,6 +17795,9 @@ Gnus $B$O$"$J$?<+?H$N=qK!;EMM;XDj$r:n$k/$J$$D9$5$K$J$i$J$$$H$$$&;v$G$9!#(B +gnus $B$O(B @samp{%&user-date;} $B$N$h$&$J!"$$$/$D$+$N3HD%MM<0;X<($b%5%]!<%H$7(B +$B$^$9!#(B + @node Mode Line Formatting @subsection $B%b!<%I9T=qK!;EMM(B @@ -17876,6 +17890,9 @@ Emacs $B$,(B @samp{%b} $B$r~(B $B;R(B (@pxref{Advanced Formatting}) $B$r;H$C$F$[$H$s$IF1$8;v$rC#@.$9$k;v$,$G(B $B$-$^$9!#Nc$G$9(B: @samp{%~(form (count-lines (point-min) (point)))@@}$B!#(B diff --git a/texi/gnus.texi b/texi/gnus.texi index 0c3ae50..aac3b0c 100644 --- a/texi/gnus.texi +++ b/texi/gnus.texi @@ -4178,7 +4178,8 @@ possible to change this. Just write a new function The default string is @samp{%U%R%z%I%(%[%4L: %-23,23n%]%) %s\n}. -The following format specification characters are understood: +The following format specification characters and extended format +specification(s) are understood: @table @samp @item N @@ -4268,6 +4269,9 @@ article has any children. The line number. @item O Download mark. +@item &user-date; +Age sensitive date format. Various date format is defined in +@code{gnus-user-date-format-alist}. @item u User defined specifier. The next character in the format string should be a letter. Gnus will call the function @@ -4277,6 +4281,10 @@ argument. The function should return a string, which will be inserted into the summary just like information from any other summary specifier. @end table +Text between @samp{%(} and @samp{%)} will be highlighted with +@code{gnus-mouse-face} when the mouse point is placed inside the area. +There can only be one such area. + The @samp{%U} (status), @samp{%R} (replied) and @samp{%z} (zcore) specs have to be handled with care. For reasons of efficiency, gnus will compute what column these characters will end up in, and ``hard-code'' @@ -10295,7 +10303,8 @@ determined by the @code{gnus-message-archive-group} variable. This variable can be used to do the following: @itemize @bullet -@item a string +@item +a string Messages will be saved in that group. Note that you can include a select method in the group name, then the @@ -10307,11 +10316,14 @@ has the default value shown above. Then setting messages are stored in @samp{nnfolder+archive:foo}, but if you use the value @code{"nnml:foo"}, then outgoing messages will be stored in @samp{nnml:foo}. -@item a list of strings +@item +a list of strings Messages will be saved in all those groups. -@item an alist of regexps, functions and forms +@item +an alist of regexps, functions and forms When a key ``matches'', the result is used. -@item @code{nil} +@item +@code{nil} No message archiving will take place. This is the default. @end itemize @@ -18173,6 +18185,8 @@ particularly wide values. For that you can say @samp{%4,6y}, which means that the field will never be more than 6 characters wide and never less than 4 characters wide. +Also Gnus supports some extended format specifications, such as +@samp{%&user-date;}. @node Mode Line Formatting @subsection Mode Line Formatting @@ -18275,6 +18289,9 @@ be inserted into the buffer just like information from any other specifier. This function may also be called with dummy values, so it should protect against that. +Also Gnus supports extended user-defined specs, such as @samp{%u&foo;}. +Gnus will call the function @code{gnus-user-format-function-}@samp{foo}. + You can also use tilde modifiers (@pxref{Advanced Formatting} to achieve much the same without defining new functions. Here's an example: @samp{%~(form (count-lines (point-min) (point)))@@}. The form