From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Tino Calancha Newsgroups: gmane.emacs.bugs Subject: bug#31073: 27.0.50; query-replace undo might change the word case Date: Fri, 06 Apr 2018 14:02:31 +0900 Message-ID: <87efjtdj14.fsf@gmail.com> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: blaine.gmane.org 1522990870 30717 195.159.176.226 (6 Apr 2018 05:01:10 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Fri, 6 Apr 2018 05:01:10 +0000 (UTC) To: 31073@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Fri Apr 06 07:01:06 2018 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 1f4JUl-0007rH-7K for geb-bug-gnu-emacs@m.gmane.org; Fri, 06 Apr 2018 07:01:03 +0200 Original-Received: from localhost ([::1]:53528 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f4JWq-0005E2-QX for geb-bug-gnu-emacs@m.gmane.org; Fri, 06 Apr 2018 01:03:12 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:51515) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f4JWj-0005DR-Tq for bug-gnu-emacs@gnu.org; Fri, 06 Apr 2018 01:03:07 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1f4JWg-0007JO-Qc for bug-gnu-emacs@gnu.org; Fri, 06 Apr 2018 01:03:05 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:60128) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1f4JWg-0007J7-MC for bug-gnu-emacs@gnu.org; Fri, 06 Apr 2018 01:03:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1f4JWg-0000cP-5o; Fri, 06 Apr 2018 01:03:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Tino Calancha Original-Sender: "Debbugs-submit" Resent-CC: juri@jurta.org, bug-gnu-emacs@gnu.org Resent-Date: Fri, 06 Apr 2018 05:03:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 31073 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: X-Debbugs-Original-To: bug-gnu-emacs@gnu.org X-Debbugs-Original-Xcc: juri linkov Original-Received: via spool by submit@debbugs.gnu.org id=B.15229909742361 (code B ref -1); Fri, 06 Apr 2018 05:03:01 +0000 Original-Received: (at submit) by debbugs.gnu.org; 6 Apr 2018 05:02:54 +0000 Original-Received: from localhost ([127.0.0.1]:39791 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1f4JWX-0000c1-NC for submit@debbugs.gnu.org; Fri, 06 Apr 2018 01:02:53 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:60339) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1f4JWV-0000bl-Ft for submit@debbugs.gnu.org; Fri, 06 Apr 2018 01:02:51 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1f4JWP-00079A-4g for submit@debbugs.gnu.org; Fri, 06 Apr 2018 01:02:46 -0400 Original-Received: from lists.gnu.org ([2001:4830:134:3::11]:38411) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1f4JWP-000793-0i for submit@debbugs.gnu.org; Fri, 06 Apr 2018 01:02:45 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:51308) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f4JWN-00057S-IR for bug-gnu-emacs@gnu.org; Fri, 06 Apr 2018 01:02:44 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1f4JWK-00077W-FL for bug-gnu-emacs@gnu.org; Fri, 06 Apr 2018 01:02:43 -0400 Original-Received: from mail-pf0-x230.google.com ([2607:f8b0:400e:c00::230]:37377) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1f4JWK-00076s-9G for bug-gnu-emacs@gnu.org; Fri, 06 Apr 2018 01:02:40 -0400 Original-Received: by mail-pf0-x230.google.com with SMTP id x16so5187510pfm.4 for ; Thu, 05 Apr 2018 22:02:39 -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=sfrf3BWxjr3xY6PMV2R81tV38VbVaVzIQfvPovRKJo4=; b=t0lb55notgZopYtAlfuWVyFMSdhZnW2v/+i/6s/drCJZfKD4iyDSNDTDBgLxgfqsHy 1whw/NjuJbAfwaGntcxz20ekn0DeNyPS1WWlpCphIrK7lNZ/IopEfefaUd+Jp0vZSZ2I +QqPRnOFNmICFE9A1S66aKIMzHiHxBrhIruiwl36PGJ9iaFM0rznWik9AiUeAiEJqifM 6s1io6c7T4QsCoReAfLgftLPgDf4lOmcINKbeH1X2t9Q3MhHjJmlWm1xju+SAR22JH2D WdpyrA0CDgB3rSw9DgVgBjID2vEWdPHxZe27jqy/Tps6Mva+6r6AcXhzbDIteYLCumhq 98iQ== 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=sfrf3BWxjr3xY6PMV2R81tV38VbVaVzIQfvPovRKJo4=; b=Z9ll62vIaEBRl7uqYPvOZNgVBrhkpEwD29t/awtJVdM1VU0pHHDCErTa2F9tEmdJqO H6oqACIekHfnYmXqGYeYsbH7s11l7K2JbIYg8WIQS1fKjISfgEA0Si2/CRJYNH8fmRN6 R8hYPYii/hom5yUyYjPDFwRQG+NzKphjSMHPPGRd2Y5kxJ0FAZnH/Izxoh0QpMMbLwcW Cq0mAJaMuhAzCHjYhRF7ySfvdewG6a2NvM16jd5Hv6oHOLQHy0ar9ezS29NGgfM1LTEK GtqOQtWjPUxigFaTMctmfd7jPQ3/cRnKRIFD+Jj9NenwSo6s/8xBsurdfMltXUaecarK 2ewg== X-Gm-Message-State: AElRT7EioiBs74pUgGZmKnXQq60+4lPGH148p/Be0J0jy5DiacKnMzTJ LY0C6yAzamEgL4IFakwESbZ95JLA X-Google-Smtp-Source: AIpwx4/EgAM2VhO1L9onKH2uOdDvZxlpJYRJqPZIr15IGOYAHj3EZ4IS+IvT2QirHr6ybWxVLsG/iQ== X-Received: by 10.99.3.144 with SMTP id 138mr16904358pgd.364.1522990958750; Thu, 05 Apr 2018 22:02:38 -0700 (PDT) Original-Received: from calancha-pc (15.224.128.101.dy.bbexcite.jp. [101.128.224.15]) by smtp.gmail.com with ESMTPSA id l10sm14126080pgp.35.2018.04.05.22.02.36 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 05 Apr 2018 22:02:37 -0700 (PDT) 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-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:144939 Archived-At: X-Debbugs-CC: Juri Linkov The undo feature shouldn't change the case; it must return to the original words. emacs -Q < M-% t RET FOO RET SPC SPC SPC SPC U ;; The first line shows upcase 'T' at several positions, for instance ;; it shows 'TexT', originally shown as 'text'. --8<-----------------------------cut here---------------start------------->8--- commit 6fcb746c4efcbc2afce6a520f4a8b67a8d40cdd1 Author: Tino Calancha Date: Fri Apr 6 13:40:06 2018 +0900 Preserve case in query-replace undo If the user query and replaces 'foo' with 'BAR', then undo must comeback to 'foo', not to 'FOO'. * lisp/replace.el (perform-replace): Bind nocasify to non-nil value during undo/undo-all actions. * test/lisp/replace-tests.el (query-replace-undo-bug31073): Add test. diff --git a/lisp/replace.el b/lisp/replace.el index c28c9b36f0..a147c8dd86 100644 --- a/lisp/replace.el +++ b/lisp/replace.el @@ -2619,6 +2619,7 @@ perform-replace (let ((stack-idx 0) (stack-len (length stack)) (num-replacements 0) + (nocasify t) ; Bug#31073. search-string next-replacement) (while (and (< stack-idx stack-len) diff --git a/test/lisp/replace-tests.el b/test/lisp/replace-tests.el index 66c6842660..d6043e297c 100644 --- a/test/lisp/replace-tests.el +++ b/test/lisp/replace-tests.el @@ -380,4 +380,24 @@ replace-tests--query-replace-undo (should (string= "211" (replace-tests--query-replace-undo))) (should (string= "211" (replace-tests--query-replace-undo 'comma)))) +(ert-deftest query-replace-undo-bug31073 () + "Test for https://debbugs.gnu.org/31073 ." + (let ((text "The teeth must be cleaned after every meal.") + (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 + ('4 ?U) ; undo-all + ('5 ?q) ; exit + (_ ?\s)))) ; replace current and go next + val)))) + (perform-replace "t" "FOO" t nil nil)) + ;; After undo text must be the same. + (should (string= text (buffer-string)))))) + + ;;; replace-tests.el ends here --8<-----------------------------cut here---------------end--------------->8--- In GNU Emacs 27.0.50 (build 25, x86_64-pc-linux-gnu, GTK+ Version 3.22.11) of 2018-04-03 built on calancha-pc Repository revision: 10ef466a9eb621a3752de69930fcb14bf1af4887