Teach gnus/message about international Re: variants
* lisp/mail/mail-utils.el (mail-re-regexps): New defcustom, contains the components used to construct 'rmail-re-abbrevs' and 'message-subject-re-regexp'. * lisp/gnus/message.el (message-subject-re-regexp): Derive from 'mail-re-regexps'. (message-strip-subject-re): Make the match case-insensitive. * lisp/mail/rmail.el (rmail-re-abbrevs): Derive from 'mail-re-regexps'. Update 'rmail-reply-regexp' when it changes. (rmail-reply-regexp): Set to nil, 'rmail-re-abbrevs' will set it. * doc/emacs/rmail.texi (Rmail Reply): Describe 'mail-re-regexps'. * doc/misc/message.texi (Message Headers): Describe 'mail-re-regexps'. (Bug#72442)
This commit is contained in:
parent
2f8c2e64e0
commit
315519fa7c
6 changed files with 111 additions and 19 deletions
|
@ -776,6 +776,14 @@ to. The @samp{To} field starts out as the address of the person who
|
|||
sent the message you received, and the @samp{CC} field starts out with
|
||||
all the other recipients of that message.
|
||||
|
||||
@vindex rmail-re-abbrevs
|
||||
@vindex rmail-reply-prefix
|
||||
@vindex mail-re-regexps
|
||||
The @samp{Subject} header field may contain one or more instances of
|
||||
@samp{Re:} or localized variants thereof. These are removed if they
|
||||
match @code{rmail-re-abbrevs} (which is initialized from
|
||||
@code{mail-re-regexps}), and @code{rmail-reply-prefix} is prepended.
|
||||
|
||||
@vindex mail-dont-reply-to-names
|
||||
You can exclude certain recipients from being included automatically
|
||||
in replies, using the variable @code{mail-dont-reply-to-names}. Its
|
||||
|
|
|
@ -1688,13 +1688,14 @@ result is inserted.
|
|||
|
||||
@item message-subject-re-regexp
|
||||
@vindex message-subject-re-regexp
|
||||
@vindex mail-re-regexps
|
||||
@cindex Aw
|
||||
@cindex Sv
|
||||
@cindex Re
|
||||
Responses to messages have subjects that start with @samp{Re: }. This
|
||||
is @emph{not} an abbreviation of the English word ``response'', but it
|
||||
comes from the Latin ``res'', and means ``in the matter of''. Some
|
||||
illiterate nincompoops have failed to grasp this fact, and have
|
||||
standards-challenged companies have failed to grasp this fact, and have
|
||||
``internationalized'' their software to use abominations like
|
||||
@samp{Aw: } (``antwort'') or @samp{Sv: } (``svar'') instead, which is
|
||||
meaningless and evil. However, you may have to deal with users that
|
||||
|
@ -1726,6 +1727,16 @@ responding to a message:
|
|||
))
|
||||
@end lisp
|
||||
|
||||
You shouldn't need to do this, since the default value of
|
||||
@code{message-subject-re-regexp} is initialized based on
|
||||
@code{mail-re-regexps}, which covers most known cases of such
|
||||
internationalization, and is a lot easier to customize. Customizing
|
||||
@code{mail-re-regexps} updates @code{message-subject-re-regexp} to
|
||||
match.
|
||||
|
||||
Note that the regexp is matched case-insensitively against the
|
||||
@samp{Subject} header contents.
|
||||
|
||||
@item message-subject-trailing-was-query
|
||||
@vindex message-subject-trailing-was-query
|
||||
@vindex message-subject-trailing-was-ask-regexp
|
||||
|
|
26
etc/NEWS
26
etc/NEWS
|
@ -660,6 +660,32 @@ only search in input history. If you customize it to the symbol 'dwim',
|
|||
those commands search in input history only when the point is after the
|
||||
last prompt.
|
||||
|
||||
+++
|
||||
** Mail-util
|
||||
|
||||
*** New user option 'mail-re-regexps'.
|
||||
This contains the list of regular expressions used to match "Re:" and
|
||||
international variants of it when modifying the Subject field in
|
||||
replies.
|
||||
|
||||
+++
|
||||
** Rmail
|
||||
|
||||
*** 'rmail-re-abbrevs' default value is now derived from 'mail-re-regexps'.
|
||||
'mail-re-regexps' is a new user option that is easier to customize than
|
||||
'rmail-re-abbrevs'. 'rmail-re-abbrevs' is still honored if it was
|
||||
already set.
|
||||
|
||||
+++
|
||||
** Message
|
||||
|
||||
*** 'message-subject-re-regexp' default value is now derived from 'mail-re-regexps'.
|
||||
'mail-re-regexps' is a new user option that is easier to customize than
|
||||
'message-subject-re-regexp'. 'message-subject-re-regexp' is still
|
||||
honored if it was already set.
|
||||
|
||||
*** 'message-strip-subject-re' now matches case-insensitively.
|
||||
|
||||
** SHR
|
||||
|
||||
+++
|
||||
|
|
|
@ -312,11 +312,20 @@ any confusion."
|
|||
regexp))
|
||||
|
||||
(defcustom message-subject-re-regexp
|
||||
"^[ \t]*\\([Rr][Ee]\\(\\[[0-9]*\\]\\)* ?:[ \t]*\\)*[ \t]*"
|
||||
"Regexp matching \"Re: \" in the subject line."
|
||||
(mail--wrap-re-regexp
|
||||
(concat
|
||||
"\\("
|
||||
(string-join mail-re-regexps "\\|")
|
||||
"\\)"))
|
||||
"Regexp matching \"Re: \" in the subject line.
|
||||
Matching is done case-insensitively.
|
||||
Initialized from the value of `mail-re-regexps', which is easier to
|
||||
customize."
|
||||
:group 'message-various
|
||||
:link '(custom-manual "(message)Message Headers")
|
||||
:type 'regexp)
|
||||
:type 'regexp
|
||||
:set-after '(mail-re-regexps)
|
||||
:version "31.1")
|
||||
|
||||
(defcustom message-screenshot-command '("import" "png:-")
|
||||
"Command to take a screenshot.
|
||||
|
@ -2264,10 +2273,12 @@ see `message-narrow-to-headers-or-head'."
|
|||
subject)))
|
||||
|
||||
(defun message-strip-subject-re (subject)
|
||||
"Remove \"Re:\" from subject lines in string SUBJECT."
|
||||
(if (string-match message-subject-re-regexp subject)
|
||||
(substring subject (match-end 0))
|
||||
subject))
|
||||
"Remove \"Re:\" from subject lines in string SUBJECT.
|
||||
This uses `mail-re-regexps', matching is done case-insensitively."
|
||||
(let ((case-fold-search t))
|
||||
(if (string-match message-subject-re-regexp subject)
|
||||
(substring subject (match-end 0))
|
||||
subject)))
|
||||
|
||||
(defcustom message-replacement-char "."
|
||||
"Replacement character used instead of unprintable or not decodable chars."
|
||||
|
|
|
@ -46,6 +46,37 @@ also the To field, unless this would leave an empty To field."
|
|||
:type '(choice regexp (const :tag "Your Name" nil))
|
||||
:group 'mail)
|
||||
|
||||
(defun mail--wrap-re-regexp (re)
|
||||
(concat "\\`[ \t]*"
|
||||
"\\("
|
||||
re
|
||||
; Re(1) or Re[1] or Re^1
|
||||
"\\(([0-9]+)\\|\\[[0-9]+\\]\\|\\^[0-9]+\\)?"
|
||||
; SPC/NBSP followed by colon and TAB/SPC
|
||||
" ?\u00a0*[::][ \t]*"
|
||||
; Handle repetition, eg "Re[1]: Re[2]:"
|
||||
"\\)*"
|
||||
"[ \t]*"))
|
||||
|
||||
;;;###autoload
|
||||
(defcustom mail-re-regexps
|
||||
'("RE" "R\u00c9\\.?" "FWD?" "رد" "回复" "回覆" "SV" "Antw\\.?"
|
||||
"VS" "REF" "AW" "ΑΠ" "ΣΧΕΤ" "השב" "Vá" "R" "RIF" "BLS" "RES"
|
||||
"Odp" "YNT" "ATB")
|
||||
"List of localized \"Re:\" abbreviations in various languages.
|
||||
Each component can be a regular expression or a simple string. Matching
|
||||
is done case-insensitively. Used to initialize the legacy
|
||||
`rmail-re-abbrevs' and `message-subject-re-regexp' user options."
|
||||
:type '(repeat regexp)
|
||||
:set (lambda (sym val)
|
||||
(custom-set-default sym val)
|
||||
(dolist (sym '(rmail-re-abbrevs
|
||||
message-subject-re-regexp))
|
||||
(when (get sym 'standard-value)
|
||||
(custom-reevaluate-setting sym))))
|
||||
:group 'mail
|
||||
:version "31.1")
|
||||
|
||||
(defvar epa-inhibit)
|
||||
;; Returns t if file FILE is an Rmail file.
|
||||
;;;###autoload
|
||||
|
|
|
@ -525,22 +525,27 @@ Examples:
|
|||
(defvar rmail-reply-prefix "Re: "
|
||||
"String to prepend to Subject line when replying to a message.")
|
||||
|
||||
;; Note: this is matched with case-fold-search bound to t.
|
||||
(defcustom rmail-re-abbrevs
|
||||
"\\(RE\\|رد\\|回复\\|回覆\\|SV\\|Antw\\|VS\\|REF\\|AW\\|ΑΠ\\|ΣΧΕΤ\\|השב\\|Vá\\|R\\|RIF\\|BLS\\|RES\\|Odp\\|YNT\\|ATB\\)"
|
||||
"Regexp with localized \"Re:\" abbreviations in various languages."
|
||||
:version "28.1"
|
||||
:type 'regexp)
|
||||
(defvar rmail-reply-regexp nil ;; set by `rmail-re-abbrevs
|
||||
"Regexp to delete from Subject line before inserting `rmail-reply-prefix'.")
|
||||
|
||||
;; Some mailers use "Re(2):" or "Re^2:" or "Re: Re:" or "Re[2]:".
|
||||
;; This pattern should catch all the common variants.
|
||||
;; rms: I deleted the change to delete tags in square brackets
|
||||
;; because they mess up RT tags.
|
||||
(defvar rmail-reply-regexp
|
||||
(concat "\\`\\("
|
||||
rmail-re-abbrevs
|
||||
"\\(([0-9]+)\\|\\[[0-9]+\\]\\|\\^[0-9]+\\)?\u00a0*[::] *\\)*")
|
||||
"Regexp to delete from Subject line before inserting `rmail-reply-prefix'.")
|
||||
;; Note: this is matched with case-fold-search bound to t.
|
||||
(defcustom rmail-re-abbrevs
|
||||
(concat "\\("
|
||||
(string-join mail-re-regexps "\\|")
|
||||
"\\)")
|
||||
"Regexp with localized \"Re:\" abbreviations in various languages.
|
||||
Matching is done case-insensitively.
|
||||
Initialized from `mail-re-regexps', which is easier to customize."
|
||||
:set-after '(mail-re-regexps)
|
||||
:set (lambda (sym val)
|
||||
(custom-set-default sym val)
|
||||
(setq rmail-reply-regexp (mail--wrap-re-regexp val)))
|
||||
:type 'regexp
|
||||
:version "31.1")
|
||||
|
||||
(defcustom rmail-display-summary nil
|
||||
"If non-nil, Rmail always displays the summary buffer."
|
||||
|
|
Loading…
Add table
Reference in a new issue