From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Stefan Monnier Newsgroups: gmane.emacs.bugs Subject: bug#16411: undo-only bugs Date: Fri, 10 Jan 2014 18:54:57 -0500 Message-ID: References: NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Trace: ger.gmane.org 1389398181 16667 80.91.229.3 (10 Jan 2014 23:56:21 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Fri, 10 Jan 2014 23:56:21 +0000 (UTC) Cc: 16411@debbugs.gnu.org To: Barry OReilly Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sat Jan 11 00:56:27 2014 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1W1lwA-0006MJ-2s for geb-bug-gnu-emacs@m.gmane.org; Sat, 11 Jan 2014 00:56:26 +0100 Original-Received: from localhost ([::1]:59534 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W1lw9-0007MT-G3 for geb-bug-gnu-emacs@m.gmane.org; Fri, 10 Jan 2014 18:56:25 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:46776) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W1lvz-0007MK-D8 for bug-gnu-emacs@gnu.org; Fri, 10 Jan 2014 18:56:22 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1W1lvn-0000kk-KW for bug-gnu-emacs@gnu.org; Fri, 10 Jan 2014 18:56:15 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:59925) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W1lvn-0000kf-Ge for bug-gnu-emacs@gnu.org; Fri, 10 Jan 2014 18:56:03 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1W1lvm-0002mB-NO for bug-gnu-emacs@gnu.org; Fri, 10 Jan 2014 18:56: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, 10 Jan 2014 23:56:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 16411 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 16411-submit@debbugs.gnu.org id=B16411.138939810410602 (code B ref 16411); Fri, 10 Jan 2014 23:56:02 +0000 Original-Received: (at 16411) by debbugs.gnu.org; 10 Jan 2014 23:55:04 +0000 Original-Received: from localhost ([127.0.0.1]:45710 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1W1lup-0002kv-AY for submit@debbugs.gnu.org; Fri, 10 Jan 2014 18:55:03 -0500 Original-Received: from ironport2-out.teksavvy.com ([206.248.154.181]:8292) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1W1luk-0002kQ-KY for 16411@debbugs.gnu.org; Fri, 10 Jan 2014 18:54:59 -0500 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AgAFABK/CFFFxKG9/2dsb2JhbABEhke4Rxdzgh4BAQQBIzMjBQsLGgIYDgICFBgNJC6HcAauX5JOgSOOVIETA4hhnBmBXoMV X-IPAS-Result: AgAFABK/CFFFxKG9/2dsb2JhbABEhke4Rxdzgh4BAQQBIzMjBQsLGgIYDgICFBgNJC6HcAauX5JOgSOOVIETA4hhnBmBXoMV X-IronPort-AV: E=Sophos;i="4.84,565,1355115600"; d="scan'208";a="44692583" Original-Received: from 69-196-161-189.dsl.teksavvy.com (HELO pastel.home) ([69.196.161.189]) by ironport2-out.teksavvy.com with ESMTP/TLS/ADH-AES256-SHA; 10 Jan 2014 18:54:57 -0500 Original-Received: by pastel.home (Postfix, from userid 20848) id 334C76045A; Fri, 10 Jan 2014 18:54:57 -0500 (EST) In-Reply-To: (Barry OReilly's message of "Fri, 10 Jan 2014 17:33:37 -0500") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 140.186.70.43 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.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:83258 Archived-At: > I think the solution entails moving this sort of thing into a loop in > undo-more: > (when (and (consp equiv) undo-no-redo) > ;; The equiv entry might point to another redo record if we have done > ;; undo-redo-undo-redo-... so skip to the very last equiv. > (while (let ((next (gethash equiv undo-equiv-table))) > (if next (setq equiv next)))) > (setq pending-undo-list equiv)) Indeed. Or, equivalently, changing `undo' so it only calls undo-more with argument 1 (and use the above while loop between each call to undo-more). > Recipe 2: > =E2=80=A2 Insert "aaa" > =E2=80=A2 Insert "bbb" > =E2=80=A2 Mark region around "aaa" but not "bbb" > =E2=80=A2 Undo (in region) > =E2=80=A2 Mark region around "bbb" and where "aaa" used to be > =E2=80=A2 Undo-only > =E2=80=A2 Expected: none of the above insertions are in the buffer > =E2=80=A2 Actual: buffer has aaa and bbb insertions > The code appears to simply punt on undo-only in region and behaves > like ordinary undo. Thus it undoes the redo record to bring back bbb. undo-in-region does not implement undo-only, indeed. I think the way to implement undo-only is to change undo-make-selective-list so it also skips redo entries (depending on undo-no-redo, obviously) using the above while loop. Stefan