From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Stefan Monnier Newsgroups: gmane.emacs.bugs Subject: bug#33341: 27.0.50; Undo log merging and change groups Date: Fri, 27 Nov 2020 09:44:27 -0500 Message-ID: References: <877ehk3ve4.fsf@web.de> <87blfkthy7.fsf@gnus.org> <87zh3442zo.fsf@web.de> <87o8jkgoli.fsf@web.de> <878sang90k.fsf@web.de> <87im9r38p0.fsf@web.de> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="38894"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) Cc: Lars Ingebrigtsen , 33341@debbugs.gnu.org To: Michael Heerdegen Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Fri Nov 27 15:45:13 2020 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kiezo-0009xo-Vt for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 27 Nov 2020 15:45:12 +0100 Original-Received: from localhost ([::1]:37480 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kiezl-0000U7-R7 for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 27 Nov 2020 09:45:11 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:36106) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kieze-0000Tz-NW for bug-gnu-emacs@gnu.org; Fri, 27 Nov 2020 09:45:02 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]:32803) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kieze-0002fO-EN for bug-gnu-emacs@gnu.org; Fri, 27 Nov 2020 09:45:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1kieze-0003C4-CI for bug-gnu-emacs@gnu.org; Fri, 27 Nov 2020 09:45:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Stefan Monnier Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 27 Nov 2020 14:45:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 33341 X-GNU-PR-Package: emacs Original-Received: via spool by 33341-submit@debbugs.gnu.org id=B33341.160648828612237 (code B ref 33341); Fri, 27 Nov 2020 14:45:02 +0000 Original-Received: (at 33341) by debbugs.gnu.org; 27 Nov 2020 14:44:46 +0000 Original-Received: from localhost ([127.0.0.1]:44349 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kiezI-0003BB-0L for submit@debbugs.gnu.org; Fri, 27 Nov 2020 09:44:46 -0500 Original-Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:56183) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kiezD-0003Ar-SG for 33341@debbugs.gnu.org; Fri, 27 Nov 2020 09:44:39 -0500 Original-Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 6BC7E100279; Fri, 27 Nov 2020 09:44:30 -0500 (EST) Original-Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 8E5D310023D; Fri, 27 Nov 2020 09:44:28 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1606488268; bh=KAA32g8x/tDo3CbYMKo24ulS8RPHgpbjzUrkEq/zN0o=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=H3o1SQ+/W3EEUnUmhMdb5ZwkHJtQtJEwRP6ODZ/I2HM3wvbaBn7NBk8A38hVoGN03 CBhPH6wuejLZ8Ff4sXML0nyTGfjra4lhYTD3CGDxxKJH0io2auH9bwC8S/sTgQtSpG VrPHeLgcwwr2hu/P3h4BXHzAoo/oqMFexPx11rgtDdOYOBu1fwyHWY2f6T71J2cpcE sSzETJWzAPf89wSut6x+BWDxnYrKGppLUezUKZLw7fUg50I3YStRyQuYx0FdC+Jq+r EUD0whlTZWEPNc8wfWn2m7lTNM+o4UqAr5qRNliBiZ0yv8Q6ArYut2gyTUjFMzexwx JdAI0Xin8B3AQ== Original-Received: from alfajor (69-165-136-52.dsl.teksavvy.com [69.165.136.52]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 502111203D8; Fri, 27 Nov 2020 09:44:28 -0500 (EST) In-Reply-To: <87im9r38p0.fsf@web.de> (Michael Heerdegen's message of "Fri, 27 Nov 2020 02:11:23 +0100") X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:194445 Archived-At: > (defun my-test-change-groups () > (interactive) > (insert "0\n") > ;; (undo-boundary) > (let ((g (prepare-change-group))) > (activate-change-group g) > (insert "b\n") > (insert "c\n") > (cancel-change-group g))) I see it's a bug indeed: the problem is that `insert` optimizes the undo entries by reusing a previous undo entry is that was a consecutive insertion, so when you get to `cancel-change-group` the `buffer-undo-list` only has a single entry that represent the combination of all 3 insertions. I just pushed the patch below which should fix it. Stefan diff --git a/lisp/subr.el b/lisp/subr.el index e009dcc2b9..1cf3a49fe4 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -3036,7 +3036,10 @@ activate-change-group (dolist (elt handle) (with-current-buffer (car elt) (if (eq buffer-undo-list t) - (setq buffer-undo-list nil))))) + (setq buffer-undo-list nil) + ;; Add a boundary to make sure the upcoming changes won't be + ;; merged with any previous changes (bug#33341). + (undo-boundary))))) (defun accept-change-group (handle) "Finish a change group made with `prepare-change-group' (which see). diff --git a/test/lisp/subr-tests.el b/test/lisp/subr-tests.el index 67f7fc9749..e3f798d11c 100644 --- a/test/lisp/subr-tests.el +++ b/test/lisp/subr-tests.el @@ -551,5 +551,17 @@ subr-replace-regexp-in-string (should (equal (replace-regexp-in-string "\\`\\|x" "z" "--xx--") "z--zz--"))) +(ert-deftest subr-tests--change-group-33341 () + (with-temp-buffer + (buffer-enable-undo) + (insert "0\n") + ;; (undo-boundary) + (let ((g (prepare-change-group))) + (activate-change-group g) + (insert "b\n") + (insert "c\n") + (cancel-change-group g)) + (should (equal (buffer-string) "0\n")))) + (provide 'subr-tests) ;;; subr-tests.el ends here