Как создать динамический "Reply-To:" на основе "Message-ID:"? [+ Подробнее]

Как вы можете создать динамический заголовок "Reply-To:" (и "From:" ) в emacs/gnus на основе Message-ID созданного сообщения? Я хотел бы использовать внешний (perl) script для создания динамической части +detail на основе заголовка "Messaged-ID:".

[email protected]

Мне удалось создать заголовок с контентом, созданным внешним script. script получает имя группы 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) ....

Проблема: script не получает идентификатор сообщения в качестве своего параметра (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))