Subject: Re: bug#48695: [PATCH] Fix region deletion behavior in python.el

From: kobarity <[email-masked]>
Date: Tue, 01 Jul 2025 12:31:24 +0900

Eli Zaretskii wrote:
> > Cc: [email-masked],
> >  Jakub Ječmínek <[email-masked]>,
> >  [email-masked]
> > Date: Mon, 30 Jun 2025 00:19:53 +0200
> > From:  Jakub Ječmínek via "Bug reports for GNU Emacs,
> >  the Swiss army knife of text editors" <[email-masked]>
> > 
> > * lisp/progmodes/python.el (python-indent-dedent-line-backspace):
> > Check for an active region when deciding whether to perform a
> > backward delete.  (Bug#48695)
> > 
> > * test/lisp/progmodes/python-tests.el: Add regression test
> > `python-indent-dedent-line-backspace-4'.
> > ---
> >  lisp/progmodes/python.el            |  4 +++-
> >  test/lisp/progmodes/python-tests.el | 15 +++++++++++++++
> >  2 files changed, 18 insertions(+), 1 deletion(-)
> > 
> > diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
> > index f4f0518dbfd..17fabc322fa 100644
> > --- a/lisp/progmodes/python.el
> > +++ b/lisp/progmodes/python.el
> > @@ -1970,7 +1970,9 @@ python-indent-dedent-line-backspace
> >  Argument ARG is passed to `backward-delete-char-untabify' when
> >  point is not in between the indentation."
> >    (interactive "*p")
> > -  (unless (python-indent-dedent-line)
> > +  (unless (and
> > +           (not (region-active-p))
> > +           (python-indent-dedent-line))
> >      (backward-delete-char-untabify arg)))
> >  
> >  (put 'python-indent-dedent-line-backspace 'delete-selection 'supersede)
> 
> This is an incompatible change in behavior.  I wonder whether we can
> do this unconditionally.  Maybe some user option is in order to
> control this behavior?
> 
> kobarity, any comments or suggestions?

How about using `delete-active-region'?  This affects the behavior of
`backward-delete-char-untabify'.  I have a feeling that most people
who set this to nil would prefer the current behavior.

`backward-delete-char-untabify' has the following code.

  (if (and (use-region-p)
           delete-active-region
           (= arg 1))
      ;; Delete the text of the region and deactivate the mark, in the
      ;; same way that `delete-backward-char' does.
      (with-no-warnings (delete-backward-char 1 killp))

I think it would be more consistent to use the same logic as this.