From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Eli Zaretskii Newsgroups: gmane.emacs.bugs Subject: bug#24340: insert-file-contents calls before-change-functions too late Date: Tue, 30 Aug 2016 22:10:24 +0300 Message-ID: <8360qim5sv.fsf@gnu.org> References: Reply-To: Eli Zaretskii NNTP-Posting-Host: blaine.gmane.org X-Trace: blaine.gmane.org 1472584280 27228 195.159.176.226 (30 Aug 2016 19:11:20 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Tue, 30 Aug 2016 19:11:20 +0000 (UTC) Cc: 24340@debbugs.gnu.org To: Stefan Monnier Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Aug 30 21:11:15 2016 Return-path: Envelope-to: geb-bug-gnu-emacs@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 1beoRG-0006VU-Se for geb-bug-gnu-emacs@m.gmane.org; Tue, 30 Aug 2016 21:11:14 +0200 Original-Received: from localhost ([::1]:50853 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1beoRE-0006Vo-HH for geb-bug-gnu-emacs@m.gmane.org; Tue, 30 Aug 2016 15:11:12 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:52551) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1beoR7-0006Vi-Nh for bug-gnu-emacs@gnu.org; Tue, 30 Aug 2016 15:11:06 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1beoR3-0000LF-Uk for bug-gnu-emacs@gnu.org; Tue, 30 Aug 2016 15:11:04 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:46970) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1beoR3-0000LB-RX for bug-gnu-emacs@gnu.org; Tue, 30 Aug 2016 15:11:01 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1beoR3-0008Mt-LY for bug-gnu-emacs@gnu.org; Tue, 30 Aug 2016 15:11:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 30 Aug 2016 19:11:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 24340 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 24340-submit@debbugs.gnu.org id=B24340.147258425732157 (code B ref 24340); Tue, 30 Aug 2016 19:11:01 +0000 Original-Received: (at 24340) by debbugs.gnu.org; 30 Aug 2016 19:10:57 +0000 Original-Received: from localhost ([127.0.0.1]:44682 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1beoQy-0008Ma-Uh for submit@debbugs.gnu.org; Tue, 30 Aug 2016 15:10:57 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:33305) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1beoQx-0008MN-9z for 24340@debbugs.gnu.org; Tue, 30 Aug 2016 15:10:55 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1beoQp-0000KK-DU for 24340@debbugs.gnu.org; Tue, 30 Aug 2016 15:10:50 -0400 Original-Received: from fencepost.gnu.org ([2001:4830:134:3::e]:59610) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1beoQp-0000KA-Ab; Tue, 30 Aug 2016 15:10:47 -0400 Original-Received: from 84.94.185.246.cable.012.net.il ([84.94.185.246]:2029 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_128_CBC_SHA1:128) (Exim 4.82) (envelope-from ) id 1beoQj-00048s-HH; Tue, 30 Aug 2016 15:10:45 -0400 In-reply-to: (message from Stefan Monnier on Tue, 30 Aug 2016 14:42:19 -0400) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.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" Xref: news.gmane.org gmane.emacs.bugs:122782 Archived-At: > From: Stefan Monnier > Date: Tue, 30 Aug 2016 14:42:19 -0400 > > if (same_at_end != same_at_start) > { > invalidate_buffer_caches (current_buffer, > BYTE_TO_CHAR (same_at_start), > same_at_end_charpos); > del_range_byte (same_at_start, same_at_end, 0); > [...] > /* This binding is to avoid ask-user-about-supersession-threat > being called in insert_from_buffer (via in > prepare_to_modify_buffer). */ > specbind (intern ("buffer-file-name"), Qnil); > insert_from_buffer (XBUFFER (conversion_buffer), > same_at_start_charpos, inserted_chars, 0); > > The call to del_range_byte has arg prepare=0 so it doesn't run b-c-f. > Instead b-c-f is called from insert_from_buffer, which is too late since > the deletion already took place. > > This is also the source of the known bug that b-c-f is not called at all > if insert-file-contents ends up only deleting text (since in that case > del_range_byte is called but insert_from_buffer isn't). > > I include a suggested patch (which also would have the consequence that > we could get rid of the `prepare' argument of del_range_byte). Thanks for the patch, but I don't want to make such pervasive changes for this problem. I thought we agreed that a single call to before-change hooks for the entire buffer would be an okay solution for this scenario. What you suggest is exactly the slippery path which I was afraid of: a lot of tricky/kludgey changes whose effect we don't really understand, because we have no tests for the affected functionality. One comment to your FIXME comment: > + /* FIXME: Shouldn't invalidate_buffer_caches be called by > + del_range_byte or even directly by prepare_to_modify_buffer? */ prepare_to_modify_buffer already calls invalidate_buffer_caches. The direct call here is because del_range_byte is called with its last argument zero.