Gnus: Как сохранить *все* вложения одновременно?

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


person Marius Hofert    schedule 02.12.2011    source источник


Ответы (1)


Этот 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)))))))
person aculich    schedule 07.12.2011
comment
Большое спасибо, это решило это! Я также использую Gnus 5.13 и помещаю первую часть и часть gnus-summary-save-parts-exclude-article t (с t вместо nil) в свой .gnus.el; это то, что вы намеревались? по крайней мере, это решило это! Большое спасибо - person Marius Hofert; 09.12.2011
comment
Я отредактировал свой ответ выше, чтобы уточнить, что вы должны использовать. Пока что используйте только часть defadvice в качестве краткосрочного обходного пути, пока они не примут мой патч и не выпустят новую версию. - person aculich; 09.12.2011
comment
Привет, что меня смутило, так это часть, которую вы хотите установить с gnus-summary-save-parts-exclude-article на t. Этой переменной (gnus-summary-save-parts-exclude-article) не существовало (я не мог найти ее C-h v), поэтому я вставил и defcustom gnus-summary-save-parts-exclude-article часть (но только эти четыре строки, а не всю вторую часть). Я только что понял, что это действительно работает только с частью defadvice. Большое спасибо. - person Marius Hofert; 10.12.2011
comment
Здорово! Так этот патч полностью отвечает на ваш вопрос? Если это так, я отправлю свой патч, и если/когда он будет принят, я добавлю здесь комментарий, чтобы вы знали, что нужно удалить дефадвице, когда они выпустят следующую версию Gnus, к которой применен патч. - person aculich; 11.12.2011