Как создать динамический "Reply-To:" на основе "Message-ID:"? [+ Подробнее]
Как вы можете сгенерировать динамический заголовок "Reply-To:" (и "From:") в emacs/gnus на основе Message-ID созданного сообщения? Я хотел бы использовать внешний (Perl) скрипт для генерации динамического +detail
часть, основанная на заголовке "Messaged-ID:".
user+detail@example.net
Мне удалось создать заголовок с контентом, сгенерированным моим внешним скриптом. Сценарий получает имя группы usenet в качестве параметра командной строки. Я также хотел бы передать ему значение идентификатора сообщения.
Мой текущий код
~ /.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) ....
Проблема: скрипт не получает идентификатор сообщения в качестве своего параметра (my-script получает правильно заданный параметр)
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-выражение в кавычках.
- Если задано как символ, оно запускается при добавлении лямбда-функции в
message-setup-hook
, Это происходит вmessage-mode-hook
т.е. сразу после того, как новый буфер создан и переключен вmessage-mode
, Причиной этого является дикое цитирование / отмена цитирования значений при создании лямбда-функции. - Если задано в качестве цитируемого 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))