+2001-12-01 15:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * gnus-sum.el (gnus-summary-save-article): Nix
+ gnus-display-mime-function and gnus-article-prepare-hook.
+
+ * gnus-spec.el (gnus-parse-complex-format): Properly handle %C at
+ the beginning of lines.
+ (gnus-complex-form-to-spec): Ditto.
+
+2001-12-01 08:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * message.el (message-make-mft): Fix the m-s-a-file regexp.
+ From Paul Jarc <prj@po.cwru.edu>.
+
+2001-11-30 21:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * message.el: New variable message-subscribed-address-file;
+ use it in message-make-mft. From Paul Jarc <prj@po.cwru.edu>.
+
+2001-11-30 12:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * message.el (message-tab-body-function): Set to nil.
+ (message-tab): Use text-mode-map or global-map.
+ Suggested by Kai Gro\e,A_\e(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>.
+
2001-11-30 Simon Josefsson <jas@extundo.com>
* gnus-agent.el (gnus-agent-fetch-headers): Use gnus-range-add
(gnus-parse-simple-format format spec-alist insert))))
(defun gnus-parse-complex-format (format spec-alist)
- (save-excursion
- (gnus-set-work-buffer)
- (insert format)
- (goto-char (point-min))
- (while (re-search-forward "\"" nil t)
- (replace-match "\\\"" nil t))
- (goto-char (point-min))
- (insert "(\"")
- ;; Convert all font specs into font spec lists.
- (while (re-search-forward "%\\([0-9]+\\)?\\([«»{}()]\\)" nil t)
- (let ((number (if (match-beginning 1)
- (match-string 1) "0"))
- (delim (aref (match-string 2) 0)))
- (if (or (= delim ?\()
- (= delim ?\{)
- (= delim ?\«))
- (replace-match (concat "\"("
- (cond ((= delim ?\() "mouse")
- ((= delim ?\{) "face")
- (t "balloon"))
- " " number " \"")
- t t)
- (replace-match "\")\""))))
- (goto-char (point-max))
- (insert "\")")
- ;; Convert point position commands.
- (goto-char (point-min))
- (let ((case-fold-search nil))
- (while (re-search-forward "%\\([-0-9]+\\)?C" nil t)
- (replace-match "\"(point)\"" t t)))
- ;; Convert TAB commands.
- (goto-char (point-min))
- (while (re-search-forward "%\\([-0-9]+\\)=" nil t)
- (replace-match (format "\"(tab %s)\"" (match-string 1)) t t))
- ;; Convert the buffer into the spec.
- (goto-char (point-min))
- (let ((form (read (current-buffer))))
- ;; If the first element is '(point), we just remove it.
- (when (equal (car form) '(point))
- (pop form))
- (cons 'progn (gnus-complex-form-to-spec form spec-alist)))))
+ (let (found-C)
+ (save-excursion
+ (gnus-set-work-buffer)
+ (insert format)
+ (goto-char (point-min))
+ (while (re-search-forward "\"" nil t)
+ (replace-match "\\\"" nil t))
+ (goto-char (point-min))
+ (insert "(\"")
+ ;; Convert all font specs into font spec lists.
+ (while (re-search-forward "%\\([0-9]+\\)?\\([«»{}()]\\)" nil t)
+ (let ((number (if (match-beginning 1)
+ (match-string 1) "0"))
+ (delim (aref (match-string 2) 0)))
+ (if (or (= delim ?\()
+ (= delim ?\{)
+ (= delim ?\«))
+ (replace-match (concat "\"("
+ (cond ((= delim ?\() "mouse")
+ ((= delim ?\{) "face")
+ (t "balloon"))
+ " " number " \"")
+ t t)
+ (replace-match "\")\""))))
+ (goto-char (point-max))
+ (insert "\")")
+ ;; Convert point position commands.
+ (goto-char (point-min))
+ (let ((case-fold-search nil))
+ (while (re-search-forward "%\\([-0-9]+\\)?C" nil t)
+ (replace-match "\"(point)\"" t t)
+ (setq found-C t)))
+ ;; Convert TAB commands.
+ (goto-char (point-min))
+ (while (re-search-forward "%\\([-0-9]+\\)=" nil t)
+ (replace-match (format "\"(tab %s)\"" (match-string 1)) t t))
+ ;; Convert the buffer into the spec.
+ (goto-char (point-min))
+ (let ((form (read (current-buffer))))
+ (if found-C
+ `(let (gnus-position)
+ ,@(gnus-complex-form-to-spec form spec-alist)
+ (if gnus-position
+ (gnus-put-text-property gnus-position (1+ gnus-position)
+ 'gnus-position t)))
+ `(progn
+ ,@(gnus-complex-form-to-spec form spec-alist)))))))
(defun gnus-complex-form-to-spec (form spec-alist)
(delq nil
((stringp sform)
(gnus-parse-simple-format sform spec-alist t))
((eq (car sform) 'point)
- `(gnus-put-text-property (1- (point)) (point) 'gnus-position t))
+ '(setq gnus-position (point)))
((eq (car sform) 'tab)
(gnus-spec-tab (cadr sform)))
(t
(gnus-message 1 "Article %d is unsaveable" article))
;; This is a real article.
(save-window-excursion
- (gnus-summary-select-article t nil nil article))
+ (let ((gnus-display-mime-function nil)
+ (gnus-article-prepare-hook nil))
+ (gnus-summary-select-article t nil nil article)))
(save-excursion
(set-buffer save-buffer)
(erase-buffer)
:group 'message-interface
:type '(repeat sexp))
+(defcustom message-subscribed-address-file nil
+ "*A file containing addresses the user is subscribed to.
+If nil, do not look at any files to determine list subscriptions. If
+non-nil, each line of this file should be a mailing list address."
+ :group 'message-interface
+ :type 'string)
+
(defcustom message-subscribed-addresses nil
"*Specifies a list of addresses the user is subscribed to.
If nil, do not use any predefined list subscriptions. This list of
;; Generate the Mail-Followup-To header if the header is not there...
(if (and (or message-subscribed-regexps
message-subscribed-addresses
+ message-subscribed-address-file
message-subscribed-address-functions)
(not (mail-fetch-field "mail-followup-to")))
(setq headers
(recipients
(mapcar 'mail-strip-quoted-names
(message-tokenize-header msg-recipients)))
+ (file-regexps
+ (if message-subscribed-address-file
+ (let (begin end item re)
+ (save-excursion
+ (with-temp-buffer
+ (insert-file-contents message-subscribed-address-file)
+ (while (not (eobp))
+ (setq begin (point))
+ (forward-line 1)
+ (setq end (point))
+ (if (bolp) (setq end (1- end)))
+ (setq item (regexp-quote (buffer-substring begin end)))
+ (if re (setq re (concat re "\\|" item))
+ (setq re (concat "\\`\\(" item))))
+ (and re (list (concat re "\\)\\'"))))))))
(mft-regexps (apply 'append message-subscribed-regexps
(mapcar 'regexp-quote
message-subscribed-addresses)
+ file-regexps
(mapcar 'funcall
message-subscribed-address-functions))))
(save-match-data
:group 'message
:type '(alist :key-type regexp :value-type function))
-(defcustom message-tab-body-function 'indent-relative
- "*Function to execute when `message-tab' (TAB) is executed in the body."
+(defcustom message-tab-body-function nil
+ "*Function to execute when `message-tab' (TAB) is executed in the body.
+If nil, the function bound in `text-mode-map' or `global-map' is executed."
:group 'message
:type 'function)
(let ((mail-abbrev-mode-regexp (caar alist)))
(not (mail-abbrev-in-expansion-header-p))))
(setq alist (cdr alist)))
- (funcall (or (cdar alist) message-tab-body-function))))
+ (funcall (or (cdar alist) message-tab-body-function
+ (lookup-key text-mode-map "\t")
+ (lookup-key global-map "\t")
+ 'indent-relative))))
(defun message-expand-group ()
"Expand the group name under point."
+2001-12-01 Simon Josefsson <jas@extundo.com>
+
+ * gnus.texi (Group Line Specification, Summary Buffer Lines):
+ Cross reference Positioning Point.
+
2001-11-25 09:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
* gnus.texi (Limiting): Addition.
@samp{%M%S%5y: %(%g%)\n} \e$B$H$$$&CM$G>e5-$N9T$r@8@.$7$^$9!#\e(B
\e$B%3%m%s$O!"$3$N9T$NCf$KI,$:L5$/$F$O$$$1$^$;$s!#%+!<%=%k$O!"2?$+$NA`:n$r$7\e(B
-\e$B$?8e$O>o$K%3%m%s$N$H$3$m$K0\F0$9$k$+$i$G$9!#B>$K$O2?$bI,MW$G$O$"$j$^$;\e(B
-\e$B$s!=!=%0%k!<%WL>$5$($b$G$9!#I=<($5$l$F$$$kJ8;z$OA4$F$?$@$N2hLL$N>~$j$G$"\e(B
-\e$B$j!"\e(Bgnus \e$B$,$=$l$rD4$Y$k$3$H$O$"$j$^$;$s!#\e(BGnus \e$B$OI,MW$H$9$kA4$F$N<B>pJs$r!"\e(B
-\e$B%F%-%9%HB0@-$r;H$C$F21$($F$$$^$9!#\e(B
+\e$B$?8e$O>o$K%3%m%s$N$H$3$m$K0\F0$9$k$+$i$G$9!#\e(B@xref{Positioning Point}\e$B!#B>\e(B
+\e$B$K$O2?$bI,MW$G$O$"$j$^$;$s!=!=%0%k!<%WL>$5$($b$G$9!#I=<($5$l$F$$$kJ8;z$O\e(B
+\e$BA4$F$?$@$N2hLL$N>~$j$G$"$j!"\e(Bgnus \e$B$,$=$l$rD4$Y$k$3$H$O$"$j$^$;$s!#\e(BGnus \e$B$O\e(B
+\e$BI,MW$H$9$kA4$F$N<B>pJs$r!"%F%-%9%HB0@-$r;H$C$F21$($F$$$^$9!#\e(B
(\e$B$b$77/$,!"$9$4$/%X%s$J!"AG@2$i$7$$!"I=7W;;Iw$N%l%$%"%&%H$r:n$C$?$H$7$?\e(B
\e$B$i!"$_$s$J!"7/$O2q7W$N;E;v$,K;$7$/$C$F!"%K%e!<%9$rFI$s$G;~4V$rL5BL;H$$$7\e(B
\e$BA`:n$7$?8e$K!"%+!<%=%k$O$$$D$b%3%m%s$+%]%$%s%H0LCV$N%^!<%+!<$N>l=j$K0\F0\e(B
\e$B$7$^$9!#\e(B(\e$B$b$A$m$s!"$3$NF0:n$rJQ$($k$3$H$,$G$-$J$$$H$7$?$i\e(B Gnus \e$B$K$O$"$k\e(B
\e$B$^$8$-$3$H$G$9!#4X?t\e(B @code{gnus-goto-colon} \e$B$r!"$"$J$?$,9%$-$J%+!<%=%k$N\e(B
-\e$BF0$-$K$J$k$h$&$K!"?7$?$K=q$1$PNI$$$N$G$9!#\e(B)
+\e$BF0$-$K$J$k$h$&$K!"?7$?$K=q$1$PNI$$$N$G$9!#\e(B) @xref{Positioning Point}\e$B!#\e(B
\e$B=i4|CM$NJ8;zNs$O\e(B @samp{%U%R%z%I%(%[%4L: %-23,23n%]%) %s\n} \e$B$G$9!#\e(B
@samp{%M%S%5y: %(%g%)\n} is the value that produced those lines above.
There should always be a colon on the line; the cursor always moves to
-the colon after performing an operation. Nothing else is required---not
-even the group name. All displayed text is just window dressing, and is
-never examined by gnus. Gnus stores all real information it needs using
-text properties.
+the colon after performing an operation. @xref{Positioning
+Point}. Nothing else is required---not even the group name. All
+displayed text is just window dressing, and is never examined by Gnus.
+Gnus stores all real information it needs using text properties.
(Note that if you make a really strange, wonderful, spreadsheet-like
layout, everybody will believe you are hard at work with the accounting
performing an operation. (Of course, Gnus wouldn't be Gnus if it wasn't
possible to change this. Just write a new function
@code{gnus-goto-colon} which does whatever you like with the cursor.)
+@xref{Positioning Point}.
The default string is @samp{%U%R%z%I%(%[%4L: %-23,23n%]%) %s\n}.