From: Lars Ingebrigtsen Date: Sun, 15 Apr 2018 20:48:28 +0000 (+0200) Subject: Add an undo command to url-cookie-mode X-Git-Tag: emacs-27.0.90~5174 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=003a89b6c8eb5e62b4ba2f2f3d4d3e3f6a8b7484;p=emacs.git Add an undo command to url-cookie-mode * lisp/url/url-cookie.el (url-cookie-undo): New command and keystroke (bug#16650). --- 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-delete] to remove cookies." @@ -466,12 +468,37 @@ Use \\\\[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"