Subject: bug#65347: closed (Re: bug#65347: 29.1; Underscore in query replace prevents case-matching)

From: [email-masked] (GNU bug Tracking System)
Date: Thu, 17 Aug 2023 13:27:02 +0000

Your bug report

#65347: 29.1; Underscore in query replace prevents case-matching

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 [email-masked].

-- 
65347: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=65347
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#65347: 29.1; Underscore in query replace prevents case-matching
From: Eli Zaretskii <[email-masked]>
To: Spencer Baugh <[email-masked]>, Stefan Monnier <[email-masked]>
Cc: [email-masked]
Date: Thu, 17 Aug 2023 16:26:35 +0300
List-Id: <debbugs-submit.debbugs.gnu.org>

> From: Spencer Baugh <[email-masked]>
> Cc: [email-masked]
> Date: Thu, 17 Aug 2023 08:42:35 -0400
> 
> Eli Zaretskii <[email-masked]> writes:
> 
> > These subtleties come up from time to time, so I think it's high time
> > we documented that (in the hope this will stop this from popping up),
> > so I've now done so on the emacs-29 branch.
> >
> > I think this is all we should do here, as the behavior is correct and
> > justified, has been like that since time immemoriam, and we should not
> > change it, therefore.
> 
> Ah, that makes sense!  I have no further complaint then and we should be
> able to close the bug.

Done now.

> Although, a further relevant question: is there some way to make _ not
> be a word separator, in this specific context?  Without changing the
> syntax table of the buffer overall?  So that foo_bar is interpreted as
> one word?
> 
> Maybe some kind of escaping?

I'm not aware of any such way.  The code explicitly checks the syntax
to be 'word' or not 'word'.  But maybe Stefan has some insights?

You could, of course, make a wrapper command that would modify the
syntax table before invoking the real thing.

Subject: 29.1; Underscore in query replace prevents case-matching
From: Spencer Baugh <[email-masked]>
To: [email-masked]
Date: Wed, 16 Aug 2023 17:27:34 -0400
List-Id: <debbugs-submit.debbugs.gnu.org>

1. emacs -Q
2. (insert "Foo_bar")
3. M-% foo RET quux RET
4. Observe the buffer contains Quux_bar
5. Undo, so the buffer contains Foo_bar again
6. M-% foo_bar RET quux RET
7. Observe the buffer contains quux

Expected behavior:
7. Observe the buffer contains Quux

It seems to me that this would match the docstring better:

  Replacement transfers the case pattern of the old text to the
  new text, if both ‘case-fold-search’ and ‘case-replace’ are
  non-nil and FROM-STRING has no uppercase letters.

In GNU Emacs 29.1 (build 4, x86_64-pc-linux-gnu, X toolkit, cairo
 version 1.15.12, Xaw scroll bars) of 2023-08-08 built on

Repository revision: ea63217c1c85f1ca4f1f22b9c4781167de6cf00d
Repository branch: my-emacs-29
Windowing system distributor 'The X.Org Foundation', version 11.0.12011000
System Description: Rocky Linux 8.8 (Green Obsidian)

Configured using:
 'configure --config-cache --with-x-toolkit=lucid
 --with-gif=ifavailable'

Configured features:
CAIRO DBUS FREETYPE GLIB GMP GNUTLS GSETTINGS HARFBUZZ JPEG JSON
LIBSELINUX LIBSYSTEMD LIBXML2 MODULES NOTIFY INOTIFY PDUMPER PNG RSVG
SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS X11 XDBE XIM
XINPUT2 XPM LUCID ZLIB

Important settings:
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Lisp Interaction

Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
None found.

Features:
(shadow sort mail-extr emacsbug message mailcap yank-media puny dired
dired-loaddefs rfc822 mml mml-sec password-cache epa derived epg rfc6068
epg-config gnus-util text-property-search time-date subr-x mm-decode
mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader
cl-loaddefs cl-lib sendmail rfc2047 rfc2045 ietf-drums mm-util
mail-prsvr mail-utils rmc iso-transl tooltip cconv eldoc paren electric
uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel
term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image
regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode
prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu
timer select scroll-bar mouse jit-lock font-lock syntax font-core
term/tty-colors frame minibuffer nadvice seq simple cl-generic
indonesian philippine cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek
romanian slovak czech european ethiopic indian cyrillic chinese
composite emoji-zwj charscript charprop case-table epa-hook
jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs
theme-loaddefs faces cus-face macroexp files window text-properties
overlay sha1 md5 base64 format env code-pages mule custom widget keymap
hashtable-print-readable backquote threads dbusbind inotify
dynamic-setting system-font-setting font-render-setting cairo x-toolkit
xinput2 x multi-tty make-network-process emacs)

Memory information:
((conses 16 64542 9889)
 (symbols 48 9474 0)
 (strings 32 23737 1993)
 (string-bytes 1 692637)
 (vectors 16 9301)
 (vector-slots 8 148671 13049)
 (floats 8 34 25)
 (intervals 56 241 0)
 (buffers 976 10))