summaryrefslogtreecommitdiff
path: root/lisp/url/url-cookie.el
diff options
context:
space:
mode:
authorLars Ingebrigtsen <larsi@gnus.org>2018-04-15 22:48:28 +0200
committerLars Ingebrigtsen <larsi@gnus.org>2018-04-15 22:48:28 +0200
commit003a89b6c8eb5e62b4ba2f2f3d4d3e3f6a8b7484 (patch)
tree8d4f7418bd49befc17509d8d7856ff30b9263996 /lisp/url/url-cookie.el
parentf262b10b46c0f7daef9e433e95ce565191e6841d (diff)
downloademacs-003a89b6c8eb5e62b4ba2f2f3d4d3e3f6a8b7484.tar.gz
Add an undo command to url-cookie-mode
* lisp/url/url-cookie.el (url-cookie-undo): New command and keystroke (bug#16650).
Diffstat (limited to 'lisp/url/url-cookie.el')
-rw-r--r--lisp/url/url-cookie.el27
1 files changed, 27 insertions, 0 deletions
diff --git a/lisp/url/url-cookie.el b/lisp/url/url-cookie.el
index 535a98c9c7d..3adca26d76f 100644
--- a/lisp/url/url-cookie.el
+++ b/lisp/url/url-cookie.el
@@ -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"