Subject: bug#58487: closed (Re: bug#58487: [PATCH] Allow filtering what items are added to Ecomplete)

From: [email-masked] (GNU bug Tracking System)
Date: Fri, 14 Oct 2022 18:14:03 +0000

Your bug report

#58487: [PATCH] Allow filtering what items are added to Ecomplete

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
58487: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=58487
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#58487: [PATCH] Allow filtering what items are added to Ecomplete
From: Philip Kaludercic <[email-masked]>
To: Lars Ingebrigtsen <[email-masked]>
Cc: [email-masked]
Date: Fri, 14 Oct 2022 18:13:41 +0000
List-Id: <debbugs-submit.debbugs.gnu.org>

Lars Ingebrigtsen <[email-masked]> writes:

> Philip Kaludercic <[email-masked]> writes:
>
>> * lisp/ecomplete.el (ecomplete-filter-regexp): Add new option.
>> (ecomplete-add-item): Respect new option.
>
> Makes sense to me; please go ahead and push.

Done

Subject: [PATCH] Allow filtering what items are added to Ecomplete
From: Philip Kaludercic <[email-masked]>
To: [email-masked]
Date: Thu, 13 Oct 2022 10:06:07 +0000
List-Id: <debbugs-submit.debbugs.gnu.org>

Tags: patch

I've had this as a customisation in my local .emacs file, implemented as
advice around ecomplete-add-item:

--8<---------------cut here---------------start------------->8---
(define-advice ecomplete-add-item (:around (oldfun type key text))
  "Filter out common pseudo addresses from the database.
OLDFUN is `ecomplete-add-item', passed by `advice-add', that will
be invoked with TYPE, KEY and TEXT if KEY doesn't match a known
address I don't care about."
  (unless (string-match-p
           (rx (or (: "@noreply.github.com" eos)
                   (: "@reply.github.com" eos)
                   (: bos "[email-masked]" eos)
                   (: "@debbugs.gnu.org" eos)))
           key)
    (funcall oldfun type key text)))
--8<---------------cut here---------------end--------------->8---

Having this as a regular option seems preferable to me, so I'd like to
suggest it here.

In GNU Emacs 29.0.50 (build 5, x86_64-pc-linux-gnu, GTK+ Version
 3.24.34, cairo version 1.17.6) of 2022-10-13 built on rhea
Repository revision: 0b170c6caeeb669df3cf97c54c43da9cf77e6b42
Repository branch: master
System Description: Fedora Linux 36 (Workstation Edition)

Configured using:
 'configure --with-pgtk --with-imagemagick'

>From e03fb00267171fe995f8487043446df18f1f96cf Mon Sep 17 00:00:00 2001
From: Philip Kaludercic <[email-masked]>
Date: Thu, 13 Oct 2022 12:02:02 +0200
Subject: [PATCH] Allow filtering what items are added to Ecomplete

* etc/NEWS: Mention new option.
* lisp/ecomplete.el (ecomplete-filter-regexp): Add new option.
(ecomplete-add-item): Respect new option.
---
 etc/NEWS          |  5 +++++
 lisp/ecomplete.el | 35 +++++++++++++++++++++--------------
 2 files changed, 26 insertions(+), 14 deletions(-)

diff --git a/etc/NEWS b/etc/NEWS
index ca857056fd..1357e82810 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1376,6 +1376,11 @@ the ecomplete database.
 *** New user option 'ecomplete-auto-select'.
 If non-nil and there's only one matching option, auto-select that.
 
+---
+*** New user option 'ecomplete-filter-regexp'.
+If non-nil this user option describes what email addresses to ignore
+and not add to the database.
+
 ** Dired
 
 +++
diff --git a/lisp/ecomplete.el b/lisp/ecomplete.el
index 6ff67d46d2..21f5f456ea 100644
--- a/lisp/ecomplete.el
+++ b/lisp/ecomplete.el
@@ -86,6 +86,11 @@ ecomplete-auto-select
   :type 'boolean
   :version "29.1")
 
+(defcustom ecomplete-filter-regexp nil
+  "Regular expression of addresses to not store."
+  :type 'regexp
+  :version "29.1")
+
 ;;; Internal variables.
 
 (defvar ecomplete-database nil)
@@ -104,20 +109,22 @@ ecomplete-add-item
 By default, the longest version of TEXT will be preserved, but if
 FORCE is non-nil, use TEXT exactly as is."
   (unless ecomplete-database (ecomplete-setup))
-  (let ((elems (assq type ecomplete-database))
-	(now (time-convert nil 'integer))
-	entry)
-    (unless elems
-      (push (setq elems (list type)) ecomplete-database))
-    (if (setq entry (assoc key (cdr elems)))
-	(pcase-let ((`(,_key ,count ,_time ,oldtext) entry))
-	  (setcdr entry (list (1+ count) now
-	                      ;; Preserve the "more complete" text.
-	                      (if (or force
-                                      (>= (length text) (length oldtext)))
-	                          text
-                                oldtext))))
-      (nconc elems (list (list key 1 now text))))))
+  (unless (and ecomplete-filter-regexp
+               (string-match-p ecomplete-filter-regexp key))
+    (let ((elems (assq type ecomplete-database))
+          (now (time-convert nil 'integer))
+          entry)
+      (unless elems
+        (push (setq elems (list type)) ecomplete-database))
+      (if (setq entry (assoc key (cdr elems)))
+          (pcase-let ((`(,_key ,count ,_time ,oldtext) entry))
+            (setcdr entry (list (1+ count) now
+                                ;; Preserve the "more complete" text.
+                                (if (or force
+                                        (>= (length text) (length oldtext)))
+                                    text
+                                  oldtext))))
+        (nconc elems (list (list key 1 now text)))))))
 
 (defun ecomplete--remove-item (type key)
   "Remove the element of TYPE and KEY from the ecomplete database."
-- 
2.37.3