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