From unknown Sat Aug 16 12:44:41 2025 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.509 (Entity 5.509) Content-Type: text/plain; charset=utf-8 From: bug#31538 <31538@debbugs.gnu.org> To: bug#31538 <31538@debbugs.gnu.org> Subject: Status: 26.1; query-replace undo fails if user edits the replacement string Reply-To: bug#31538 <31538@debbugs.gnu.org> Date: Sat, 16 Aug 2025 19:44:41 +0000 retitle 31538 26.1; query-replace undo fails if user edits the replacement = string reassign 31538 emacs submitter 31538 Tino Calancha severity 31538 normal tag 31538 patch thanks From debbugs-submit-bounces@debbugs.gnu.org Sun May 20 08:12:50 2018 Received: (at submit) by debbugs.gnu.org; 20 May 2018 12:12:50 +0000 Received: from localhost ([127.0.0.1]:41689 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fKNCk-00014S-Kb for submit@debbugs.gnu.org; Sun, 20 May 2018 08:12:50 -0400 Received: from eggs.gnu.org ([208.118.235.92]:36203) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fKNCj-00014D-Km for submit@debbugs.gnu.org; Sun, 20 May 2018 08:12:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fKNCd-0003kF-Lj for submit@debbugs.gnu.org; Sun, 20 May 2018 08:12:44 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=BAYES_20,FREEMAIL_FROM, T_DKIM_INVALID autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:56892) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1fKNCd-0003k7-IU for submit@debbugs.gnu.org; Sun, 20 May 2018 08:12:43 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55400) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fKNCc-0003MM-Lc for bug-gnu-emacs@gnu.org; Sun, 20 May 2018 08:12:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fKNCY-0003hN-MT for bug-gnu-emacs@gnu.org; Sun, 20 May 2018 08:12:42 -0400 Received: from mail-pf0-x233.google.com ([2607:f8b0:400e:c00::233]:41272) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fKNCY-0003gj-GX for bug-gnu-emacs@gnu.org; Sun, 20 May 2018 08:12:38 -0400 Received: by mail-pf0-x233.google.com with SMTP id v63-v6so5757085pfk.8 for ; Sun, 20 May 2018 05:12:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:mime-version; bh=HrMQC4pw0gWWfb0FqElgypTIUNzefe5SUy4YOpylUns=; b=jbrYR//KA0+YBfBbUdedZLGYc8tSRvHbCDezAzLIH10+MiMvNrOBMlj/9TP5Zki/Rw zanWBihntStEtp5iysCWlXg44u0D5BjtJDE8x1oJuUz87/Z+TPsAohwadMmJpchPeoIL MEMos+UhjNLgrhBdfccNTL5cDQo92AHBIpGliwFth5R1m4fO4qCGQPoXaLD0gy1wh0y8 v89c1CnkgBzYAzeEWMaOU7IRRoPfGtp8u18KGpZ0BhgeOjbIq6yJvwLAq60KFcOlweQ7 PSItECf4lVOCGRtcqkRUD+A+H+3tX9HRUtRZRR9d0sXgX+lGQfwpZOtOYGF140g+t6Rq VRKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:mime-version; bh=HrMQC4pw0gWWfb0FqElgypTIUNzefe5SUy4YOpylUns=; b=Uxm9rE6YC70sHemRp0rLBiHrEhxooDZHt4H+sAYQqtgM2bo04qJmz3LGWHz5YOQAFG lwAfi91+A81n9XwIMnPsscwQctNqbhXuLBuEgAcdgCv0a3g3N2U/1Q4Fu7lDH1l6Ku+S h34pqJYyDes6OMD2QqiQ/5rQmMBrNh0d6iAvseL9Cl8FR8RTTc759xRZA22UFJiOWx95 /jxLNu7OqZjVbOmDXZWlHn9GG77SMxmGEr26pJJ6ZkirxIvhBubrJOt+SOFvP/3Oe1FV XwDLxJF0RmYK9AFeyuhq6jzQBb57+KAKHsPile/jqouuJOz3XmmjLlKqCUJmfaNXN1ja +5jg== X-Gm-Message-State: ALKqPwenWJnp4HqXjrc0vqTetaQtaqNtas2zs3CGY2F0TCTTQSuPPIgq DVd5yZdM9cUOIa/ntKr+BS2qGg== X-Google-Smtp-Source: AB8JxZqsCn0qB1mo7WmDyZ6CkRQiXwcTyjGhrdx9rJGjYnnIooXYP0KM3KWnUnf5g0EWBBzuCZ2aQg== X-Received: by 2002:a63:7807:: with SMTP id t7-v6mr12786841pgc.125.1526818357326; Sun, 20 May 2018 05:12:37 -0700 (PDT) Received: from calancha-pc (228.225.128.101.dy.bbexcite.jp. [101.128.225.228]) by smtp.gmail.com with ESMTPSA id w8-v6sm22928453pfk.112.2018.05.20.05.12.35 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 20 May 2018 05:12:36 -0700 (PDT) From: Tino Calancha To: bug-gnu-emacs@gnu.org Subject: 26.1; query-replace undo fails if user edits the replacement string Date: Sun, 20 May 2018 21:12:34 +0900 Message-ID: <87r2m6wmod.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -4.0 (----) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -5.0 (-----) M-< M-% is RET foo RET SPC E bar RET U ;; Just drop 'foo' but keeps 'bar'. In GNU Emacs 26.1 (build 8, x86_64-pc-linux-gnu, GTK+ Version 3.22.11) of 2018-05-20 built on calancha-pc Repository revision: 845fe038e790c7c62c6b294f88648644a4ae7ddd From debbugs-submit-bounces@debbugs.gnu.org Sun May 20 08:39:38 2018 Received: (at 31538) by debbugs.gnu.org; 20 May 2018 12:39:38 +0000 Received: from localhost ([127.0.0.1]:41710 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fKNcf-0001id-Q5 for submit@debbugs.gnu.org; Sun, 20 May 2018 08:39:37 -0400 Received: from mail-pl0-f47.google.com ([209.85.160.47]:37180) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fKNcd-0001iM-MQ for 31538@debbugs.gnu.org; Sun, 20 May 2018 08:39:36 -0400 Received: by mail-pl0-f47.google.com with SMTP id w19-v6so7174125plq.4 for <31538@debbugs.gnu.org>; Sun, 20 May 2018 05:39:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:references:date:in-reply-to:message-id:user-agent :mime-version; bh=9pGlBWjihmatiXa2pudB4QmQ598ZPx5gp3qllkN4/H0=; b=CFwC7ZT9ahLphWnXbQppj8S8hnaMgSny3m4MDjUHr7UjRaFjvVeyB0u/fDgk2+T1kD B6Q1RVBpGojCoApOc3AZOZlO+3PriMA1XFbJFrut6TCD7l4pydhT4yKU4yVeUnOthXQs DYcZw/cP2RCWZQqoKPI1rnoxHpZow/is7eLkIY4AamKCQxyFqpmHnAuZvPZHmRluN3O9 W34XZLdXmaqpVmVqXNLyhwCUJ2km0JhDJ/3IILAurM+tnPYX+eh8125yX7Nf2grdwTVt u4qbKdLEWcJyb+H8/d1jZC2iSww1vu2qPqCvwXgtNc/1z5i0ZsZPr8qaIWL9mk95gS74 54rw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=9pGlBWjihmatiXa2pudB4QmQ598ZPx5gp3qllkN4/H0=; b=emMDu12H+t2pFuyMZPN2IuIX5RtUxtG9XUyLHcfODmAceiFxtrFI2Vc4HoohcYeN1a vGIHJuvhDe7StQk5qcRFA9PK6rxUoxWUyhQi6Npa94ZmVMTv3tqUEtibdNxjGukADq0+ eQWvVq/Hnc+hp7iIcR2FQ7Zv2TgBEu56VRjWFCG6tPtqHFHyHbywYU34xWP6f2cm/lf6 vqjzX0xpwOjwBX+KxMLMqdBqpqlcFDsxr4DJR6uAl7vOyW5y2N5wLrc/hHo5LKUnXlbs OKgERdx6GkPeVXRh1Fk2Gp7u849Ua52DLUJ5Lck1z+zzGUouR3Mo0eE0kCc24D2H5tWl gigw== X-Gm-Message-State: ALKqPwclQE4mIhrfVlN07PkExkgeo8dku6JA3ClpizzXjeITdHL/+ocK ghPvtQRVo3yjB0gv1GKafE5hFw== X-Google-Smtp-Source: AB8JxZppE3oPFn5dLV7s4ivUEB63AUDXv31bK7f1HNJHEcrN4VLV80Onnb0xyRRAHzIWYT01/tHKaQ== X-Received: by 2002:a17:902:5409:: with SMTP id d9-v6mr8677030pli.1.1526819969652; Sun, 20 May 2018 05:39:29 -0700 (PDT) Received: from calancha-pc (228.225.128.101.dy.bbexcite.jp. [101.128.225.228]) by smtp.gmail.com with ESMTPSA id q68-v6sm21064402pfb.182.2018.05.20.05.39.28 for <31538@debbugs.gnu.org> (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 20 May 2018 05:39:29 -0700 (PDT) From: Tino Calancha To: 31538@debbugs.gnu.org Subject: Re: bug#31538: 26.1; query-replace undo fails if user edits the replacement string References: <87r2m6wmod.fsf@gmail.com> Date: Sun, 20 May 2018 21:39:26 +0900 In-Reply-To: <87r2m6wmod.fsf@gmail.com> (Tino Calancha's message of "Sun, 20 May 2018 21:12:34 +0900") Message-ID: <87o9hawlfl.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -1.8 (-) X-Debbugs-Envelope-To: 31538 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.8 (--) Tino Calancha writes: > M-< > M-% is RET foo RET SPC E bar RET U > ;; Just drop 'foo' but keeps 'bar'. Update the replacement string after the user has input the new value. --8<-----------------------------cut here---------------start------------->8--- commit 5655739cedb02946dd16071a64e51fcab08abf8b Author: Tino Calancha Date: Sun May 20 21:32:55 2018 +0900 Fix Bug#31538 * lisp/replace.el (perform-replace): Update the replacement string after the user edit it. diff --git a/lisp/replace.el b/lisp/replace.el index 3503b656d9..8605577066 100644 --- a/lisp/replace.el +++ b/lisp/replace.el @@ -2801,7 +2801,8 @@ perform-replace (replace-match-maybe-edit next-replacement nocasify literal noedit real-match-data backward) - replaced t)) + replaced t) + (setq next-replacement-replaced next-replacement)) (setq done t)) ((eq def 'delete-and-edit) --8<-----------------------------cut here---------------end--------------->8--- From debbugs-submit-bounces@debbugs.gnu.org Sun May 20 08:39:52 2018 Received: (at control) by debbugs.gnu.org; 20 May 2018 12:39:52 +0000 Received: from localhost ([127.0.0.1]:41713 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fKNcu-0001j4-37 for submit@debbugs.gnu.org; Sun, 20 May 2018 08:39:52 -0400 Received: from mail-pf0-f175.google.com ([209.85.192.175]:40092) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fKNcs-0001ir-Jp for control@debbugs.gnu.org; Sun, 20 May 2018 08:39:50 -0400 Received: by mail-pf0-f175.google.com with SMTP id f189-v6so5782936pfa.7 for ; Sun, 20 May 2018 05:39:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:message-id:to:from:subject; bh=0jqEj+tzMOmv4j9gPte6ALdSyMz7wMwCB4vWk315Coo=; b=Jo4LJLEnqW5DXdkcJ8ForhYURYdxb0UwwDbggXY4h5hm1fu3XuHql6Cp1uGmC2ebkY bKskfEAFGUdnk3+S/zV0M31d3q/dm9nS2yWsBcTpPA0qdAK7B9+YPeNbD7iMX5Z9/AJ2 L5k5SPAHDvImrV00eszsa02P+Nm7jM5c4GfT7EhJ5S57EPMdWMoF/BP6zsSnx9InJnTq sWZsXXJ3FuKiKCWIr+GUbQHX2D5fQPFiy+r04+3/9j/9ZTq1i7ORx/02xs6zfD7plbCR 7MfCS3TcT2s2QGxx7u2rkmUeRIy7GTs0W3puZFOtYhPkfK5ieJw+r+8cPUrs/AgvsTvh ccAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:message-id:to:from:subject; bh=0jqEj+tzMOmv4j9gPte6ALdSyMz7wMwCB4vWk315Coo=; b=ZGPR0fTCLLBTiTIx+YbAuN0QB5JgcPqQYFP8fMYQugsgBnfOwzIdDabwklJLvke1wZ JaQGusOsEQ97yRwqd0CZn61JvGcMUYOcRKRGc6kCxa77mmsr8aBM55S1WHRe6e2x5VaH 1wn/ZXJHvd8e2vJ0gC8la8wsmwZfw6e7SSKx/xr8tYIjJHrFSSu0NiSy7nzWOXw9fckd otyypVP4GDl/m8uXmq/zHgUD/KS8x23rzbHnj50sCXPSFahf98k++AsBhpC1au5hRp0c 1PhHClv8bfHTRE2Jm11jH2gf+CItXJqTKtEg6DsyeKkWikFxOG5NucZgkC0zHa1Jc7Jm JhVQ== X-Gm-Message-State: ALKqPwf53TT7DlwxLoNiTXdGoWSROp4cZLixfN+nmZvkjATTnudNWLTr B5nMdEs229CNU07xjByXFIi8hQ== X-Google-Smtp-Source: AB8JxZp3/Yjdj3EmfTFKlC4pRpYxRFvE/t+FolIoDR4fIgUBB1zg/EX0OnElOgN+G3mEJ4KrNWd4wg== X-Received: by 2002:a65:534b:: with SMTP id w11-v6mr12703864pgr.79.1526819984785; Sun, 20 May 2018 05:39:44 -0700 (PDT) Received: from calancha-pc (228.225.128.101.dy.bbexcite.jp. [101.128.225.228]) by smtp.gmail.com with ESMTPSA id d4-v6sm22630013pfl.24.2018.05.20.05.39.43 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 20 May 2018 05:39:44 -0700 (PDT) Date: Sun, 20 May 2018 21:39:41 +0900 Message-Id: <87muwuwlf6.fsf@gmail.com> To: control@debbugs.gnu.org From: Tino Calancha Subject: control message for bug #31538 X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: control X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) tags 31538 patch From debbugs-submit-bounces@debbugs.gnu.org Wed May 23 05:46:13 2018 Received: (at 31538) by debbugs.gnu.org; 23 May 2018 09:46:13 +0000 Received: from localhost ([127.0.0.1]:44799 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fLQLV-0007cK-5z for submit@debbugs.gnu.org; Wed, 23 May 2018 05:46:13 -0400 Received: from mail-pf0-f178.google.com ([209.85.192.178]:46302) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fLQLS-0007c7-JX for 31538@debbugs.gnu.org; Wed, 23 May 2018 05:46:11 -0400 Received: by mail-pf0-f178.google.com with SMTP id p12-v6so10209806pff.13 for <31538@debbugs.gnu.org>; Wed, 23 May 2018 02:46:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:references:date:in-reply-to:message-id:user-agent :mime-version; bh=Y0ejoD3wixAOiLxvLA0m+MnoPMs3ckD1OyXx4+kMmfk=; b=AahmUHDKE9L++Ahl8VEVynPAlSpqmkbap8FDij9Ig9wgifC/soZWb1RTUNUYzN+Fwj UJcnogUd2Y4ubTAC1qiEaJIraVxegu0s0hd4pZKkIqQkbC4iPC9Jr6EdMQMSWKCx4Atu hdAe/8hhHz7aP+EIv62wptwIZ5cPtjqSbCuLsSDHmKpULT/Bd6pHKt+zaJpNhI6A0PtZ UFmhWvdwvgm+OUzPVuT2JY5dew+nllMIScPssijIvb/qKR+WcnzE6CK8IeVWjdmNy9N0 EeM+6sl93uJZedqbQA5LUm+gnRDZOCaQgH81rYKw8cFBtxuFX8djD9IMLhyj9Th7ZIOO /LtA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=Y0ejoD3wixAOiLxvLA0m+MnoPMs3ckD1OyXx4+kMmfk=; b=M3hHrVQBLERsEwPU2NflXj5ptqoIQqrBHQdcW2lY0ygrFC/eBTgxEZ8dVr4qNOIk9d KmFTVQoZkie6Ck2hyJlG5QYGwO+NooGZcDn4qd77Xh/46q5/CvOPHYr82CdtL8Vo3np/ LTwqOJ5yKaxagQJm1nfDE9+KpGVslym+c0TivayBYNoYw2inz+uNSPC3VtPsaGFucqWo 5BPFTmSz7chRnCShbzA7TughhdMRP3ZCzhtdGblBfiX8HUHR08NzSoqajeOqh33rO8ji 2OJFJUZBp62wv0GV3bqstWrNmhQg+qR4Ig/hqhvlATNIsVQzOpfeKlq79h64mAt2RPp2 C7tA== X-Gm-Message-State: ALKqPweB/8cs9N8NUk4cgbHEvMFZ35BfZ/+NY4Qw4uZaGtIp2K/9qO6b RLN9Da/3RLMYuJ8jSPyI1+9Pfg== X-Google-Smtp-Source: AB8JxZpu+8m6Y6h5YUdt9/P1UpwXKK3/jk7MmTMtOxPnhrF9JVjRRa3X5/7YpiyqtNW2SU586YAQ5g== X-Received: by 2002:a62:8ac1:: with SMTP id o62-v6mr2173486pfk.141.1527068764391; Wed, 23 May 2018 02:46:04 -0700 (PDT) Received: from calancha-pc (228.225.128.101.dy.bbexcite.jp. [101.128.225.228]) by smtp.gmail.com with ESMTPSA id w2-v6sm5360139pgq.43.2018.05.23.02.46.02 for <31538@debbugs.gnu.org> (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 23 May 2018 02:46:03 -0700 (PDT) From: Tino Calancha To: 31538@debbugs.gnu.org Subject: Re: bug#31538: 26.1; query-replace undo fails if user edits the replacement string References: <87r2m6wmod.fsf@gmail.com> <87o9hawlfl.fsf@gmail.com> Date: Wed, 23 May 2018 18:46:00 +0900 In-Reply-To: <87o9hawlfl.fsf@gmail.com> (Tino Calancha's message of "Sun, 20 May 2018 21:39:26 +0900") Message-ID: <871se2ogbr.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -1.8 (-) X-Debbugs-Envelope-To: 31538 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.8 (--) Tino Calancha writes: > Tino Calancha writes: > >> M-< >> M-% is RET foo RET SPC E bar RET U >> ;; Just drop 'foo' but keeps 'bar'. > > Update the replacement string after the user has input > the new value. > > commit 5655739cedb02946dd16071a64e51fcab08abf8b > Author: Tino Calancha > Date: Sun May 20 21:32:55 2018 +0900 > > Fix Bug#31538 > > * lisp/replace.el (perform-replace): Update the replacement string > after the user edit it. I want to add a test for this bug. It turned out that tests for `query-replace' undo feature follow same pattern: * Temporary bind `read-event' to a lambda with a `pcase'. * Call `perform-replace' * compare initial input with current buffer. I want to add a macro to create that code and avoid repetition. If no objections, I want to push following patch during the weekend: --8<-----------------------------cut here---------------start------------->8--- commit 95ab9b42c6eaa76e5e1e14cb282eb0c05bc1d57a Author: Tino Calancha Date: Wed May 23 18:37:43 2018 +0900 Fix Bug#31538 * lisp/replace.el (perform-replace): Update the replacement string after the user edit it. * test/lisp/replace-tests.el (replace-tests-clauses): New function. (replace-tests-bind-read-string): New variable. (replace-tests-with-undo): Macro to create boilerplate code. (query-replace-undo-bug31073): Use it. (query-replace-undo-bug31538): New test. diff --git a/lisp/replace.el b/lisp/replace.el index a17dd19b0d..20b868a765 100644 --- a/lisp/replace.el +++ b/lisp/replace.el @@ -2805,7 +2805,8 @@ perform-replace (replace-match-maybe-edit next-replacement nocasify literal noedit real-match-data backward) - replaced t)) + replaced t) + (setq next-replacement-replaced next-replacement)) (setq done t)) ((eq def 'delete-and-edit) diff --git a/test/lisp/replace-tests.el b/test/lisp/replace-tests.el index 40ee838e67..761518dbef 100644 --- a/test/lisp/replace-tests.el +++ b/test/lisp/replace-tests.el @@ -23,6 +23,7 @@ ;;; Code: (require 'ert) +(eval-when-compile (require 'subr-x)) (ert-deftest query-replace--split-string-tests () (let ((sep (propertize "\0" 'separator t))) @@ -358,23 +359,75 @@ replace-occur-test-create (dotimes (i (length replace-occur-tests)) (replace-occur-test-create i)) + +;;; Tests for `query-replace' undo feature. +(defun replace-tests-clauses (char-nums def-chr) + "Build the clauses of the `pcase' in `replace-tests-with-undo'. +CHAR-NUMS is a list of elements (CHAR . NUMS). +CHAR is one of the chars ?, ?\s ?u ?U ?E ?q. +NUMS is a list of integers; they are the patters to match, +while CHAR is the return value. +DEF-CHAR is the default character to return in the `pcase' +when any of the clauses match." + (append + (delq nil + (mapcar (lambda (chr) + (when-let (it (cadr (assq chr char-nums))) + (if (cdr it) + `(,(cons 'or it) ,chr) + `(,(car it) ,chr)))) + '(?, ?\s ?u ?U ?E ?q))) + `((_ ,def-chr)))) + +(defvar replace-tests-bind-read-string nil + "A string to bind `read-string' and avoid the prompt.") + +(defmacro replace-tests-with-undo (input from to char-nums def-chr &rest body) + "Helper to test `query-replace' undo feature. +INPUT is a string to insert in a temporary buffer. +FROM is the string to match for replace. +TO is the replacement string. +CHAR-NUMS is a list of elements (CHAR . NUMS). +CHAR is one of the chars ?, ?\s ?u ?U ?E ?q. +NUMS is a list of integers. +DEF-CHAR is the char ?\s or ?q. +BODY is a list of forms. +Return the last evaled form in BODY." + (declare ((indent 5) (debug (stringp stringp stringp form characterp body)))) + (let ((text (gensym "text")) + (count (gensym "count"))) + `(let* ((,text ,input) + (,count 0) + (inhibit-message t)) + (with-temp-buffer + (insert ,text) + (goto-char 1) + ;; Bind `read-event' to simulate user input. + ;; If `replace-tests-bind-read-string' is non-nil, then + ;; bind `read-string' as well. + (cl-letf (((symbol-function 'read-event) + (lambda (&rest args) + (cl-incf ,count) + (let ((val + (pcase ,count + ,@(replace-tests-clauses char-nums def-chr)))) + val))) + ((symbol-function 'read-string) + (if replace-tests-bind-read-string + (lambda (&rest args) replace-tests-bind-read-string) + (symbol-function 'read-string)))) + (perform-replace ,from ,to t t nil)) + ,@body)))) + (defun replace-tests--query-replace-undo (&optional comma) - (with-temp-buffer - (insert "111") - (goto-char 1) - (let ((count 0)) - ;; Don't wait for user input. - (cl-letf (((symbol-function 'read-event) - (lambda (&rest args) - (cl-incf count) - (let ((val (pcase count - ('2 (if comma ?, ?\s)) ; replace and: ',' no move; '\s' go next - ('3 ?u) ; undo - ('4 ?q) ; exit - (_ ?\s)))) ; replace current and go next - val)))) - (perform-replace "1" "2" t nil nil))) - (buffer-string))) + (let ((input "111")) + (if comma + (should + (replace-tests-with-undo + input "1" "2" ((?, (2)) (?u (3)) (?q (4))) ?\s (buffer-string))) + (should + (replace-tests-with-undo + input "1" "2" ((?\s (2)) (?u (3)) (?q (4))) ?\s (buffer-string)))))) (ert-deftest query-replace--undo () (should (string= "211" (replace-tests--query-replace-undo))) @@ -382,42 +435,28 @@ replace-tests--query-replace-undo (ert-deftest query-replace-undo-bug31073 () "Test for https://debbugs.gnu.org/31073 ." - (let ((text "aaa aaa") - (count 0)) - (with-temp-buffer - (insert text) - (goto-char 1) - (cl-letf (((symbol-function 'read-event) - (lambda (&rest args) - (cl-incf count) - (let ((val (pcase count - ((or 1 2 3) ?\s) ; replace current and go next - (4 ?U) ; undo-all - (_ ?q)))) ; exit - val)))) - (perform-replace "a" "B" t nil nil)) - ;; After undo text must be the same. - (should (string= text (buffer-string)))))) + (let ((input "aaa aaa")) + (should + (replace-tests-with-undo + input "a" "B" ((?\s (1 2 3)) (?U (4))) ?q + (string= input (buffer-string)))))) (ert-deftest query-replace-undo-bug31492 () "Test for https://debbugs.gnu.org/31492 ." - (let ((text "a\nb\nc\n") - (count 0) - (inhibit-message t)) - (with-temp-buffer - (insert text) - (goto-char 1) - (cl-letf (((symbol-function 'read-event) - (lambda (&rest args) - (cl-incf count) - (let ((val (pcase count - ((or 1 2) ?\s) ; replace current and go next - (3 ?U) ; undo-all - (_ ?q)))) ; exit - val)))) - (perform-replace "^\\|\b\\|$" "foo" t t nil)) - ;; After undo text must be the same. - (should (string= text (buffer-string)))))) + (let ((input "a\nb\nc\n")) + (should + (replace-tests-with-undo + input "^\\|\b\\|$" "foo" ((?\s (1 2)) (?U (3))) ?q + (string= input (buffer-string)))))) + +(ert-deftest query-replace-undo-bug31538 () + "Test for https://debbugs.gnu.org/31538 ." + (let ((input "aaa aaa") + (replace-tests-bind-read-string "Bfoo")) + (should + (replace-tests-with-undo + input "a" "B" ((?\s (1 2 3)) (?E (4)) (?U (5))) ?q + (string= input (buffer-string)))))) ;;; replace-tests.el ends here --8<-----------------------------cut here---------------end--------------->8--- In GNU Emacs 27.0.50 (build 38, x86_64-pc-linux-gnu, GTK+ Version 3.22.11) of 2018-05-23 built on calancha-pc Repository revision: bab73230d1be1fe394b7269c1365ef6fb1a5d9b3 From debbugs-submit-bounces@debbugs.gnu.org Fri May 25 22:36:09 2018 Received: (at 31538-done) by debbugs.gnu.org; 26 May 2018 02:36:09 +0000 Received: from localhost ([127.0.0.1]:48889 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fMP3x-0006Po-Eu for submit@debbugs.gnu.org; Fri, 25 May 2018 22:36:09 -0400 Received: from mail-pf0-f172.google.com ([209.85.192.172]:36616) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fMP3v-0006PN-4D for 31538-done@debbugs.gnu.org; Fri, 25 May 2018 22:36:07 -0400 Received: by mail-pf0-f172.google.com with SMTP id w129-v6so3382857pfd.3 for <31538-done@debbugs.gnu.org>; Fri, 25 May 2018 19:36:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:references:date:in-reply-to:message-id:user-agent :mime-version; bh=AOl9fHJAcizOsFwecGW4I2dkwc7ZGHdxvbeY7wayDiw=; b=CZr4a4gVFq5ZDtJbLEYLe54vLIFjTzle8C4Ae4RmZHXfWXdZy9E2gifZb4hM2C6vpB RZSMGqPSq+vQ0z/f7L6YGTaNauO+iGUZp69C3nqhMz4bBggNuXyE2UYv1rRCJVmFQfc6 fSL94PhpVbu3oxiV+zOeFRHd1btBv9Btmw74AEqn0YK1jEKl7WYTy4lxYE/aXLfEpo6t WPVldQnQrSO2EBx4t2cbnXJqwid1Y/CqstGy0iD0Do+YCAFFZgQVcEHTRSCpFGE1IvRw 6COuRB+UFP/DUA44lLemJs7RDgAhlW8kmQVjwt//AD6XcKs4oquRjo1YVJVzyP3w7BDm 0cvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=AOl9fHJAcizOsFwecGW4I2dkwc7ZGHdxvbeY7wayDiw=; b=gaxrN24TTRao/G0AG6ISO50Sq+qropljAxOJ+HKVnBT5DsY3OZo/K0gkR7sqnSKIDB AUZNgtcgkAUrRj+2FDwZoF+lAEAueYVKyYh7EMYxbQ7yFxYy7D5KhIQOJnqqpYoT04ry EKHf3WCCtLauPticG1PWEXJD3Xfc0+ZTvvFPsY4Rjm5sKeBkklW/sDx8Np4rSqnLkg2u 7oAHjCbR//+XOIwXBDU18ehdE4NWIpsddOFkzVsKzVttSGADVSPv0JQv0isS31NrD4Kq BZnOh0AXMHpfD+NlT3ezg6882xmIoJ+OR6IugPpZZAjFQMN7OKRzPJjIBYsUULocIhOK wRVQ== X-Gm-Message-State: ALKqPwcT8PJWFeGjyCICDNMmLLIYLoE7yQ9i7WJKGQ4TrHUIYJhbR3TK SzcU2o5AjJkmFlft0ZpeIPUK+g== X-Google-Smtp-Source: AB8JxZpR+ydcgs7QH5oHs5q03RTBrdlcIFv98OEhKCh7/Byh8mTfRglMsUUxEDp8xNVP1Yb9pcUHhg== X-Received: by 2002:a63:7c04:: with SMTP id x4-v6mr3751430pgc.67.1527302160762; Fri, 25 May 2018 19:36:00 -0700 (PDT) Received: from calancha-pc (228.225.128.101.dy.bbexcite.jp. [101.128.225.228]) by smtp.gmail.com with ESMTPSA id v16-v6sm77763377pfk.164.2018.05.25.19.35.58 for <31538-done@debbugs.gnu.org> (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 25 May 2018 19:35:59 -0700 (PDT) From: Tino Calancha To: 31538-done@debbugs.gnu.org Subject: Re: bug#31538: 26.1; query-replace undo fails if user edits the replacement string References: <87r2m6wmod.fsf@gmail.com> <87o9hawlfl.fsf@gmail.com> <871se2ogbr.fsf@gmail.com> Date: Sat, 26 May 2018 11:35:51 +0900 In-Reply-To: <871se2ogbr.fsf@gmail.com> (Tino Calancha's message of "Wed, 23 May 2018 18:46:00 +0900") Message-ID: <87tvqvta7s.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -1.8 (-) X-Debbugs-Envelope-To: 31538-done X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.8 (--) Tino Calancha writes: > Tino Calancha writes: > >> Tino Calancha writes: >> >>> M-< >>> M-% is RET foo RET SPC E bar RET U >>> ;; Just drop 'foo' but keeps 'bar'. >> >> Update the replacement string after the user has input >> the new value. > If no objections, I want to push following patch during the weekend: Pushed fix into master branch as commit 'query-replace undo: Handle when user edits the replacement string' (ea133e04f49afa7928e49a3ac4a85b47f6f13f01) From unknown Sat Aug 16 12:44:41 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Sat, 23 Jun 2018 11:24:05 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator