如何生成动态“回复​​:”基于“消息ID:”? [+细节](How to generate dy

2019-08-17 10:33发布

你如何生成一个动态“回复”(和“From:”)报头中的emacs /角马基于创建的消息的消息ID? 我想用外部(perl的)脚本生成动态+detail基于零件“传递消息-ID:”首标。

user+detail@example.net

我已成功地创造与我的外部脚本生成的内容的标题。 该脚本将获取新闻组的名称作为命令行参数。 我想通过它的值邮件ID了。

我当前的代码
〜/的.emacs:

'(gnus-posting-styles ("^pl\\.test$" ("Reply-To" message-make-reply-to)))

〜/ .gnus

(defun message-make-reply-to()
  (my-script ".../reply-to.pl" (message-fetch-field "Message-Id")))

(defun my-script(path &optional param) ....

问题是:脚本没有收到消息ID作为其参数(我的剧本被正确地明确设置参数)

Answer 1:

;; Make sure the Message-ID header is present in newly created messages
(setq message-generate-headers-first '(Message-ID))

;; Prevent emacs from resetting the Message-ID before the message is sent.
(setq message-deletable-headers
      (remove 'Message-ID message-deletable-headers))

(setq gnus-posting-styles
      '(("^pl\\.test$"
         ("Reply-To" '(message-make-reply-to)))))

注意周围的额外的报价和括号message-make-reply-to 。 对此的解释是,该功能在不同的时间运行,取决于它是否给了作为一个符号或为带引号的S-表达。

  • 如果为给定的符号,当一个lambda功能被添加到它运行message-setup-hook 。 这种情况发生在一message-mode-hook ,即创建并切换到右后新的缓冲区message-mode 。 造成这种情况的原因是一些野生创建lambda函数的引用中值/ unquoting。
  • 如果作为引用sexpr给定,评价被延迟,直到之后的缓冲器填充有初始值。 这是接近它的消息建立运行最后一个代码。

另一种解决方案(无gnus-posting-styles

另外,在新的头应该被添加到每一个新的消息的情况下, Reply-To头也可以使用所设定的message-header-setup-hook 。 自定义钩需要定义添加的报头为每个新的信息。

(defun reply-to-message-header-setup-hook ()
  (let* ((msg-id (message-fetch-field "Message-ID"))
         (reply-to (my-script ".../reply-to-pl" msg-id)))
    (message-add-header (concat "Reply-To: " reply-to))))

;; Call the hook every time a new message is created
(add-hook 'message-header-setup-hook 'reply-to-message-header-setup-hook)

;; Make sure the Message-ID header is present in newly created messages
(setq message-generate-headers-first '(Message-ID))


文章来源: How to generate dynamic “Reply-To:” based on “Message-ID:”? [+detail]