]> git.eshelyaron.com Git - emacs.git/commitdiff
Add an undo command to url-cookie-mode
authorLars Ingebrigtsen <larsi@gnus.org>
Sun, 15 Apr 2018 20:48:28 +0000 (22:48 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Sun, 15 Apr 2018 20:48:28 +0000 (22:48 +0200)
* lisp/url/url-cookie.el (url-cookie-undo): New command and
keystroke (bug#16650).

lisp/url/url-cookie.el

index 535a98c9c7dd3efb57017130aba8ce82090331ad..3adca26d76fa8f03275e7cc555032ce9a19ce1e4 100644 (file)
@@ -395,6 +395,8 @@ instead delete all cookies that do not match REGEXP."
 
 ;;; Mode for listing and editing cookies.
 
+(defvar url-cookie--deleted-cookies nil)
+
 (defun url-cookie-list ()
   "Display a buffer listing the current URL cookies, if there are any.
 Use \\<url-cookie-mode-map>\\[url-cookie-delete] to remove cookies."
@@ -466,12 +468,37 @@ Use \\<url-cookie-mode-map>\\[url-cookie-delete] to remove cookies."
     (let ((point (point)))
       (erase-buffer)
       (url-cookie--generate-buffer)
+      (goto-char point))
+    (push cookie url-cookie--deleted-cookies)))
+
+(defun url-cookie-undo ()
+  "Undo deletion of a cookie."
+  (interactive)
+  (unless url-cookie--deleted-cookies
+    (error "No cookie deletions to undo"))
+  (let* ((cookie (pop url-cookie--deleted-cookies))
+         (variable (if (url-cookie-secure cookie)
+                      'url-cookie-secure-storage
+                    'url-cookie-storage))
+         (list (symbol-value variable))
+        (elem (assoc (url-cookie-domain cookie) list)))
+    (if elem
+        (nconc elem (list cookie))
+      (setq elem (list (url-cookie-domain cookie) cookie))
+      (set variable (cons elem list)))
+    (setq url-cookies-changed-since-last-save t)
+    (url-cookie-write-file)
+    (let ((point (point))
+          (inhibit-read-only t))
+      (erase-buffer)
+      (url-cookie--generate-buffer)
       (goto-char point))))
 
 (defvar url-cookie-mode-map
   (let ((map (make-sparse-keymap)))
     (define-key map [delete] 'url-cookie-delete)
     (define-key map [(control k)] 'url-cookie-delete)
+    (define-key map [(control _)] 'url-cookie-undo)
     map))
 
 (define-derived-mode url-cookie-mode special-mode "URL Cookie"