我想一次将所有附件保存到电子邮件中。因此,我将gnus-summary-save-parts-default-mime设置为“。*/.*”。但是,使用“X m”时,我不仅会得到所有附件,还会得到一个名为“[email protected]/INBOX.2393.1”的文件(指的是我正在从中读取电子邮件的帐户),其中包含我收到的电子邮件的签名。如何排除这种“类型”的文件保存在“X m”上?换句话说:如何为gnus-summary-save-parts-default-mime指定正确的正则表达式,以防止也保存此文件?
最佳答案
此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)))))))