Establish record-addresses associations before annotating records
"Roland Winkler" <[email protected]> Sun, 20 Feb 2022 23:02:41 -0600
| Newsgroups | gmane.emacs.bbdb.user |
|---|---|
| Message-ID | <[email protected]> |
On Wed, Dec 29 2021, Roland Winkler wrote: > On Tue, Dec 28 2021, Roland Winkler wrote: >> So it seems to me, the best way to ignore mail addresses like >> <[email protected]> is to define a function for >> `bbdb-canonicalize-mail-function' that returns nil in such a case. >> Then, BBDB should look up the record that matches the name, but it will >> not associate the bogus address <[email protected]> with the record >> for this name. >> >> Or am I still misunderstanding the nature of this issue? > > If such a thing does solve the problem, it can also be made more > user-friendly by adding code to `bbdb-clean-address-components' that > will match the mail address against a customizable regexp. If this > succeeds, the mail address is ignored. Lately I have been annoyed myself by emails using mail addresses like [email protected], which I took as an incentive to try to solve this problem more carefully. The issue is how BBDB annotates records and creates new ones when it inspects the From and To headers of in- and outgoing messages and compares these headers with the records in BBDB. Previously, BBDB processed these headers one by one, searching for matching records on the fly. There was no well-defined interface for inspecting what BBDB wanted to do before it actually annotated the records. The central idea of the new patch is to first establish the record-addresses associations for all addresses in the relevant headers of a message before BBDB starts to process these associations. Then the new user variable bbdb-record-address-alist-function allows one to first massage these associations in whatever way before they are processed. Maybe such a user-defined function will often be too sophisticated if one just wants to ignore mail addresses like [email protected], and a cheaper, easier-to-use solution for just this is provided by the new user variable bbdb-message-ignore-mail-re. While the internals have changed by a fair amount, the user-visible behavior of how BBDB processes in- and outgoing mail should have remained in most cases the same. In rare cases when one address matches multiple records or multiple addresses match the same record, the new code may behave different from the old code. But if the behavior differs, the new behavior should be more meaningful than the old behavior. However, there may still be bugs hidden in the new code. As always, please post them here. (On GNU Elpa, the commit is "hidden" because I have not yet increased the BBDB version number. So you need to fetch it from the elpa git repository. Or get it from savannah.) Along the way, I also cleaned up the code and removed a rather obscure throw-catch that always annoyed me. Moreover, the entire patch looks bigger than it is, because I also replaced the odd names of several user variables, see the Changelog below. The old names have been declared obsolete. This brought the code closer to standard emacs coding conventions. Roland 2022-02-20 Roland Winkler <[email protected]> Establish record-addresses associations before annotating records. * lisp/bbdb.el (bbdb-mua-interactive-action): Renamed from bbdb-mua-update-interactive-p. (bbdb-mua-auto-action): Renamed from bbdb-mua-auto-update-p. (bbdb-mua-action): Renamed from bbdb-update-records-p. (bbdb-message-clean-mail-function): Renamed from bbdb-canonicalize-mail-function. (bbdb-message-ignore-mail-re, bbdb-message-ignore-name-re) (bbdb-record-address-alist-function): New variables. (bbdb-offer-to-create): Internal variable removed. (bbdb-clean-address-components): Use bbdb-message-ignore-mail-re and bbdb-message-ignore-name-re. * lisp/bbdb-mua.el (bbdb-mua-interactive-action): Renamed from bbdb-mua-update-interactive-p. (bbdb-update-records): Establish record-addresses associations before annotating records. Use bbdb-record-address-alist-function. (bbdb-query-create): Provide return value. (bbdb-annotate-message): Perform action per record and address-list. * README: Update lingo.