unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* How to amalgamate changes across multiple buffers into a single undo entry
@ 2020-07-23  4:14 Brian Leung
  2020-07-23 21:55 ` Michael Heerdegen
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Brian Leung @ 2020-07-23  4:14 UTC (permalink / raw)
  To: help-gnu-emacs

Suppose one action causes a change in two buffers. I'd like a way of performing an undo operation so that both buffers will be undone at once. But I can't figure out how to amalgamate the buffer changes properly. This is what I've got:

(defmacro my/with-single-undo (curr-buf &rest body)
  "Within CURR-BUF, execute BODY as a single undo step."
  (declare (indent 1))
  (let ((marker (cl-gensym "marker")))
    `(let ((,marker
            (nconc (prepare-change-group ,curr-buf)
                   (prepare-change-group (get-buffer-create "b.txt")))))
       (unwind-protect
           (progn ,@body)
         (undo-amalgamate-change-group ,marker)))))

(defun my/insert-some-stuff (&rest _args)
  (interactive)
  (my/with-single-undo (current-buffer)
    (insert "apple banana caterpillar\n")
    (with-current-buffer (get-buffer-create "b.txt")
      (insert "xylophone yak zebra"))))

I test by making "a.txt" and "b.txt" files, opening both up, and then executing M-x my/insert-some-stuff from within a.txt. Right now, undo is only undoing changes within the buffer in which I execute it.

I'd appreciate any help on this.

Best,
Brian



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2020-07-26 10:30 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-07-23  4:14 How to amalgamate changes across multiple buffers into a single undo entry Brian Leung
2020-07-23 21:55 ` Michael Heerdegen
2020-07-23 22:11   ` Michael Heerdegen
2020-07-24  1:44 ` Emanuel Berg via Users list for the GNU Emacs text editor
     [not found] ` <mailman.353.1595490028.24492.help-gnu-emacs@gnu.org>
2020-07-26 10:30   ` Ihor Radchenko

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).