branch: externals/bufferlo
commit e0b4e88565fef6f8fc19768d8f9510b95296150f
Author: shipmints <shipmi...@gmail.com>
Commit: shipmints <shipmi...@gmail.com>

    Replace bufferlo--string-duplicates with bufferlo--list-duplicates
    
    Avoid cl-lib/cl-extra. Too expensive to load just for this.
---
 bufferlo.el | 20 +++++++++-----------
 1 file changed, 9 insertions(+), 11 deletions(-)

diff --git a/bufferlo.el b/bufferlo.el
index 96b739e1af..55c6806f91 100644
--- a/bufferlo.el
+++ b/bufferlo.el
@@ -3249,16 +3249,14 @@ This is intended to be used in
         (push abm abm-dupes)))
     abm-dupes))
 
-(defun bufferlo--string-duplicates (strings)
-  "Return a list of duplicate strings in STRINGS."
-  (let ((dupes))
-    (cl-mapl (lambda (lst)
-               (when (string= (nth 0 lst) (nth 1 lst))
-                 (push (nth 0 lst) dupes)))
-             (seq-sort
-              (lambda (a b) (string< a b))
-              strings))
-    (seq-uniq dupes)))
+(defun bufferlo--list-duplicates (lst)
+  "Return unique duplicate elements from LST.
+Equality test is 'equal,"
+  (let ((ht (make-hash-table :test 'equal :size (length lst))))
+    (mapc (lambda (x) (puthash x (if (gethash x ht) 'dupe t) ht)) lst)
+    (seq-uniq
+     (delq nil
+           (mapcar (lambda (x) (when (eq (gethash x ht) 'dupe) x)) lst)))))
 
 (defun bufferlo--bookmarks-save (active-bookmark-names active-bookmarks 
&optional no-message)
   "Save the bookmarks in ACTIVE-BOOKMARK-NAMES indexed by ACTIVE-BOOKMARKS.
@@ -3340,7 +3338,7 @@ Duplicate bookmarks are handled according to
                                            abm-name)
                                       abm-name)))
                                 abms)))
-           (dupes-to-save (bufferlo--string-duplicates abm-names-to-save))
+           (dupes-to-save (bufferlo--list-duplicates abm-names-to-save))
            (duplicate-policy bufferlo-bookmarks-save-duplicates-policy))
       (when (> (length dupes-to-save) 0)
         (when (eq duplicate-policy 'prompt)

Reply via email to