))
(setq alist (cdr alist)))
))))
- (when charset
- (save-excursion
- (set-buffer gnus-summary-buffer)
+ (if charset
+ (progn
+ (save-excursion
+ (set-buffer gnus-summary-buffer)
+ (make-local-variable 'default-mime-charset)
+ (setq default-mime-charset charset))
(make-local-variable 'default-mime-charset)
- (setq default-mime-charset charset)
- )
- (make-local-variable 'default-mime-charset)
- (setq default-mime-charset charset)
- ))))
+ (setq default-mime-charset charset))
+ (kill-local-variable 'default-mime-charset)))))
;;; @ end
(1+ max)))))
(message-sort-headers-1))))
+(defconst message-subject-guess-encoded-re-regexp
+ (concat
+ "^[ \t]*"
+ (regexp-quote "=?")
+ mime-charset-regexp ; from semi/mime-def.el
+ (regexp-quote "?")
+ "\\("
+ "[Bb]" (regexp-quote "?")
+ "\\(\\(CQk\\|CSA\\|IAk\\|ICA\\)[Jg]\\)*" ; \([ \t][ \t][ \t]\)*
+ "\\("
+ "[Uc][km]U6" ; [Rr][Ee]:
+ "\\|"
+ "\\(C[VX]\\|I[FH]\\)J[Fl]O[g-v]" ; [ \t][Rr][Ee]:
+ "\\|"
+ "\\(CQl\\|CSB\\|IAl\\|ICB\\)[Sy][RZ]T[o-r]" ; [ \t][ \t][Rr][Ee]:
+ "\\)"
+ "\\|"
+ "[Qb]" (regexp-quote "?")
+ "\\(_\\|=09\\|=20\\)*"
+ "\\([Rr]\\|=[57]2\\)\\([Ee]\\|=[46]5\\)\\(:\\|=3[Aa]\\)"
+ "\\)"
+ ))
+
+(defcustom message-followup-subject nil
+ "*If non-nil and this regexp matches subject,
+use identical subject.
+
+If the value is symbol, use its symbol-value."
+ :group 'message-various
+ :type '(choice (const :tag "Prepend Re: unless already has" nil)
+ (const :tag "Never prepend Re:" "")
+ (const :tag "Guess encoded Re:"
+ message-subject-guess-encoded-re-regexp)))
+
+(defvar message-subject-prefix-regexp "^[ \t]*[Rr][Ee]:[ \t]*"
+ "regexp that matches (maybe buggy) Re:")
+
+(defun message-make-subject (subject)
+ (let ((message-followup-subject (if (symbolp message-followup-subject)
+ (symbol-value message-followup-subject)
+ message-followup-subject)))
+ (cond
+ ;; If unremovable buggy Re: is found, do not prepend additional Re:.
+ ((and message-followup-subject
+ (string-match message-followup-subject subject))
+ subject)
+ ;; Remove any (buggy) Re:'s that are present and make a
+ ;; proper one.
+ ((string-match message-subject-prefix-regexp subject)
+ (concat "Re: " (substring subject (match-end 0))))
+ (t
+ (concat "Re: " subject)))))
+
\f
;;;
reply-to (unless ignore-reply-to (message-fetch-field "reply-to"))
references (message-fetch-field "references")
message-id (message-fetch-field "message-id" t))
- ;; Remove any (buggy) Re:'s that are present and make a
- ;; proper one.
- (when (string-match "^[ \t]*[Rr][Ee]:[ \t]*" subject)
- (setq subject (substring subject (match-end 0))))
- (setq subject (concat "Re: " subject))
+ (setq subject (message-make-subject subject))
(when (and (setq gnus-warning (message-fetch-field "gnus-warning"))
(string-match "<[^>]+>" gnus-warning))
(let ((case-fold-search t))
(string-match "world" distribution)))
(setq distribution nil))
- ;; Remove any (buggy) Re:'s that are present and make a
- ;; proper one.
- (when (string-match "^[ \t]*[Rr][Ee]:[ \t]*" subject)
- (setq subject (substring subject (match-end 0))))
- (setq subject (concat "Re: " subject))
+ (setq subject (message-make-subject subject))
(widen))
(message-pop-to-buffer (message-buffer-name "followup" from newsgroups))