From 39b1a0a1d1ae25130a270a115ae8241af4ed6d75 Mon Sep 17 00:00:00 2001 From: Joseph Turner Date: Wed, 12 Jun 2024 18:45:32 -0700 Subject: [PATCH 1/2] Copy default when resetting with persist-reset Previously, persist-reset set the value of SYM to its default without copying it, which caused subsequent modifications to the value of SYM to erroneously modify the default value. Co-authored-by: Adam Porter --- persist.el | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/persist.el b/persist.el index 6cc94b4db3..df7f3836c5 100644 --- a/persist.el +++ b/persist.el @@ -122,9 +122,7 @@ (defun persist-symbol (symbol &optional initvalue) (let ((initvalue (or initvalue (symbol-value symbol)))) (add-to-list 'persist--symbols symbol) (put symbol 'persist t) - (if (hash-table-p initvalue) - (put symbol 'persist-default (copy-hash-table initvalue)) - (put symbol 'persist-default (persist-copy-tree initvalue t))))) + (put symbol 'persist-default (persist-copy initvalue)))) (defun persist--persistant-p (symbol) "Return non-nil if SYMBOL is a persistent variable." @@ -164,8 +162,8 @@ (defun persist-default (symbol) (get symbol 'persist-default)) (defun persist-reset (symbol) - "Reset the value of SYMBOL to the default." - (set symbol (persist-default symbol))) + "Set the value of SYMBOL to a copy of the default." + (set symbol (persist-copy (persist-default symbol)))) (defun persist-load (symbol) "Load the saved value of SYMBOL." @@ -241,5 +239,11 @@ (defun persist-copy-tree (tree &optional vectors-and-records) tree) tree))) +(defun persist-copy (obj) + "Return copy of OBJ." + (if (hash-table-p obj) + (copy-hash-table obj) + (persist-copy-tree obj t))) + (provide 'persist) ;;; persist.el ends here -- 2.41.0