Gnus development mailing list
 help / color / mirror / Atom feed
From: Jan Rychter <jan@rychter.com>
Subject: [PATCH] add option to posting styles
Date: Thu, 19 Jun 2003 13:41:50 -0700	[thread overview]
Message-ID: <m2smq5er5d.fsf@tnuctip.rychter.com> (raw)


[-- Attachment #1.1: Type: text/plain, Size: 571 bytes --]

The following patch adds another option to posting styles, which allows
one to add custom functions to mesage-setup-hook. The existing 'eval'
functionality was not enough, because some functions expect the other
headers (and mail-header-separator) to already be there when they get
called, mml-secure-message-sign-pgpmime is an example.

Thanks to this I can now define

(setq gnus-posting-styles
      '((".*icm\\.misc"
	 (call mml-secure-message-sign-pgpmime))))

... and have all messages in the groups maching the regexp automatically
signed.

--J.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: gnus-call.diff --]
[-- Type: text/x-patch, Size: 3388 bytes --]

--- texi/gnus.texi.original	2003-06-19 13:27:45.000000000 -0700
+++ texi/gnus.texi	2003-06-19 13:35:05.000000000 -0700
@@ -11701,12 +11701,20 @@
 attribute name can be one of @code{signature}, @code{signature-file},
 @code{x-face-file}, @code{address} (overriding
 @code{user-mail-address}), @code{name} (overriding
-@code{(user-full-name)}) or @code{body}.  The attribute name can also
-be a string or a symbol.  In that case, this will be used as a header
-name, and the value will be inserted in the headers of the article; if
-the value is @code{nil}, the header name will be removed.  If the
-attribute name is @code{eval}, the form is evaluated, and the result
-is thrown away.
+@code{(user-full-name)}), @code{eval}, @code{call} or @code{body}.  The
+attribute name can also be a string or a symbol.  In that case, this
+will be used as a header name, and the value will be inserted in the
+headers of the article; if the value is @code{nil}, the header name will
+be removed.  If the attribute name is @code{eval}, the form is
+evaluated, and the result is thrown away. If the attribute name is
+@code{call}, the function supplied as @var{value} is called with no
+arguments as part of the message setup process. The difference between
+@code{eval} and @code{call} is that functions supplied as @code{eval}
+are called immediately, while those supplied by @code{call} are called
+as part of the @code{message-setup-hook}, after essential headers have
+been set up. This is important if the function being called expects
+things like @var{mail-header-separator} to be present in the message
+when it gets called.
 
 The attribute value can be a string (used verbatim), a function with
 zero arguments (the return value will be used), a variable (its value
@@ -11756,7 +11764,9 @@
                  (set-buffer gnus-article-buffer)
                  (message-fetch-field "to"))))
         ("^nn.+:"
-         (signature-file "~/.mail-signature"))))
+         (signature-file "~/.mail-signature"))
+        ("^comp\\.security.*"
+         (call mml-secure-message-sign-pgpmime))))
 @end lisp
 
 The @samp{nnml:.*} rule means that you use the @code{To} address as the
--- lisp/gnus-msg.el.original	2003-06-19 12:40:37.000000000 -0700
+++ lisp/gnus-msg.el	2003-06-19 12:57:35.000000000 -0700
@@ -1880,18 +1880,20 @@
 		   (t
 		    (car attribute))))
 	    ;; We get the value.
-	    (setq v
-		  (cond
-		   ((stringp value)
-		    value)
-		   ((or (symbolp value)
-			(functionp value))
-		    (cond ((functionp value)
-			   (funcall value))
-			  ((boundp value)
-			   (symbol-value value))))
-		   ((listp value)
-		    (eval value))))
+	    (if (eq element 'call)
+		(setq v value)
+		(setq v
+		      (cond
+			((stringp value)
+			 value)
+			((or (symbolp value)
+			     (functionp value))
+			 (cond ((functionp value)
+				(funcall value))
+			       ((boundp value)
+				(symbol-value value))))
+			((listp value)
+			 (eval value)))))
 	    ;; Translate obsolescent value.
 	    (cond
 	     ((eq element 'signature-file)
@@ -1937,6 +1939,8 @@
 			   (let ((message-signature ,(cdr result)))
 			     (when message-signature
 			       (message-insert-signature)))))))
+		   ((eq 'call (car result))
+		    (cdr result))
 		   (t
 		    (let ((header
 			   (if (symbolp (car result))

[-- Attachment #2: Type: application/pgp-signature, Size: 188 bytes --]

             reply	other threads:[~2003-06-19 20:41 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-06-19 20:41 Jan Rychter [this message]
2003-06-19 20:59 ` Jan Rychter
2003-06-20  7:19   ` Kai Großjohann
2003-06-20  8:05     ` Jan Rychter
2003-06-20 14:45       ` Kai Großjohann
2003-06-23 23:44       ` Lars Magne Ingebrigtsen
2003-06-27 13:17         ` Jan Rychter
2003-10-17 23:38           ` Lars Magne Ingebrigtsen
2003-06-23  8:29     ` Jan Rychter
2003-06-23 20:04       ` Kai Großjohann
2003-06-24  2:42         ` Jan Rychter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m2smq5er5d.fsf@tnuctip.rychter.com \
    --to=jan@rychter.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).