branch: externals/ement commit 8363bfcdc29468b6e618e38ef880c4cc051da57d Author: Adam Porter <a...@alphapapa.net> Commit: Adam Porter <a...@alphapapa.net>
Add: (ement--savehist-save-hook) Workaround for savehist-mode Fixes #216. Reported-by: Phil Sainty <p...@catalyst.net.nz> --- README.org | 1 + ement.el | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/README.org b/README.org index 207697bd06..3531bff6d9 100644 --- a/README.org +++ b/README.org @@ -313,6 +313,7 @@ Ement.el doesn't support encrypted rooms natively, but it can be used transparen + File event formatter assumed that file size metadata would be present (a malformed, e.g. spam, event might not have it). + Send correct file size when sending files/images. + Underscores are no longer interpreted as denoting subscripts when sending messages in Org format. (Thanks to [[https://github.com/phil-s][Phil Sainty]].) ++ Add workaround for ~savehist-mode~'s serializing of the ~command-history~ variable's arguments. (For ~ement-~ commands, that may include large data structures, like ~ement-session~ structs, which should never be serialized or reused, and ~savehist~'s doing so could cause noticeable delays for users who enabled it). (See [[https://github.com/alphapapa/ement.el/issues/216][#216]]. Thanks to [[https://github.com/phil-s][Phil Sainty]] and other users who helped to discover this problem.) ** 0.11 diff --git a/ement.el b/ement.el index 8eb9187ca2..1baa9984e6 100644 --- a/ement.el +++ b/ement.el @@ -1063,6 +1063,26 @@ To be called after initial sync." (when-let ((child-room (cl-find child-id rooms :key #'ement-room-id :test #'equal))) (cl-pushnew parent-id (alist-get 'parents (ement-room-local child-room)) :test #'equal)))))))) +;;;;; Savehist compatibility + +;; See <https://github.com/alphapapa/ement.el/issues/216>. + +(defvar savehist-save-hook) + +(with-eval-after-load 'savehist + ;; TODO: Consider using a symbol property on our commands and checking that rather than + ;; symbol names; would avoid consing. + (defun ement--savehist-save-hook () + "Remove all `ement-' commands from `command-history'. +Because when `savehist' saves `command-history', it includes the +interactive arguments passed to the command, which in our case +includes large data structures that should never be persisted!" + (setf command-history + (cl-remove-if (pcase-lambda (`(,command . ,_)) + (string-match-p (rx bos "ement-") (symbol-name command))) + command-history))) + (cl-pushnew 'ement--savehist-save-hook savehist-save-hook)) + ;;;; Footer (provide 'ement)