emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/webpaste 7397cbc 220/298: Fix duplicate elements added to


From: ELPA Syncer
Subject: [nongnu] elpa/webpaste 7397cbc 220/298: Fix duplicate elements added to alists
Date: Thu, 9 Dec 2021 19:00:18 -0500 (EST)

branch: elpa/webpaste
commit 7397cbcedd89f29b0f182931ae6ced7e462e6c9a
Author: Radon Rosborough <radon.neon@gmail.com>
Commit: Radon Rosborough <radon.neon@gmail.com>

    Fix duplicate elements added to alists
    
    Previously, pasting a buffer multiple times could produce a series of
    URLs with more and more duplicates of the language specifier appended
    to the end. Using a dedicated method for mutating alists instead of
    `cl-pushnew', which introduces duplicates, solves this problem.
---
 webpaste.el | 30 +++++++++++++++++++++++++++---
 1 file changed, 27 insertions(+), 3 deletions(-)

diff --git a/webpaste.el b/webpaste.el
index 6003260..d0e7101 100644
--- a/webpaste.el
+++ b/webpaste.el
@@ -159,6 +159,25 @@ the docs for `webpaste--provider'."
 
 
 
+;; modified from https://emacs.stackexchange.com/a/33893/12534
+(defun webpaste--alist-set (key val alist)
+  "Set property KEY to VAL in ALIST. Return new alist.
+This creates the association if it is missing, and otherwise sets
+the cdr of the first matching association in the list. It does
+not create duplicate associations. Key comparison is done with
+`equal'.
+
+This method may mutate the original alist, but you still need to
+use the return value of this method instead of the original
+alist, to ensure correct results."
+  (let ((pair (assoc key alist)))
+    (if pair
+        (setcdr pair val)
+      (push (cons key val) alist)))
+  alist)
+
+
+
 (defvar webpaste--tested-providers ()
   "Variable for storing which providers to try in which order while running.
 This list will be re-populated each run based on ‘webpaste-provider-priority’ 
or
@@ -332,11 +351,16 @@ Optional params:
   ;; If we get a separator sent to the function, append it to the list of
   ;; separators for later use
   (when lang-uri-separator
-    (cl-pushnew (cons uri lang-uri-separator) webpaste--provider-separators))
+    (setq webpaste--provider-separators
+          (webpaste--alist-set
+           uri lang-uri-separator webpaste--provider-separators)))
 
   ;; Add pre-calculated list of webpaste lang alists
-  (cl-pushnew (cons uri (webpaste--get-lang-alist-with-overrides 
lang-overrides))
-              webpaste--provider-lang-alists)
+  (setq webpaste--provider-lang-alists
+        (webpaste--alist-set
+         uri
+         (webpaste--get-lang-alist-with-overrides lang-overrides)
+         webpaste--provider-lang-alists))
 
   (cl-function
    (lambda (text



reply via email to

[Prev in Thread] Current Thread [Next in Thread]