From unknown Fri Sep 12 09:56:12 2025 X-Loop: help-debbugs@gnu.org Subject: bug#14979: 24.3; Feature Request: query-replace-backward Resent-From: Ben A. Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 29 Jul 2013 06:32:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 14979 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: 14979@debbugs.gnu.org X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.137507946727328 (code B ref -1); Mon, 29 Jul 2013 06:32:01 +0000 Received: (at submit) by debbugs.gnu.org; 29 Jul 2013 06:31:07 +0000 Received: from localhost ([127.0.0.1]:55418 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1V3gz3-00076g-T6 for submit@debbugs.gnu.org; Mon, 29 Jul 2013 02:31:06 -0400 Received: from eggs.gnu.org ([208.118.235.92]:42816) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1V3duX-0005bt-45 for submit@debbugs.gnu.org; Sun, 28 Jul 2013 23:14:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1V3duI-00018m-A0 for submit@debbugs.gnu.org; Sun, 28 Jul 2013 23:14:07 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-99.2 required=5.0 tests=BAYES_50,FREEMAIL_FROM, USER_IN_WHITELIST autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:58562) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V3duI-00018i-7i for submit@debbugs.gnu.org; Sun, 28 Jul 2013 23:13:58 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44497) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V3duA-0008QJ-In for bug-gnu-emacs@gnu.org; Sun, 28 Jul 2013 23:13:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1V3du2-00014F-J3 for bug-gnu-emacs@gnu.org; Sun, 28 Jul 2013 23:13:50 -0400 Received: from mout.gmx.net ([74.208.4.200]:59828) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V3du2-00013v-Ds for bug-gnu-emacs@gnu.org; Sun, 28 Jul 2013 23:13:42 -0400 Received: from ThinkPad-W520.localdomain ([24.184.99.33]) by mail.gmx.com (mrgmxus001) with ESMTPSA (Nemesis) id 0MXqqX-1UXxrP0wtz-00Wr9G for ; Mon, 29 Jul 2013 05:13:40 +0200 From: Ben A. User-Agent: Notmuch/0.15.2 (http://notmuchmail.org) Emacs/24.3.1 (x86_64-pc-linux-gnu) Date: Sun, 28 Jul 2013 23:10:25 -0400 Message-ID: <87mwp612ou.fsf@ThinkPad-W520.localdomain> MIME-Version: 1.0 Content-Type: text/plain X-Provags-ID: V03:K0:SRRPFKREeb3q8CE9YY/M9/0OVUJwkXBRAOQo2JrR1E4L7xPBzQA weZcKboKOE9La43/7zeLtIDW+bNO0zURGCr3W6KTnSpGDl7sCxMS9o6idtXFFGzXPPaXXdd lyBnZN+Gn08uGU952FVOWQRPVBQM9TVmXIXSXkIOUyzsKvTCMk/8vw7Nl2G94CKqyj4AI69 zp1eWQxy2tALgZCvhlmTg== X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.4.x-2.6.x [generic] X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -3.4 (---) X-Mailman-Approved-At: Mon, 29 Jul 2013 02:31:04 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 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: -3.4 (---) Hi, A feature request: I often make use of query-replace and query-replace-regexp. It would be useful to have a query-replace-backward and a query-replace-regexp-backward. The backward variant would be executed when the forward variant is given a negative argument. Much Appreciation, Ben From unknown Fri Sep 12 09:56:12 2025 X-Loop: help-debbugs@gnu.org Subject: bug#14979: 24.3; Feature Request: query-replace-backward Resent-From: Jambunathan K Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 29 Jul 2013 07:12:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 14979 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Ben A. Cc: 14979@debbugs.gnu.org Received: via spool by 14979-submit@debbugs.gnu.org id=B14979.13750818724891 (code B ref 14979); Mon, 29 Jul 2013 07:12:02 +0000 Received: (at 14979) by debbugs.gnu.org; 29 Jul 2013 07:11:12 +0000 Received: from localhost ([127.0.0.1]:55435 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1V3hbq-0001Go-Rm for submit@debbugs.gnu.org; Mon, 29 Jul 2013 03:11:11 -0400 Received: from mail-pd0-f178.google.com ([209.85.192.178]:40050) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1V3hbn-0001FY-DJ for 14979@debbugs.gnu.org; Mon, 29 Jul 2013 03:11:08 -0400 Received: by mail-pd0-f178.google.com with SMTP id w10so2255582pde.37 for <14979@debbugs.gnu.org>; Mon, 29 Jul 2013 00:11:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-type; bh=EbquGOB+seSY10wQTiBYIqH5R5VXM19Uz/L17YW7Puw=; b=XaHCmYmRAOvP8itQyLIKnMmuIIkyUV7KMzl3x2tVainDR3q1u4mk1P9uzt8ckG/TKy yw3Z70z9YXivK5AF4Ky5iRTlJYER4drnvpyNKP6wYTlIvh21rZHeg/AoAsOK4PBmEQVo n0zeBgzz4TCpH4ooMTnJIPxmdd6lHBFYZFpL9eV886ckgUjeR6QsnbHtkoIef53WzXBQ PBfwpcIw1xOMeno16JsVHXHID+J7MitMaLMHrO1zzi5weeEWsxeOHQOFCyOfNYAkByn7 27/r0bUfTf4NZz0xWd2kW9htPMjniGxMhNIUScW1aj+YyqXoyR6h6fPe5eaXvQzaOVrI uXCA== X-Received: by 10.66.121.131 with SMTP id lk3mr68152031pab.43.1375081861011; Mon, 29 Jul 2013 00:11:01 -0700 (PDT) Received: from debian-6.05 ([115.244.235.240]) by mx.google.com with ESMTPSA id x8sm75162571pbb.39.2013.07.29.00.10.58 for (version=TLSv1.1 cipher=RC4-SHA bits=128/128); Mon, 29 Jul 2013 00:11:00 -0700 (PDT) From: Jambunathan K References: <87mwp612ou.fsf@ThinkPad-W520.localdomain> Date: Mon, 29 Jul 2013 12:42:49 +0530 In-Reply-To: <87mwp612ou.fsf@ThinkPad-W520.localdomain> (Ben A.'s message of "Sun, 28 Jul 2013 23:10:25 -0400") Message-ID: <87y58pg7pq.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 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: 0.0 (/) Ben A. writes: > Hi, > > A feature request: I often make use of query-replace and > query-replace-regexp. It would be useful to have a > query-replace-backward and a query-replace-regexp-backward. The > backward variant would be executed when the forward variant is given a > negative argument. One way of achieving this with the existing scheme of things is: 1. M-< 2. C-x n n 3. C-M-% 4. M-> 6. C-x n w Narrow from beginning of buffer (or a defun or wherever) to point, do replacement and widen. (I think) forward searches are more efficient than backward searches through the buffer. May I know what is your specific usage scenario? Are you editing a text file or a program source? Why is that you want only backward replacements and STRICTLY AVOID forward replacements. > > Much Appreciation, > Ben From unknown Fri Sep 12 09:56:12 2025 X-Loop: help-debbugs@gnu.org Subject: bug#14979: 24.3; Feature Request: query-replace-backward Resent-From: Jambunathan K Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 29 Jul 2013 07:15:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 14979 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Ben A. Cc: 14979@debbugs.gnu.org Received: via spool by 14979-submit@debbugs.gnu.org id=B14979.13750820665686 (code B ref 14979); Mon, 29 Jul 2013 07:15:02 +0000 Received: (at 14979) by debbugs.gnu.org; 29 Jul 2013 07:14:26 +0000 Received: from localhost ([127.0.0.1]:55451 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1V3hey-0001Ta-DE for submit@debbugs.gnu.org; Mon, 29 Jul 2013 03:14:25 -0400 Received: from mail-pb0-f44.google.com ([209.85.160.44]:49893) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1V3heu-0001St-Ol for 14979@debbugs.gnu.org; Mon, 29 Jul 2013 03:14:21 -0400 Received: by mail-pb0-f44.google.com with SMTP id wy7so4278123pbc.31 for <14979@debbugs.gnu.org>; Mon, 29 Jul 2013 00:14:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-type; bh=Ic6wL2aVVd7GTOi737giEuP9V1JMpmdRaX91F4u54Mk=; b=rJsbeeRl6XpjGq4sF+dBSTUD2CI7Y5AZ9uJja90zi0TdiiGKgqWlIW5Q7c4Bv/7Sw5 IsNCOa5DK1ZF4dH9Peq1tYMLTqvZr+Q6qCBgfMf2Z3npyG6TQPrsEIhOGqbzA5yQ+xYt 8cJb8aid9NEguXenw4UNb3iroxtetDNSDLHnNM5ZI3gYGSSJJIbG0Hfx5bnpzEXiUgP0 XTdASrTwZ4dJLX6KrxG8z7Q3RvV8GDrl8aJcqSTIlnEPiU6xZDZWXq2BYIEzJQCFIAxR 2vZD6XH0CBPoeLMEkXtKUfl0WVP8EyCvjFxMr4Ct/yvG0adv8hQwHvYqSn60JftPI1g3 4FFA== X-Received: by 10.66.7.104 with SMTP id i8mr59504724paa.130.1375082054903; Mon, 29 Jul 2013 00:14:14 -0700 (PDT) Received: from debian-6.05 ([115.244.235.240]) by mx.google.com with ESMTPSA id fa5sm34350729pbb.3.2013.07.29.00.14.12 for (version=TLSv1.1 cipher=RC4-SHA bits=128/128); Mon, 29 Jul 2013 00:14:14 -0700 (PDT) From: Jambunathan K References: <87mwp612ou.fsf@ThinkPad-W520.localdomain> <87y58pg7pq.fsf@gmail.com> Date: Mon, 29 Jul 2013 12:46:03 +0530 In-Reply-To: <87y58pg7pq.fsf@gmail.com> (Jambunathan K.'s message of "Mon, 29 Jul 2013 12:42:49 +0530") Message-ID: <87txjdg7kc.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 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: -0.7 (/) Jambunathan K writes: > 1. M-< > 2. C-x n n > 3. C-M-% > 4. M-> > 6. C-x n w Forgot step 0, 0. C-SPC From unknown Fri Sep 12 09:56:12 2025 X-Loop: help-debbugs@gnu.org Subject: bug#14979: 24.3; Feature Request: query-replace-backward Resent-From: Juri Linkov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 29 Jul 2013 08:31:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 14979 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Jambunathan K Cc: "Ben A." , 14979@debbugs.gnu.org Received: via spool by 14979-submit@debbugs.gnu.org id=B14979.137508661525786 (code B ref 14979); Mon, 29 Jul 2013 08:31:02 +0000 Received: (at 14979) by debbugs.gnu.org; 29 Jul 2013 08:30:15 +0000 Received: from localhost ([127.0.0.1]:55528 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1V3iqM-0006ho-IQ for submit@debbugs.gnu.org; Mon, 29 Jul 2013 04:30:14 -0400 Received: from ps18281.dreamhost.com ([69.163.218.105]:46044 helo=ps18281.dreamhostps.com) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1V3iqA-0006g0-JF for 14979@debbugs.gnu.org; Mon, 29 Jul 2013 04:30:06 -0400 Received: from localhost (ps18281.dreamhostps.com [69.163.218.105]) by ps18281.dreamhostps.com (Postfix) with ESMTP id 981F9258B9E91C; Mon, 29 Jul 2013 01:29:59 -0700 (PDT) From: Juri Linkov Organization: JURTA References: <87mwp612ou.fsf@ThinkPad-W520.localdomain> <87y58pg7pq.fsf@gmail.com> <87txjdg7kc.fsf@gmail.com> Date: Mon, 29 Jul 2013 11:22:47 +0300 In-Reply-To: <87txjdg7kc.fsf@gmail.com> (Jambunathan K.'s message of "Mon, 29 Jul 2013 12:46:03 +0530") Message-ID: <87wqo922so.fsf@mail.jurta.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: 0.3 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 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: 0.3 (/) --=-=-= Content-Type: text/plain >> 1. M-< >> 2. C-x n n >> 3. C-M-% >> 4. M-> >> 6. C-x n w > > Forgot step 0, > > 0. C-SPC What you described is a feature known in other editors as "Current selection only". In Emacs you don't need to use `C-x n n' and `C-x n w' because `query-replace' limits the search to the selected region without the need to narrow it. However, other editors also provide another feature to replace backwards like you can see in e.g. OpenOffice etc. --=-=-= Content-Type: image/png Content-Disposition: inline; filename=query-replace.png Content-Transfer-Encoding: base64 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 QmCC --=-=-= Content-Type: text/plain So this is not a baseless wish to have the same in Emacs. With the recent introduction of `replace-search' in replace.el it's straightforward to implement this in Emacs where `(isearch-forward t)' in `replace-search' could be replaced with `(isearch-forward replace-forward)' where `replace-forward' is a new option that can be changed in `isearch-query-replace' according to the current value of `isearch-forward'. The benefits of this feature is that it will replace exactly the same matches that are lazy-highlighted and visited by the backward isearch. --=-=-=-- From unknown Fri Sep 12 09:56:12 2025 X-Loop: help-debbugs@gnu.org Subject: bug#14979: 24.3; Feature Request: query-replace-backward Resent-From: Jambunathan K Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 29 Jul 2013 08:46:09 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 14979 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Juri Linkov Cc: "Ben A." , 14979@debbugs.gnu.org Received: via spool by 14979-submit@debbugs.gnu.org id=B14979.137508752931036 (code B ref 14979); Mon, 29 Jul 2013 08:46:09 +0000 Received: (at 14979) by debbugs.gnu.org; 29 Jul 2013 08:45:29 +0000 Received: from localhost ([127.0.0.1]:55538 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1V3j56-00084Q-TC for submit@debbugs.gnu.org; Mon, 29 Jul 2013 04:45:29 -0400 Received: from mail-pb0-f44.google.com ([209.85.160.44]:52017) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1V3j50-00083Q-2Y for 14979@debbugs.gnu.org; Mon, 29 Jul 2013 04:45:22 -0400 Received: by mail-pb0-f44.google.com with SMTP id wy7so4371648pbc.3 for <14979@debbugs.gnu.org>; Mon, 29 Jul 2013 01:45:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-type; bh=JXV1dzMcuSwUml8J1Umj+obvV1lbNAcWMUOnB+QbBpk=; b=uD4iNOlIiXX09L5lSpf80qizc5/L9LyhKhJHmRqH6ZnoK9l0iO21lyfUtIoXvg1kTy DUkDUIeFmHYkZwn+mAbt5bjjyvoXvBWn+x965LwTT8Ml6sDPN9p5DeJ+C63u+fcujjbd DxmJyoYhzqE8IOoHEg4klkhfwnshFKYRi549bCXm5o3AF0/bfSTqHMIoTGFLyh5M8oJK 6WPdSVVy+hzV6/AbSXeQzogeDKe7yywyXQsZqQIsry8IbY1XicjL+gadsre3ZdhBgSt+ txK6IDVuNrYyL6UyKqHHIUjzEzJGxXp6X4PQ2DPkB0/SQv2C1c4d0o3wY+g4FmF984Gj /MTQ== X-Received: by 10.68.172.34 with SMTP id az2mr65811076pbc.201.1375087516001; Mon, 29 Jul 2013 01:45:16 -0700 (PDT) Received: from debian-6.05 ([115.244.235.240]) by mx.google.com with ESMTPSA id sp4sm75605763pbc.45.2013.07.29.01.45.12 for (version=TLSv1.1 cipher=RC4-SHA bits=128/128); Mon, 29 Jul 2013 01:45:15 -0700 (PDT) From: Jambunathan K References: <87mwp612ou.fsf@ThinkPad-W520.localdomain> <87y58pg7pq.fsf@gmail.com> <87txjdg7kc.fsf@gmail.com> <87wqo922so.fsf@mail.jurta.org> Date: Mon, 29 Jul 2013 14:17:03 +0530 In-Reply-To: <87wqo922so.fsf@mail.jurta.org> (Juri Linkov's message of "Mon, 29 Jul 2013 11:22:47 +0300") Message-ID: <87ppu1g3co.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 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: -0.7 (/) Juri Linkov writes: > because `query-replace' limits the search to the selected region > without the need to narrow it. My bad. I use it all the time. It is almost a second nature by now that it requires some effort to remember it. From unknown Fri Sep 12 09:56:12 2025 X-Loop: help-debbugs@gnu.org Subject: bug#14979: 24.3; Feature Request: query-replace-backward Resent-From: Juri Linkov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 29 Jul 2013 21:06:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 14979 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Jambunathan K Cc: "Ben A." , 14979@debbugs.gnu.org Received: via spool by 14979-submit@debbugs.gnu.org id=B14979.13751319271951 (code B ref 14979); Mon, 29 Jul 2013 21:06:02 +0000 Received: (at 14979) by debbugs.gnu.org; 29 Jul 2013 21:05:27 +0000 Received: from localhost ([127.0.0.1]:56711 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1V3udC-0000VP-Uq for submit@debbugs.gnu.org; Mon, 29 Jul 2013 17:05:27 -0400 Received: from ps18281.dreamhost.com ([69.163.218.105]:56185 helo=ps18281.dreamhostps.com) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1V3udA-0000VC-DQ for 14979@debbugs.gnu.org; Mon, 29 Jul 2013 17:05:25 -0400 Received: from localhost (ps18281.dreamhostps.com [69.163.218.105]) by ps18281.dreamhostps.com (Postfix) with ESMTP id 147BB258B9E915; Mon, 29 Jul 2013 14:05:20 -0700 (PDT) From: Juri Linkov Organization: JURTA References: <87mwp612ou.fsf@ThinkPad-W520.localdomain> <87y58pg7pq.fsf@gmail.com> <87txjdg7kc.fsf@gmail.com> <87wqo922so.fsf@mail.jurta.org> Date: Tue, 30 Jul 2013 00:02:55 +0300 In-Reply-To: <87wqo922so.fsf@mail.jurta.org> (Juri Linkov's message of "Mon, 29 Jul 2013 11:22:47 +0300") Message-ID: <87a9l5yt8g.fsf@mail.jurta.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 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: 0.0 (/) > it's straightforward to implement this in Emacs where > `(isearch-forward t)' in `replace-search' could be replaced > with `(isearch-forward replace-forward)' where `replace-forward' > is a new option that can be changed in `isearch-query-replace' > according to the current value of `isearch-forward'. Actually using the value of `isearch-forward' to make decision about the direction of replacements is not good because often `C-r' is used to find the uppermost match from which to run forward replacements. Maybe it would help if after the last replacement `query-replace' asked whether to wrap and continue replacements from the beginning of the buffer. Then no matches will be missed when `query-replace' happens to be started in the middle of the buffer. From unknown Fri Sep 12 09:56:12 2025 X-Loop: help-debbugs@gnu.org Subject: bug#14979: 24.3; Feature Request: query-replace-backward Resent-From: ben.a@gmx.us Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 30 Jul 2013 20:10:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 14979 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Juri Linkov , Jambunathan K Cc: 14979@debbugs.gnu.org Received: via spool by 14979-submit@debbugs.gnu.org id=B14979.137521498513934 (code B ref 14979); Tue, 30 Jul 2013 20:10:02 +0000 Received: (at 14979) by debbugs.gnu.org; 30 Jul 2013 20:09:45 +0000 Received: from localhost ([127.0.0.1]:58999 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1V4GEr-0003cg-Bz for submit@debbugs.gnu.org; Tue, 30 Jul 2013 16:09:45 -0400 Received: from mout.gmx.net ([74.208.4.201]:62051) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1V4GEp-0003cO-2o for 14979@debbugs.gnu.org; Tue, 30 Jul 2013 16:09:44 -0400 Received: from ThinkPad-W520.localdomain ([24.184.99.33]) by mail.gmx.com (mrgmxus002) with ESMTPSA (Nemesis) id 0Lz47y-1U0UM33cMS-014GWy for <14979@debbugs.gnu.org>; Tue, 30 Jul 2013 22:09:36 +0200 From: ben.a@gmx.us In-Reply-To: <87a9l5yt8g.fsf@mail.jurta.org> References: <87mwp612ou.fsf@ThinkPad-W520.localdomain> <87y58pg7pq.fsf@gmail.com> <87txjdg7kc.fsf@gmail.com> <87wqo922so.fsf@mail.jurta.org> <87a9l5yt8g.fsf@mail.jurta.org> User-Agent: Notmuch/0.15.2 (http://notmuchmail.org) Emacs/24.3.1 (x86_64-pc-linux-gnu) Date: Tue, 30 Jul 2013 16:09:26 -0400 Message-ID: <871u6fzu6h.fsf@ThinkPad-W520.localdomain> MIME-Version: 1.0 Content-Type: text/plain X-Provags-ID: V03:K0:6K9NWMudtHKJhD4PXPYY24M/bUtmWoRpnbNixZndO7hKDPKktxf sI/Ftcamyw0WfOHJG2uPzZcZjp0xabW2yCVZBBnJ3qIupu0QNlH7FGr88cUSMjPiHSzEvqg MV2klX1i/ku7uOO+L+oSoqNqtcBMYbQj/4VWxvkJgbzK+DPpD5l6PFuFt6F1zdKMZnzkQJL TYG+hTHZ+PQ4040LxeJgw== X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 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: 0.0 (/) Thanks for your interest in my bug report. The use case I had in mind was changing a couple of instances of a word backwards from the point. Typing M-- C-M-% is fewer keystrokes than pressing C-r a few times then C-M-%. It is also fewer keystrokes than setting the mark, then moving through the document to find a proper starting point and finally pressing C-M-%. The best solution would be if the functions query-replace and query-replace-regexp are changed so that they step backwards when receiving a negative argument. I have come across the website freedomsponsors.org and thought it would be an interesting experiment to put a prize on fixing this bug. If anyone is interested in working on this please visit http://www.freedomsponsors.org/core/issue/309/243-feature-request-query-replace-backward Ben From unknown Fri Sep 12 09:56:12 2025 X-Loop: help-debbugs@gnu.org Subject: bug#14979: 24.3; Feature Request: query-replace-backward Resent-From: Juri Linkov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 01 Aug 2013 21:18:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 14979 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: ben.a@gmx.us Cc: Jambunathan K , 14979@debbugs.gnu.org Received: via spool by 14979-submit@debbugs.gnu.org id=B14979.137539187720373 (code B ref 14979); Thu, 01 Aug 2013 21:18:01 +0000 Received: (at 14979) by debbugs.gnu.org; 1 Aug 2013 21:17:57 +0000 Received: from localhost ([127.0.0.1]:35101 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1V50Fw-0005IU-DJ for submit@debbugs.gnu.org; Thu, 01 Aug 2013 17:17:56 -0400 Received: from ps18281.dreamhost.com ([69.163.218.105]:57636 helo=ps18281.dreamhostps.com) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1V50Ft-0005I7-Ps for 14979@debbugs.gnu.org; Thu, 01 Aug 2013 17:17:54 -0400 Received: from localhost (ps18281.dreamhostps.com [69.163.218.105]) by ps18281.dreamhostps.com (Postfix) with ESMTP id 89A03258B9E915; Thu, 1 Aug 2013 14:17:45 -0700 (PDT) From: Juri Linkov Organization: JURTA References: <87mwp612ou.fsf@ThinkPad-W520.localdomain> <87y58pg7pq.fsf@gmail.com> <87txjdg7kc.fsf@gmail.com> <87wqo922so.fsf@mail.jurta.org> <87a9l5yt8g.fsf@mail.jurta.org> <871u6fzu6h.fsf@ThinkPad-W520.localdomain> Date: Fri, 02 Aug 2013 00:13:06 +0300 In-Reply-To: <871u6fzu6h.fsf@ThinkPad-W520.localdomain> (ben a.'s message of "Tue, 30 Jul 2013 16:09:26 -0400") Message-ID: <87ob9hyvhx.fsf@mail.jurta.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 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: 0.0 (/) > Thanks for your interest in my bug report. The use case I had in mind > was changing a couple of instances of a word backwards from the point. > Typing M-- C-M-% is fewer keystrokes than pressing C-r a few times then > C-M-%. It is also fewer keystrokes than setting the mark, then moving > through the document to find a proper starting point and finally pressing > C-M-%. > > The best solution would be if the functions query-replace and > query-replace-regexp are changed so that they step backwards when > receiving a negative argument. One unclear point: you said that you want to replace words backwards. Currently a numeric argument or C-u means to replace words forwards (delimited by word boundary characters). If a negative argument will mean normal non-word replacement backwards, then what a prefix should mean word replacement backwards? To summarize the question: no prefix M-% - normal non-word replacement forwards C-u M-% - word replacement forwards M-- M-% (negative argument) - normal non-word replacement backwards ??? - word replacement backwards The same question for regexp replacements: no prefix C-M-% - regexp replacement forwards C-u C-M-% - word replacement forwards M-- C-M-% (negative argument) - regexp replacement backwards ??? - word replacement backwards > I have come across the website freedomsponsors.org and thought it would > be an interesting experiment to put a prize on fixing this bug. Thank you. It would be nice if your example will encourage more people to donate money to more difficult tasks in Emacs development. As I can see freedomsponsors.org is a very promising site since it supports donations to the development of free software. This is in stark contrast with freelance sites where customers pay money for developing highly custom Emacs packages that are useless for most users. From unknown Fri Sep 12 09:56:12 2025 X-Loop: help-debbugs@gnu.org Subject: bug#14979: 24.3; Feature Request: query-replace-backward Resent-From: Ben A. Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 03 Aug 2013 20:46:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 14979 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Juri Linkov Cc: Jambunathan K , 14979@debbugs.gnu.org Received: via spool by 14979-submit@debbugs.gnu.org id=B14979.137556272322873 (code B ref 14979); Sat, 03 Aug 2013 20:46:01 +0000 Received: (at 14979) by debbugs.gnu.org; 3 Aug 2013 20:45:23 +0000 Received: from localhost ([127.0.0.1]:38553 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1V5ihX-0005wr-BU for submit@debbugs.gnu.org; Sat, 03 Aug 2013 16:45:23 -0400 Received: from mout.gmx.net ([74.208.4.201]:58893) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1V5ihU-0005wd-N2 for 14979@debbugs.gnu.org; Sat, 03 Aug 2013 16:45:21 -0400 Received: from ThinkPad-W520.localdomain ([24.184.99.33]) by mail.gmx.com (mrgmxus001) with ESMTPSA (Nemesis) id 0LkxPv-1UVHsy0cGD-00alsd for <14979@debbugs.gnu.org>; Sat, 03 Aug 2013 22:45:14 +0200 From: Ben A. In-Reply-To: <87ob9hyvhx.fsf@mail.jurta.org> References: <87mwp612ou.fsf@ThinkPad-W520.localdomain> <87y58pg7pq.fsf@gmail.com> <87txjdg7kc.fsf@gmail.com> <87wqo922so.fsf@mail.jurta.org> <87a9l5yt8g.fsf@mail.jurta.org> <871u6fzu6h.fsf@ThinkPad-W520.localdomain> <87ob9hyvhx.fsf@mail.jurta.org> User-Agent: Notmuch/0.15.2 (http://notmuchmail.org) Emacs/24.3.1 (x86_64-pc-linux-gnu) Date: Sat, 03 Aug 2013 16:44:40 -0400 Message-ID: <87siyq8pxj.fsf@ThinkPad-W520.localdomain> MIME-Version: 1.0 Content-Type: text/plain X-Provags-ID: V03:K0:oOEPFnj4eXXPw1G4hXeE0N8djo4tp4gYNDWN2th7XYOSGEQy3x1 XTjsacYdJfxJO2FZBQiph0Vtjbu2T9Fl4uBHZKxj0xABIf4ltnI/nuZlmhFrMm5M4jVkYw3 gu46u2T4IbpT30UPTsRxkTxVVIPmV8IZzBnb5WD9/l7uFepVYgiQVYDy3dZxu4PBWrvZojH VGsy/8L6lMYjhjdbRuI4Q== X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 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: 0.0 (/) Juri Linkov writes: > One unclear point: you said that you want to replace words backwards. > Currently a numeric argument or C-u means to replace words forwards > (delimited by word boundary characters). If a negative argument > will mean normal non-word replacement backwards, then what a prefix > should mean word replacement backwards? To summarize the question: > > no prefix M-% - normal non-word replacement forwards > C-u M-% - word replacement forwards > M-- M-% (negative argument) - normal non-word replacement backwards > ??? - word replacement backwards > A possibility might be: no prefix M-% - normal non-word replacement forwards C-u M-% - word replacement forwards M-0 M-% - normal non-word replacement backwards M-- M-% - word replacement backwards this is somewhat analogous to the behavior of kill-line. Ben From unknown Fri Sep 12 09:56:12 2025 X-Loop: help-debbugs@gnu.org Subject: bug#14979: 24.3; Feature Request: query-replace-backward Resent-From: Drew Adams Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 03 Aug 2013 21:25:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 14979 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: "Ben A." , Juri Linkov Cc: Jambunathan K , 14979@debbugs.gnu.org Received: via spool by 14979-submit@debbugs.gnu.org id=B14979.137556509027371 (code B ref 14979); Sat, 03 Aug 2013 21:25:02 +0000 Received: (at 14979) by debbugs.gnu.org; 3 Aug 2013 21:24:50 +0000 Received: from localhost ([127.0.0.1]:38600 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1V5jJh-00077O-NF for submit@debbugs.gnu.org; Sat, 03 Aug 2013 17:24:50 -0400 Received: from userp1040.oracle.com ([156.151.31.81]:39547) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1V5jJf-00077A-G4 for 14979@debbugs.gnu.org; Sat, 03 Aug 2013 17:24:47 -0400 Received: from acsinet22.oracle.com (acsinet22.oracle.com [141.146.126.238]) by userp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r73LOeGj021034 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Sat, 3 Aug 2013 21:24:40 GMT Received: from userz7021.oracle.com (userz7021.oracle.com [156.151.31.85]) by acsinet22.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r73LObXK022978 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Sat, 3 Aug 2013 21:24:39 GMT Received: from abhmt115.oracle.com (abhmt115.oracle.com [141.146.116.67]) by userz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r73LOb8o026234; Sat, 3 Aug 2013 21:24:37 GMT MIME-Version: 1.0 Message-ID: <5819bbc4-bf73-47a3-92e5-e4f7fde0cf55@default> Date: Sat, 3 Aug 2013 14:24:35 -0700 (PDT) From: Drew Adams References: <87mwp612ou.fsf@ThinkPad-W520.localdomain> <87y58pg7pq.fsf@gmail.com> <87txjdg7kc.fsf@gmail.com> <87wqo922so.fsf@mail.jurta.org> <87a9l5yt8g.fsf@mail.jurta.org> <871u6fzu6h.fsf@ThinkPad-W520.localdomain> <87ob9hyvhx.fsf@mail.jurta.org> <87siyq8pxj.fsf@ThinkPad-W520.localdomain> In-Reply-To: <87siyq8pxj.fsf@ThinkPad-W520.localdomain> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.8 (707110) [OL 12.0.6668.5000 (x86)] Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable X-Source-IP: acsinet22.oracle.com [141.146.126.238] X-Spam-Score: -3.8 (---) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 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: -3.8 (---) > > no prefix M-% - normal non-word replacement forwards > > C-u M-% - word replacement forwards > > M-- M-% (negative argument) - normal non-word replacement backwards > > ??? - word replacement backwards >=20 > no prefix M-% - normal non-word replacement forwards > C-u M-% - word replacement forwards > M-0 M-% - normal non-word replacement backwards > M-- M-% - word replacement backwards I vote against using a prefix arg for anything like this. There are better things to use a prefix arg for. Instead, either choose a different key altogether for backward q-r or do not bind a key for it at all. Just one opinion. FWIW, I bind `M-%' to a command that rolls together these q-r behaviors: * No prefix arg: string q-r (like vanilla `query-replace') * Negative prefix arg: regexp q-r * Non-negative prefix arg: word q-r (like vanilla `query-replace') From unknown Fri Sep 12 09:56:12 2025 X-Loop: help-debbugs@gnu.org Subject: bug#14979: 24.3; Feature Request: query-replace-backward Resent-From: Juri Linkov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 17 Dec 2013 19:42:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 14979 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: ben.a@gmx.us Cc: 14979@debbugs.gnu.org Received: via spool by 14979-submit@debbugs.gnu.org id=B14979.138730926715248 (code B ref 14979); Tue, 17 Dec 2013 19:42:02 +0000 Received: (at 14979) by debbugs.gnu.org; 17 Dec 2013 19:41:07 +0000 Received: from localhost ([127.0.0.1]:56061 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1Vt0Vu-0003xm-7K for submit@debbugs.gnu.org; Tue, 17 Dec 2013 14:41:07 -0500 Received: from [69.163.184.122] (port=35405 helo=ps18281.dreamhostps.com) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1Vt0Vo-0003x8-DU for 14979@debbugs.gnu.org; Tue, 17 Dec 2013 14:41:02 -0500 Received: from localhost.jurta.org (ps18281.dreamhostps.com [69.163.184.122]) by ps18281.dreamhostps.com (Postfix) with ESMTP id 50AB136C00F85D; Tue, 17 Dec 2013 11:40:58 -0800 (PST) From: Juri Linkov Organization: JURTA References: <87mwp612ou.fsf@ThinkPad-W520.localdomain> <87y58pg7pq.fsf@gmail.com> <87txjdg7kc.fsf@gmail.com> <87wqo922so.fsf@mail.jurta.org> <87a9l5yt8g.fsf@mail.jurta.org> <871u6fzu6h.fsf@ThinkPad-W520.localdomain> Date: Tue, 17 Dec 2013 21:35:32 +0200 In-Reply-To: <871u6fzu6h.fsf@ThinkPad-W520.localdomain> (ben a.'s message of "Tue, 30 Jul 2013 16:09:26 -0400") Message-ID: <8738lr1eo3.fsf@mail.jurta.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 1.3 (+) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has identified this incoming email as possible spam. The original message has been attached to this so you can view it (if it isn't spam) or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: > Typing M-- C-M-% is fewer keystrokes than pressing C-r a few times then > C-M-%. It is also fewer keystrokes than setting the mark, then moving > through the document to find a proper starting point and finally pressing > C-M-%. > > The best solution would be if the functions query-replace and > query-replace-regexp are changed so that they step backwards when > receiving a negative argument. [...] Content analysis details: (1.3 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 1.3 RDNS_NONE Delivered to internal network by a host with no rDNS X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 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.3 (+) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has identified this incoming email as possible spam. The original message has been attached to this so you can view it (if it isn't spam) or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: > Typing M-- C-M-% is fewer keystrokes than pressing C-r a few times then > C-M-%. It is also fewer keystrokes than setting the mark, then moving > through the document to find a proper starting point and finally pressing > C-M-%. > > The best solution would be if the functions query-replace and > query-replace-regexp are changed so that they step backwards when > receiving a negative argument. [...] Content analysis details: (1.3 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 1.3 RDNS_NONE Delivered to internal network by a host with no rDNS > Typing M-- C-M-% is fewer keystrokes than pressing C-r a few times then > C-M-%. It is also fewer keystrokes than setting the mark, then moving > through the document to find a proper starting point and finally pressing > C-M-%. > > The best solution would be if the functions query-replace and > query-replace-regexp are changed so that they step backwards when > receiving a negative argument. The following patch implements replace backward with this UI: M-- M-% - replace string backward M-- C-M-% - replace regexp backward M-s w M-- M-% - replace words backward M-s _ M-- M-% - replace symbols backward === modified file 'lisp/replace.el' --- lisp/replace.el 2013-11-30 08:42:28 +0000 +++ lisp/replace.el 2013-12-17 19:34:11 +0000 @@ -226,9 +226,11 @@ (defun query-replace-read-args (prompt r (let* ((from (query-replace-read-from prompt regexp-flag)) (to (if (consp from) (prog1 (cdr from) (setq from (car from))) (query-replace-read-to from prompt regexp-flag)))) - (list from to current-prefix-arg))) + (list from to + (and current-prefix-arg (not (eq current-prefix-arg '-))) + (and current-prefix-arg (eq current-prefix-arg '-))))) -(defun query-replace (from-string to-string &optional delimited start end) +(defun query-replace (from-string to-string &optional delimited start end backward) "Replace some occurrences of FROM-STRING with TO-STRING. As each match is found, the user must type a character saying what to do with it. For directions, type \\[help-command] at that time. @@ -259,7 +261,9 @@ (defun query-replace (from-string to-str regexp in `search-whitespace-regexp'. Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace -only matches surrounded by word boundaries. +only matches surrounded by word boundaries. The negative prefix arg `-' +means replacing backward. + Fourth and fifth arg START and END specify the region to operate on. To customize possible responses, change the \"bindings\" in `query-replace-map'." @@ -267,7 +271,9 @@ (defun query-replace (from-string to-str (let ((common (query-replace-read-args (concat "Query replace" - (if current-prefix-arg " word" "") + (if current-prefix-arg + (if (eq current-prefix-arg '-) " backward" " word") + "") (if (and transient-mark-mode mark-active) " in region" "")) nil))) (list (nth 0 common) (nth 1 common) (nth 2 common) @@ -277,12 +283,13 @@ (defun query-replace (from-string to-str (if (and transient-mark-mode mark-active) (region-beginning)) (if (and transient-mark-mode mark-active) - (region-end))))) - (perform-replace from-string to-string t nil delimited nil nil start end)) + (region-end)) + (nth 3 common)))) + (perform-replace from-string to-string t nil delimited nil nil start end backward)) (define-key esc-map "%" 'query-replace) -(defun query-replace-regexp (regexp to-string &optional delimited start end) +(defun query-replace-regexp (regexp to-string &optional delimited start end backward) "Replace some things after point matching REGEXP with TO-STRING. As each match is found, the user must type a character saying what to do with it. For directions, type \\[help-command] at that time. @@ -313,7 +320,9 @@ (defun query-replace-regexp (regexp to-s regexp in `search-whitespace-regexp'. Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace -only matches surrounded by word boundaries. +only matches surrounded by word boundaries. The negative prefix arg `-' +means replacing backward. + Fourth and fifth arg START and END specify the region to operate on. In TO-STRING, `\\&' stands for whatever matched the whole of REGEXP, @@ -341,7 +350,9 @@ (defun query-replace-regexp (regexp to-s (let ((common (query-replace-read-args (concat "Query replace" - (if current-prefix-arg " word" "") + (if current-prefix-arg + (if (eq current-prefix-arg '-) " backward" " word") + "") " regexp" (if (and transient-mark-mode mark-active) " in region" "")) t))) @@ -352,8 +363,9 @@ (defun query-replace-regexp (regexp to-s (if (and transient-mark-mode mark-active) (region-beginning)) (if (and transient-mark-mode mark-active) - (region-end))))) - (perform-replace regexp to-string t t delimited nil nil start end)) + (region-end)) + (nth 3 common)))) + (perform-replace regexp to-string t t delimited nil nil start end backward)) (define-key esc-map [?\C-%] 'query-replace-regexp) @@ -475,7 +487,7 @@ (defun map-query-replace-regexp (regexp to-strings "")))) (perform-replace regexp replacements t t nil n nil start end))) -(defun replace-string (from-string to-string &optional delimited start end) +(defun replace-string (from-string to-string &optional delimited start end backward) "Replace occurrences of FROM-STRING with TO-STRING. Preserve case in each match if `case-replace' and `case-fold-search' are non-nil and FROM-STRING has no uppercase letters. @@ -491,7 +503,8 @@ (defun replace-string (from-string to-st regexp in `search-whitespace-regexp'. Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace -only matches surrounded by word boundaries. +only matches surrounded by word boundaries. The negative prefix arg `-' +means replacing backward. Operates on the region between START and END (if both are nil, from point to the end of the buffer). Interactively, if Transient Mark mode is @@ -513,7 +526,9 @@ (defun replace-string (from-string to-st (let ((common (query-replace-read-args (concat "Replace" - (if current-prefix-arg " word" "") + (if current-prefix-arg + (if (eq current-prefix-arg '-) " backward" " word") + "") " string" (if (and transient-mark-mode mark-active) " in region" "")) nil))) @@ -521,12 +536,13 @@ (defun replace-string (from-string to-st (if (and transient-mark-mode mark-active) (region-beginning)) (if (and transient-mark-mode mark-active) - (region-end))))) - (perform-replace from-string to-string nil nil delimited nil nil start end)) + (region-end)) + (nth 3 common)))) + (perform-replace from-string to-string nil nil delimited nil nil start end backward)) (put 'replace-string 'interactive-only "use `search-forward' and `replace-match' instead.") -(defun replace-regexp (regexp to-string &optional delimited start end) +(defun replace-regexp (regexp to-string &optional delimited start end backward) "Replace things after point matching REGEXP with TO-STRING. Preserve case in each match if `case-replace' and `case-fold-search' are non-nil and REGEXP has no uppercase letters. @@ -543,7 +559,9 @@ (defun replace-regexp (regexp to-string of the region. Otherwise, operate from point to the end of the buffer. Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace -only matches surrounded by word boundaries. +only matches surrounded by word boundaries. The negative prefix arg `-' +means replacing backward. + Fourth and fifth arg START and END specify the region to operate on. In TO-STRING, `\\&' stands for whatever matched the whole of REGEXP, @@ -582,7 +600,9 @@ (defun replace-regexp (regexp to-string (let ((common (query-replace-read-args (concat "Replace" - (if current-prefix-arg " word" "") + (if current-prefix-arg + (if (eq current-prefix-arg '-) " backward" " word") + "") " regexp" (if (and transient-mark-mode mark-active) " in region" "")) t))) @@ -590,8 +610,9 @@ (defun replace-regexp (regexp to-string (if (and transient-mark-mode mark-active) (region-beginning)) (if (and transient-mark-mode mark-active) - (region-end))))) - (perform-replace regexp to-string nil t delimited nil nil start end)) + (region-end)) + (nth 3 common)))) + (perform-replace regexp to-string nil t delimited nil nil start end backward)) (put 'replace-regexp 'interactive-only "use `re-search-forward' and `replace-match' instead.") @@ -1847,7 +1868,7 @@ (defun replace-match-data (integers reus new))) (match-data integers reuse t))) -(defun replace-match-maybe-edit (newtext fixedcase literal noedit match-data) +(defun replace-match-maybe-edit (newtext fixedcase literal noedit match-data backward) "Make a replacement with `replace-match', editing `\\?'. NEWTEXT, FIXEDCASE, LITERAL are just passed on. If NOEDIT is true, no check for `\\?' is made to save time. MATCH-DATA is used for the @@ -1871,6 +1892,9 @@ (defun replace-match-maybe-edit (newtext noedit nil))) (set-match-data match-data) (replace-match newtext fixedcase literal) + ;; `replace-match' leaves point at the end of the replacement text, + ;; so move point to the beginning when replacing backward. + (when backward (goto-char (nth 0 match-data))) noedit) (defvar replace-search-function nil @@ -1886,7 +1910,7 @@ (defvar replace-re-search-function nil `re-search-forward'.") (defun replace-search (search-string limit regexp-flag delimited-flag - case-fold-search) + case-fold-search backward) "Search for the next occurrence of SEARCH-STRING to replace." ;; Let-bind global isearch-* variables to values used ;; to search the next replacement. These let-bindings @@ -1905,7 +1929,7 @@ (defun replace-search (search-string lim (isearch-case-fold-search case-fold-search) (isearch-adjusted nil) (isearch-nonincremental t) ; don't use lax word mode - (isearch-forward t) + (isearch-forward (not backward)) (search-function (or (if regexp-flag replace-re-search-function @@ -1917,7 +1941,7 @@ (defvar replace-overlay nil) (defun replace-highlight (match-beg match-end range-beg range-end search-string regexp-flag delimited-flag - case-fold-search) + case-fold-search backward) (if query-replace-highlight (if replace-overlay (move-overlay replace-overlay match-beg match-end (current-buffer)) @@ -1933,7 +1957,7 @@ (defun replace-highlight (match-beg matc (isearch-regexp-lax-whitespace replace-regexp-lax-whitespace) (isearch-case-fold-search case-fold-search) - (isearch-forward t) + (isearch-forward (not backward)) (isearch-other-end match-beg) (isearch-error nil)) (isearch-lazy-highlight-new-loop range-beg range-end)))) @@ -1949,7 +1973,7 @@ (defun replace-dehighlight () (defun perform-replace (from-string replacements query-flag regexp-flag delimited-flag - &optional repeat-count map start end) + &optional repeat-count map start end backward) "Subroutine of `query-replace'. Its complexity handles interactive queries. Don't use this in your own program unless you want to query and set the mark just as `query-replace' does. Instead, write a simple loop like this: @@ -2003,10 +2027,15 @@ (defun perform-replace (from-string repl minibuffer-prompt-properties)))) ;; If region is active, in Transient Mark mode, operate on region. - (when start - (setq limit (copy-marker (max start end))) - (goto-char (min start end)) - (deactivate-mark)) + (if backward + (when end + (setq limit (copy-marker (min start end))) + (goto-char (max start end)) + (deactivate-mark)) + (when start + (setq limit (copy-marker (max start end))) + (goto-char (min start end)) + (deactivate-mark))) ;; If last typed key in previous call of multi-buffer perform-replace ;; was `automatic-all', don't ask more questions in next files @@ -2036,13 +2065,17 @@ (defun perform-replace (from-string repl (unwind-protect ;; Loop finding occurrences that perhaps should be replaced. (while (and keep-going - (not (or (eobp) (and limit (>= (point) limit)))) + (if backward + (not (or (bobp) (and limit (<= (point) limit)))) + (not (or (eobp) (and limit (>= (point) limit))))) ;; Use the next match if it is already known; ;; otherwise, search for a match after moving forward ;; one char if progress is required. (setq real-match-data (cond ((consp match-again) - (goto-char (nth 1 match-again)) + (goto-char (if backward + (nth 0 match-again) + (nth 1 match-again))) (replace-match-data t real-match-data match-again)) ;; MATCH-AGAIN non-nil means accept an @@ -2051,22 +2084,26 @@ (defun perform-replace (from-string repl (and (replace-search search-string limit regexp-flag delimited-flag - case-fold-search) + case-fold-search backward) ;; For speed, use only integers and ;; reuse the list used last time. (replace-match-data t real-match-data))) - ((and (< (1+ (point)) (point-max)) + ((and (if backward + (> (1- (point)) (point-min)) + (< (1+ (point)) (point-max))) (or (null limit) - (< (1+ (point)) limit))) + (if backward + (> (1- (point)) limit) + (< (1+ (point)) limit)))) ;; If not accepting adjacent matches, ;; move one char to the right before ;; searching again. Undo the motion ;; if the search fails. (let ((opoint (point))) - (forward-char 1) + (forward-char (if backward -1 1)) (if (replace-search search-string limit regexp-flag delimited-flag - case-fold-search) + case-fold-search backward) (replace-match-data t real-match-data) (goto-char opoint) @@ -2087,7 +2124,9 @@ (defun perform-replace (from-string repl (setq match-again (and nonempty-match (or (not regexp-flag) - (and (looking-at search-string) + (and (if backward + (looking-back search-string) + (looking-at search-string)) (let ((match (match-data))) (and (/= (nth 0 match) (nth 1 match)) match)))))) @@ -2124,11 +2163,11 @@ (defun perform-replace (from-string repl (replace-highlight (nth 0 real-match-data) (nth 1 real-match-data) start end search-string - regexp-flag delimited-flag case-fold-search)) + regexp-flag delimited-flag case-fold-search backward)) (setq noedit (replace-match-maybe-edit next-replacement nocasify literal - noedit real-match-data) + noedit real-match-data backward) replace-count (1+ replace-count))) (undo-boundary) (let (done replaced key def) @@ -2143,7 +2182,7 @@ (defun perform-replace (from-string repl (replace-highlight (match-beginning 0) (match-end 0) start end search-string - regexp-flag delimited-flag case-fold-search) + regexp-flag delimited-flag case-fold-search backward) ;; Bind message-log-max so we don't fill up the message log ;; with a bunch of identical messages. (let ((message-log-max nil) @@ -2173,6 +2212,7 @@ (defun perform-replace (from-string repl (get delimited-flag 'isearch-message-prefix)) "word ") "") (if regexp-flag "regexp " "") + (if backward "backward " "") from-string " with " next-replacement ".\n\n" (substitute-command-keys @@ -2201,7 +2241,7 @@ (defun perform-replace (from-string repl (setq noedit (replace-match-maybe-edit next-replacement nocasify literal - noedit real-match-data) + noedit real-match-data backward) replace-count (1+ replace-count))) (setq done t replaced t)) ((eq def 'act-and-exit) @@ -2209,7 +2249,7 @@ (defun perform-replace (from-string repl (setq noedit (replace-match-maybe-edit next-replacement nocasify literal - noedit real-match-data) + noedit real-match-data backward) replace-count (1+ replace-count))) (setq keep-going nil) (setq done t replaced t)) @@ -2218,7 +2258,7 @@ (defun perform-replace (from-string repl (setq noedit (replace-match-maybe-edit next-replacement nocasify literal - noedit real-match-data) + noedit real-match-data backward) replace-count (1+ replace-count) real-match-data (replace-match-data t real-match-data) @@ -2228,7 +2268,7 @@ (defun perform-replace (from-string repl (setq noedit (replace-match-maybe-edit next-replacement nocasify literal - noedit real-match-data) + noedit real-match-data backward) replace-count (1+ replace-count))) (setq done t query-flag nil replaced t) (if (eq def 'automatic-all) (setq multi-buffer t))) @@ -2272,7 +2312,7 @@ (defun perform-replace (from-string repl (setq noedit (replace-match-maybe-edit next-replacement nocasify literal noedit - real-match-data) + real-match-data backward) replaced t)) (setq done t)) === modified file 'lisp/isearch.el' --- lisp/isearch.el 2013-12-16 20:32:15 +0000 +++ lisp/isearch.el 2013-12-17 19:34:05 +0000 @@ -1667,10 +1667,11 @@ (defun re-search-backward-lax-whitespace (re-search-backward regexp bound noerror count))) -(defun isearch-query-replace (&optional delimited regexp-flag) +(defun isearch-query-replace (&optional arg regexp-flag) "Start `query-replace' with string to replace from last search string. -The arg DELIMITED (prefix arg if interactive), if non-nil, means replace -only matches surrounded by word boundaries. Note that using the prefix arg +The ARG (prefix arg if interactive), if non-nil, means replace +only matches surrounded by word boundaries. The negative prefix +arg `-' means replacing backward. Note that using the prefix arg is possible only when `isearch-allow-scroll' is non-nil or `isearch-allow-prefix' is non-nil, and it doesn't always provide the correct matches for `query-replace', so the preferred way to run word @@ -1688,6 +1689,8 @@ (defun isearch-query-replace (&optional isearch-lax-whitespace) (replace-regexp-lax-whitespace isearch-regexp-lax-whitespace) + (delimited (and arg (not (eq arg '-)))) + (backward (and arg (eq arg '-))) ;; Set `isearch-recursive-edit' to nil to prevent calling ;; `exit-recursive-edit' in `isearch-done' that terminates ;; the execution of this command when it is non-nil. @@ -1696,9 +1699,13 @@ (defun isearch-query-replace (&optional (isearch-done nil t) (isearch-clean-overlays) (if (and isearch-other-end - (< isearch-other-end (point)) + (if backward + (> isearch-other-end (point)) + (< isearch-other-end (point))) (not (and transient-mark-mode mark-active - (< (mark) (point))))) + (if backward + (> (mark) (point)) + (< (mark) (point)))))) (goto-char isearch-other-end)) (set query-replace-from-history-variable (cons isearch-string @@ -1718,19 +1725,21 @@ (defun isearch-query-replace (&optional " word")) "") (if isearch-regexp " regexp" "") + (if backward " backward" "") (if (and transient-mark-mode mark-active) " in region" "")) isearch-regexp) t isearch-regexp (or delimited isearch-word) nil nil (if (and transient-mark-mode mark-active) (region-beginning)) - (if (and transient-mark-mode mark-active) (region-end)))) + (if (and transient-mark-mode mark-active) (region-end)) + backward)) (and isearch-recursive-edit (exit-recursive-edit))) -(defun isearch-query-replace-regexp (&optional delimited) +(defun isearch-query-replace-regexp (&optional arg) "Start `query-replace-regexp' with string to replace from last search string. See `isearch-query-replace' for more information." (interactive (list current-prefix-arg)) - (isearch-query-replace delimited t)) + (isearch-query-replace arg t)) (defun isearch-occur (regexp &optional nlines) "Run `occur' using the last search string as the regexp. From unknown Fri Sep 12 09:56:12 2025 MIME-Version: 1.0 X-Mailer: MIME-tools 5.503 (Entity 5.503) X-Loop: help-debbugs@gnu.org From: help-debbugs@gnu.org (GNU bug Tracking System) To: Ben A. Subject: bug#14979: closed (Re: bug#14979: 24.3; Feature Request: query-replace-backward) Message-ID: References: <87ioul8yyb.fsf@mail.jurta.org> <87mwp612ou.fsf@ThinkPad-W520.localdomain> X-Gnu-PR-Message: they-closed 14979 X-Gnu-PR-Package: emacs Reply-To: 14979@debbugs.gnu.org Date: Thu, 19 Dec 2013 00:32:03 +0000 Content-Type: multipart/mixed; boundary="----------=_1387413123-20856-1" This is a multi-part message in MIME format... ------------=_1387413123-20856-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Your bug report #14979: 24.3; Feature Request: query-replace-backward which was filed against the emacs package, has been closed. The explanation is attached below, along with your original report. If you require more details, please reply to 14979@debbugs.gnu.org. --=20 14979: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D14979 GNU Bug Tracking System Contact help-debbugs@gnu.org with problems ------------=_1387413123-20856-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at 14979-done) by debbugs.gnu.org; 19 Dec 2013 00:31:56 +0000 Received: from localhost ([127.0.0.1]:57934 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1VtRWt-0005Q2-UI for submit@debbugs.gnu.org; Wed, 18 Dec 2013 19:31:56 -0500 Received: from [69.163.184.122] (port=57479 helo=ps18281.dreamhostps.com) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1VtRWs-0005Pv-8K for 14979-done@debbugs.gnu.org; Wed, 18 Dec 2013 19:31:54 -0500 Received: from localhost.jurta.org (ps18281.dreamhostps.com [69.163.184.122]) by ps18281.dreamhostps.com (Postfix) with ESMTP id AA4A33032E5DEA; Wed, 18 Dec 2013 16:31:52 -0800 (PST) From: Juri Linkov To: Ben A. Subject: Re: bug#14979: 24.3; Feature Request: query-replace-backward Organization: JURTA References: <87mwp612ou.fsf@ThinkPad-W520.localdomain> Date: Thu, 19 Dec 2013 02:30:04 +0200 In-Reply-To: <87mwp612ou.fsf@ThinkPad-W520.localdomain> (Ben A.'s message of "Sun, 28 Jul 2013 23:10:25 -0400") Message-ID: <87ioul8yyb.fsf@mail.jurta.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 1.3 (+) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has identified this incoming email as possible spam. The original message has been attached to this so you can view it (if it isn't spam) or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: > A feature request: I often make use of query-replace and > query-replace-regexp. It would be useful to have a query-replace-backward > and a query-replace-regexp-backward. The backward variant would be > executed when the forward variant is given a negative argument. [...] Content analysis details: (1.3 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 1.3 RDNS_NONE Delivered to internal network by a host with no rDNS X-Debbugs-Envelope-To: 14979-done Cc: 14979-done@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 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.3 (+) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has identified this incoming email as possible spam. The original message has been attached to this so you can view it (if it isn't spam) or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: > A feature request: I often make use of query-replace and > query-replace-regexp. It would be useful to have a query-replace-backward > and a query-replace-regexp-backward. The backward variant would be > executed when the forward variant is given a negative argument. [...] Content analysis details: (1.3 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 1.3 RDNS_NONE Delivered to internal network by a host with no rDNS > A feature request: I often make use of query-replace and > query-replace-regexp. It would be useful to have a query-replace-backward > and a query-replace-regexp-backward. The backward variant would be > executed when the forward variant is given a negative argument. This feature is completely implemented now. Thanks for the suggestion. ------------=_1387413123-20856-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at submit) by debbugs.gnu.org; 29 Jul 2013 06:31:07 +0000 Received: from localhost ([127.0.0.1]:55418 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1V3gz3-00076g-T6 for submit@debbugs.gnu.org; Mon, 29 Jul 2013 02:31:06 -0400 Received: from eggs.gnu.org ([208.118.235.92]:42816) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1V3duX-0005bt-45 for submit@debbugs.gnu.org; Sun, 28 Jul 2013 23:14:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1V3duI-00018m-A0 for submit@debbugs.gnu.org; Sun, 28 Jul 2013 23:14:07 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-99.2 required=5.0 tests=BAYES_50,FREEMAIL_FROM, USER_IN_WHITELIST autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:58562) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V3duI-00018i-7i for submit@debbugs.gnu.org; Sun, 28 Jul 2013 23:13:58 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44497) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V3duA-0008QJ-In for bug-gnu-emacs@gnu.org; Sun, 28 Jul 2013 23:13:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1V3du2-00014F-J3 for bug-gnu-emacs@gnu.org; Sun, 28 Jul 2013 23:13:50 -0400 Received: from mout.gmx.net ([74.208.4.200]:59828) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V3du2-00013v-Ds for bug-gnu-emacs@gnu.org; Sun, 28 Jul 2013 23:13:42 -0400 Received: from ThinkPad-W520.localdomain ([24.184.99.33]) by mail.gmx.com (mrgmxus001) with ESMTPSA (Nemesis) id 0MXqqX-1UXxrP0wtz-00Wr9G for ; Mon, 29 Jul 2013 05:13:40 +0200 From: Ben A. To: bug-gnu-emacs@gnu.org Subject: 24.3; Feature Request: query-replace-backward User-Agent: Notmuch/0.15.2 (http://notmuchmail.org) Emacs/24.3.1 (x86_64-pc-linux-gnu) Date: Sun, 28 Jul 2013 23:10:25 -0400 Message-ID: <87mwp612ou.fsf@ThinkPad-W520.localdomain> MIME-Version: 1.0 Content-Type: text/plain X-Provags-ID: V03:K0:SRRPFKREeb3q8CE9YY/M9/0OVUJwkXBRAOQo2JrR1E4L7xPBzQA weZcKboKOE9La43/7zeLtIDW+bNO0zURGCr3W6KTnSpGDl7sCxMS9o6idtXFFGzXPPaXXdd lyBnZN+Gn08uGU952FVOWQRPVBQM9TVmXIXSXkIOUyzsKvTCMk/8vw7Nl2G94CKqyj4AI69 zp1eWQxy2tALgZCvhlmTg== X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.4.x-2.6.x [generic] X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -3.4 (---) X-Debbugs-Envelope-To: submit X-Mailman-Approved-At: Mon, 29 Jul 2013 02:31:04 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 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: -3.4 (---) Hi, A feature request: I often make use of query-replace and query-replace-regexp. It would be useful to have a query-replace-backward and a query-replace-regexp-backward. The backward variant would be executed when the forward variant is given a negative argument. Much Appreciation, Ben ------------=_1387413123-20856-1--