From: Lars Ingebrigtsen Date: Sun, 15 Aug 2021 13:43:35 +0000 (+0200) Subject: Filter out rng-state elements in nxml-mode buffers from the kill ring X-Git-Tag: emacs-28.0.90~1491 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=2a022e9be3a1f46dde2fa230d0b31fb6fbb5d66a;p=emacs.git Filter out rng-state elements in nxml-mode buffers from the kill ring * lisp/nxml/nxml-mode.el (nxml--buffer-substring-filter): Filter out `rng-state' objects (bug#50061). (nxml-mode): Set `filter-buffer-substring-function'. --- diff --git a/lisp/nxml/nxml-mode.el b/lisp/nxml/nxml-mode.el index 1bc905cee2d..5a3499dd165 100644 --- a/lisp/nxml/nxml-mode.el +++ b/lisp/nxml/nxml-mode.el @@ -540,6 +540,7 @@ Many aspects this mode can be customized using (nxml-scan-prolog))))) (setq-local syntax-ppss-table sgml-tag-syntax-table) (setq-local syntax-propertize-function #'nxml-syntax-propertize) + (setq-local filter-buffer-substring-function #'nxml--buffer-substring-filter) (add-hook 'change-major-mode-hook #'nxml-cleanup nil t) (when (not (and (buffer-file-name) (file-exists-p (buffer-file-name)))) @@ -564,6 +565,19 @@ Many aspects this mode can be customized using (with-demoted-errors (rng-nxml-mode-init))) +(defun nxml--buffer-substring-filter (beg end &optional delete) + (let ((string (buffer-substring--filter beg end delete))) + ;; The `rng-state' property is huge, so don't copy it to the kill + ;; ring. This avoids problems when saving the kill ring with + ;; savehist. + (when (seq-find (lambda (elem) + (plist-get (nth 2 elem) 'rng-state)) + (object-intervals string)) + (remove-text-properties 0 (length string) + '(rng-state nil fontified nil) + string)) + string)) + (defun nxml-cleanup () "Clean up after nxml-mode." ;; Disable associated minor modes.