Gnus: Как сохранить * все * вложения одновременно? - PullRequest
5 голосов
/ 03 декабря 2011

Я хочу сохранить все вложения в электронное письмо одновременно. Поэтому я установил gnus-summary-save-parts-default-mime в ". * /.*". Однако при использовании «X m» я получаю не только все вложения, но и файл с именем «nnimap+my.name@googlemail.com/INBOX.2393.1» (со ссылкой на аккаунт, с которого я читаю электронные письма), который содержит подпись письма, которое я получил. Как я могу исключить файлы этого «типа» из сохранения на «X m»? Другими словами: как я могу указать правильное регулярное выражение для gnus-summary-save-parts-default-mime, чтобы этот файл тоже не сохранялся?

1 Ответ

1 голос
/ 07 декабря 2011

Это defadvice будет делать то, что вы хотите на данный момент, исключая любые части, которые не имеют имен файлов (в данном случае это верно для самой статьи):

(defadvice gnus-summary-save-parts-1 (around gnus-summary-save-parts-exclude-self activate)
  (let ((handle (ad-get-arg 2)))
    (unless (and (not (stringp (car handle)))
                 (not (mm-handle-filename handle)))
      ad-do-it)))

Я использую Gnus v5.13; если вы также используете ту же или аналогичную версию, дайте мне знать, подходит ли вам эта измененная версия gnus-summary-save-parts-1; вы хотите установить gnus-summary-save-parts-exclude-article на t. Если это работает для вас, я отправлю патч для него в проекты Gnus.

Обратите внимание, либо используйте приведенный выше defadvice ИЛИ , используйте приведенный ниже код, но не используйте оба вместе. Defadvice - это простое быстрое решение, которое вы можете использовать на данный момент. Приведенный ниже код я отправлю как патч для проекта Gnus, и я включил его сюда только для того, чтобы вы могли проверить, работает ли он в вашей системе, если вы также используете Gnus v5.13. Если они примут этот патч и сделают его частью будущего выпуска, тогда вам не понадобится defadvice выше; Вместо этого вы сможете настроить переменную gnus-summary-save-parts-exclude-article.

(require 'gnus)
(require 'gnus-sum)

(defcustom gnus-summary-save-parts-exclude-article nil
  "If non-nil don't save article along with attachments."
  :group 'gnus-article-mime
  :type 'boolean)

(defun gnus-summary-save-parts-1 (type dir handle reverse)
  (if (stringp (car handle))
      (mapcar (lambda (h) (gnus-summary-save-parts-1 type dir h reverse))
          (cdr handle))
    (when (if reverse
          (not (string-match type (mm-handle-media-type handle)))
        (string-match type (mm-handle-media-type handle)))
      (let* ((name (or
                    (mm-handle-filename handle)
                    (unless gnus-summary-save-parts-exclude-article
                      (format "%s.%d.%d" gnus-newsgroup-name
                              (cdr gnus-article-current)
                              gnus-summary-save-parts-counter))))
             (file (when name
                     (expand-file-name
                      (gnus-map-function
                       mm-file-name-rewrite-functions
                       (file-name-nondirectory
                        name))
                      dir))))
        (when file
          (incf gnus-summary-save-parts-counter)
          (unless (file-exists-p file)
            (mm-save-part-to-file handle file)))))))
...