Function: undo-amalgamate-change-group
undo-amalgamate-change-group is a byte-compiled function defined in
simple.el.gz.
Signature
(undo-amalgamate-change-group HANDLE)
Documentation
Amalgamate changes in change-group since HANDLE.
Remove all undo boundaries between the state of HANDLE and now.
HANDLE is as returned by prepare-change-group.
Probably introduced at or before Emacs version 26.1.
Source Code
;; Defined in /usr/src/emacs/lisp/simple.el.gz
;; End auto-boundary section
(defun undo-amalgamate-change-group (handle)
"Amalgamate changes in change-group since HANDLE.
Remove all undo boundaries between the state of HANDLE and now.
HANDLE is as returned by `prepare-change-group'."
(dolist (elt handle)
(with-current-buffer (car elt)
(setq elt (cdr elt))
(when (consp buffer-undo-list)
(let ((old-car (car-safe elt))
(old-cdr (cdr-safe elt)))
(unwind-protect
(progn
;; Temporarily truncate the undo log at ELT.
(when (consp elt)
(setcar elt t) (setcdr elt nil))
(when
(or (null elt) ;The undo-log was empty.
;; `elt' is still in the log: normal case.
(eq elt (last buffer-undo-list))
;; `elt' is not in the log any more, but that's because
;; the log is "all new", so we should remove all
;; boundaries from it.
(not (eq (last buffer-undo-list) (last old-cdr))))
(cl-callf (lambda (x) (delq nil x))
(if (car buffer-undo-list)
buffer-undo-list
;; Preserve the undo-boundaries at either ends of the
;; change-groups.
(cdr buffer-undo-list)))))
;; Reset the modified cons cell ELT to its original content.
(when (consp elt)
(setcar elt old-car)
(setcdr elt old-cdr))))))))