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'.
This commit is contained in:
parent
ab23fa4eb2
commit
2a022e9be3
1 changed files with 14 additions and 0 deletions
|
@ -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.
|
||||
|
|
Loading…
Add table
Reference in a new issue