From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Eli Zaretskii Newsgroups: gmane.emacs.devel Subject: Re: Unbalanced change hooks (part 2) Date: Tue, 02 Aug 2016 17:44:34 +0300 Message-ID: <83ziovmdrh.fsf@gnu.org> References: <20160731121642.GB2205@acm.fritz.box> <83a8gxq288.fsf@gnu.org> <20160731172804.GD2205@acm.fritz.box> <834m75ptij.fsf@gnu.org> <20160731212635.GF2205@acm.fritz.box> <83shuoocwp.fsf@gnu.org> <20160801165323.GB15055@acm.fritz.box> <20160801171552.GC15055@acm.fritz.box> <838twgnuso.fsf@gnu.org> <20160801205223.GD15055@acm.fritz.box> Reply-To: Eli Zaretskii NNTP-Posting-Host: blaine X-Trace: blaine.gmane.org 1470149109 18807 195.159.176.226 (2 Aug 2016 14:45:09 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Tue, 2 Aug 2016 14:45:09 +0000 (UTC) Cc: ofv@wanadoo.es, rcopley@gmail.com, emacs-devel@gnu.org To: Alan Mackenzie Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Tue Aug 02 16:45:03 2016 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bUawI-0004S3-KI for ged-emacs-devel@m.gmane.org; Tue, 02 Aug 2016 16:45:02 +0200 Original-Received: from localhost ([::1]:57103 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bUawF-0006in-95 for ged-emacs-devel@m.gmane.org; Tue, 02 Aug 2016 10:44:59 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:47775) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bUaw8-0006iX-Es for emacs-devel@gnu.org; Tue, 02 Aug 2016 10:44:53 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bUaw5-0006Td-Nf for emacs-devel@gnu.org; Tue, 02 Aug 2016 10:44:52 -0400 Original-Received: from fencepost.gnu.org ([2001:4830:134:3::e]:32850) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bUaw5-0006TC-LA; Tue, 02 Aug 2016 10:44:49 -0400 Original-Received: from 84.94.185.246.cable.012.net.il ([84.94.185.246]:2451 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_128_CBC_SHA1:128) (Exim 4.82) (envelope-from ) id 1bUaw3-0007HF-KM; Tue, 02 Aug 2016 10:44:48 -0400 In-reply-to: <20160801205223.GD15055@acm.fritz.box> (message from Alan Mackenzie on Mon, 1 Aug 2016 20:52:23 +0000) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2001:4830:134:3::e X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:206351 Archived-At: > Date: Mon, 1 Aug 2016 20:52:23 +0000 > Cc: ofv@wanadoo.es, rcopley@gmail.com, emacs-devel@gnu.org > From: Alan Mackenzie > > (i) Abandon the use of before-change-functions. > (ii) Enable undo in pre-command-hook, if necessary. > (iii) At each after-change-functions call: > a - Analyze buffer-undo-list down as far as (or pos (next-nil)), and > revert the insertion or deletion which as been made, taking > particular care over coalesced multiple insertions/deletions. > b - (setq pos (current-position-in-undo-list)) > c - Perform what used to be before-change actions. > d - restore the insertion/deletion. > e - Perform the normal after-change functions. > (iv) Disable undo in post-command-hook, if appropriate. What I don't get is why do you need to look at the deleted text. The after-change-functions called after deletion tells you which buffer positions were removed, so any data CC Mode holds in its caches about those positions should be discarded. Why do you need to actually look at the removed text itself? What am I missing? Regarding the proposal itself, undoing arbitrary changes might be expensive, both CPU- and memory-wise.