GNU bug report logs - #48695
python.el *-backspace functionality behavior

Previous Next

Package: emacs;

Reported by: Mikhail P <mikpom <at> fastmail.com>

Date: Thu, 27 May 2021 12:08:01 UTC

Severity: normal

Done: Eli Zaretskii <eliz <at> gnu.org>

To reply to this bug, email your comments to 48695 AT debbugs.gnu.org.
There is no need to reopen the bug first.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#48695; Package emacs. (Thu, 27 May 2021 12:08:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to Mikhail P <mikpom <at> fastmail.com>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Thu, 27 May 2021 12:08:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Mikhail P <mikpom <at> fastmail.com>
To: bug-gnu-emacs <at> gnu.org
Subject: python.el *-backspace functionality behavior
Date: Thu, 27 May 2021 14:11:48 +0700
[Message part 1 (text/plain, inline)]
Hello!

I want to report a small behavior problem of the default python.el

When hitting backspace in some context it does not delete the region 
selected (between active mark and cursor) but dedents instead.

Attaching a video and debug info below.

Thanks, Mikhail


|In GNU Emacs 27.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.22, 
cairo version 1.17.3)||
|| of 2020-08-29 built on juergen||
||Windowing system distributor 'The X.Org Foundation', version 
11.0.12010000||
||System Description: Arch Linux||
||
||Recent messages:||
||Please type q, s, or p; or ? for help||
||...ome/mikpom/tmp/test.py locked by mikpom <at> mik-PC... (pid 306092): (s, 
q, p, ?)?  [2 times]||
||point=32 of 31 (EOB) column=11||
||Quit [2 times]||
||point=32 of 31 (EOB) column=11||
||Use +,-,0 for further adjustment [7 times]||
||Mark set||
||Undo||
||Mark set||
||Undo||
||
||Configured using:||
|| 'configure --prefix=/usr --sysconfdir=/etc --libexecdir=/usr/lib||
|| --localstatedir=/var --with-x-toolkit=gtk3 --with-xft --with-wide-int||
|| --with-modules --with-cairo --with-harfbuzz 'CFLAGS=-march=x86-64||
|| -mtune=generic -O2 -pipe -fno-plt' CPPFLAGS=-D_FORTIFY_SOURCE=2||
|| LDFLAGS=-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now'||
||
||Configured features:||
||XPM JPEG TIFF GIF PNG RSVG CAIRO SOUND GPM DBUS GSETTINGS GLIB NOTIFY||
||INOTIFY ACL GNUTLS LIBXML2 FREETYPE HARFBUZZ M17N_FLT LIBOTF ZLIB||
||TOOLKIT_SCROLL_BARS GTK3 X11 XDBE XIM MODULES THREADS LIBSYSTEMD JSON||
||PDUMPER LCMS2 GMP||
||
||Important settings:||
||  value of $LANG: en_US.UTF-8||
||  locale-coding-system: utf-8-unix||
||
||Major mode: Python||
||
||Minor modes in effect:||
||  text-scale-mode: t||
||  shell-dirtrack-mode: t||
||  tooltip-mode: t||
||  global-eldoc-mode: t||
||  eldoc-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||
||  auto-composition-mode: t||
||  auto-encryption-mode: t||
||  auto-compression-mode: t||
||  line-number-mode: t||
||  transient-mark-mode: t||
||
||Load-path shadows:||
||None found.||
||
||Features:||
||(shadow sort mail-extr emacsbug message rmc puny dired dired-loaddefs||
||rfc822 mml mml-sec epa derived epg epg-config gnus-util rmail||
||rmail-loaddefs text-property-search mm-decode mm-bodies mm-encode||
||mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047||
||rfc2045 ietf-drums mm-util mail-prsvr mail-utils face-remap help-mode||
||python easymenu tramp-sh tramp tramp-loaddefs trampver tramp-integration||
||files-x tramp-compat shell pcomplete parse-time iso8601 time-date||
||ls-lisp format-spec auth-source cl-seq eieio eieio-core cl-macs||
||eieio-loaddefs password-cache json subr-x map seq byte-opt gv bytecomp||
||byte-compile cconv comint ring cl-loaddefs cl-lib ansi-color tooltip||
||eldoc electric uniquify ediff-hook vc-hooks lisp-float-type 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 elisp-mode||
||lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch||
||timer select scroll-bar mouse jit-lock font-lock syntax facemenu||
||font-core term/tty-colors frame minibuffer cl-generic 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 charscript charprop||
||case-table epa-hook jka-cmpr-hook help simple abbrev obarray||
||cl-preloaded nadvice loaddefs button faces cus-face macroexp files||
||text-properties overlay sha1 md5 base64 format env code-pages mule||
||custom widget hashtable-print-readable backquote threads dbusbind||
||inotify lcms2 dynamic-setting system-font-setting font-render-setting||
||cairo move-toolbar gtk x-toolkit x multi-tty make-network-process emacs)||
||
||Memory information:||
||((conses 16 68993 9337)||
|| (symbols 48 8647 1)||
|| (strings 32 25425 1979)||
|| (string-bytes 1 913938)||
|| (vectors 16 14597)||
|| (vector-slots 8 182334 11322)||
|| (floats 8 46 19)||
|| (intervals 56 234 0)||
|| (buffers 1000 13))||
|

[Message part 2 (text/html, inline)]
[2021-05-27 14-06-50.flv (video/x-flv, attachment)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#48695; Package emacs. (Thu, 27 May 2021 23:34:02 GMT) Full text and rfc822 format available.

Message #8 received at 48695 <at> debbugs.gnu.org (full text, mbox):

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: Mikhail P <mikpom <at> fastmail.com>
Cc: 48695 <at> debbugs.gnu.org
Subject: Re: bug#48695: python.el *-backspace functionality behavior
Date: Fri, 28 May 2021 01:32:52 +0200
Mikhail P <mikpom <at> fastmail.com> writes:

> I want to report a small behavior problem of the default python.el 
>
> When hitting backspace in some context it does not delete the region selected
> (between active mark and cursor) but dedents instead.
>
> Attaching a video and debug info below.

I'm unable to reproduce the problem on either Emacs 27.1 or Emacs 28.
Could you give a step-by-step recipe to reproduce the bug, starting from
"emacs -Q"?

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no




Added tag(s) moreinfo. Request was from Lars Ingebrigtsen <larsi <at> gnus.org> to control <at> debbugs.gnu.org. (Thu, 27 May 2021 23:34:02 GMT) Full text and rfc822 format available.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#48695; Package emacs. (Fri, 28 May 2021 01:14:02 GMT) Full text and rfc822 format available.

Message #13 received at 48695 <at> debbugs.gnu.org (full text, mbox):

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: Mikhail P <mikpom <at> fastmail.com>
Cc: 48695 <at> debbugs.gnu.org
Subject: Re: bug#48695: python.el *-backspace functionality behavior
Date: Fri, 28 May 2021 03:13:21 +0200
(Please keep the debbugs address in the Cc headers -- otherwise your
mails won't reach the Emacs bug tracker.)

Mikhail P <mikpom <at> fastmail.com> writes:

> Greetings!
>
> The steps are :
>
> 1. start emacs with emacs -Q
>
> 2. visit a (empty) file with .py extension (so built-in Python major mode is activated)
>
> 3. type a block of code containing indented line, e.g. 
>
> for i in range(10): 
>
>     print(i)
>
> 4. Move the cursor at the very end of the code example (after print(i)) and activate
> the mark
>
> 5. Move the cursor at the beginning of print(i), so it is on p.
>
> 6. hit backspace.
>
> 7. selected text (print(i)) is not deleted but dedented instead)

Thanks for the recipe -- I can reproduce this in both Emacs 28 and 27.1.

If point is anywhere else than at the "p", the <backspace> works as
expected, but if it's a the "p", it deletes the leading spaces instead.
Most peculiar.




Removed tag(s) moreinfo. Request was from Lars Ingebrigtsen <larsi <at> gnus.org> to control <at> debbugs.gnu.org. (Sun, 13 Jun 2021 10:09:02 GMT) Full text and rfc822 format available.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#48695; Package emacs. (Sun, 29 Jun 2025 22:24:02 GMT) Full text and rfc822 format available.

Message #18 received at 48695 <at> debbugs.gnu.org (full text, mbox):

From: Jakub Ječmínek <kuba <at> kubajecminek.cz>
To: larsi <at> gnus.org
Cc: mikpom <at> fastmail.com,
 Jakub Ječmínek <kuba <at> kubajecminek.cz>,
 48695 <at> debbugs.gnu.org
Subject: [PATCH] Fix region deletion behavior in python.el
Date: Mon, 30 Jun 2025 00:19:53 +0200
* 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)
diff --git a/test/lisp/progmodes/python-tests.el b/test/lisp/progmodes/python-tests.el
index 2c00f47d82c..f13175c9836 100644
--- a/test/lisp/progmodes/python-tests.el
+++ b/test/lisp/progmodes/python-tests.el
@@ -3780,6 +3780,21 @@ python-indent-dedent-line-backspace-3
                 (pos-bol) (pos-eol))
                "abcdef")))))
 
+(ert-deftest python-indent-dedent-line-backspace-4 ()
+  "Correctly delete region instead of de-indentation.  Bug#48695."
+  (python-tests-with-temp-buffer
+   "
+if True:
+    x ()
+    if False:
+"
+   (python-tests-look-at "if False:")
+   (end-of-line)
+   (set-mark-command nil)
+   (backward-word 2)
+   (call-interactively #'python-indent-dedent-line-backspace)
+   (should (= (current-indentation) 4))))
+
 (ert-deftest python-bob-infloop-avoid ()
   "Test that strings at BOB don't confuse syntax analysis.  Bug#24905"
   (python-tests-with-temp-buffer
-- 
2.49.0





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#48695; Package emacs. (Mon, 30 Jun 2025 12:28:02 GMT) Full text and rfc822 format available.

Message #21 received at 48695 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Jakub Ječmínek <kuba <at> kubajecminek.cz>, kobarity
 <kobarity <at> gmail.com>
Cc: mikpom <at> fastmail.com, kuba <at> kubajecminek.cz, larsi <at> gnus.org,
 48695 <at> debbugs.gnu.org
Subject: Re: bug#48695: [PATCH] Fix region deletion behavior in python.el
Date: Mon, 30 Jun 2025 15:27:24 +0300
> Cc: mikpom <at> fastmail.com,
>  Jakub Ječmínek <kuba <at> kubajecminek.cz>,
>  48695 <at> debbugs.gnu.org
> 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" <bug-gnu-emacs <at> gnu.org>
> 
> * 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?




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#48695; Package emacs. (Tue, 01 Jul 2025 03:32:02 GMT) Full text and rfc822 format available.

Message #24 received at 48695 <at> debbugs.gnu.org (full text, mbox):

From: kobarity <kobarity <at> gmail.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: mikpom <at> fastmail.com,
 Jakub Ječmínek <kuba <at> kubajecminek.cz>, larsi <at> gnus.org,
 48695 <at> debbugs.gnu.org
Subject: Re: bug#48695: [PATCH] Fix region deletion behavior in python.el
Date: Tue, 01 Jul 2025 12:31:24 +0900
Eli Zaretskii wrote:
> > Cc: mikpom <at> fastmail.com,
> >  Jakub Ječmínek <kuba <at> kubajecminek.cz>,
> >  48695 <at> debbugs.gnu.org
> > 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" <bug-gnu-emacs <at> gnu.org>
> > 
> > * 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.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#48695; Package emacs. (Tue, 08 Jul 2025 22:04:02 GMT) Full text and rfc822 format available.

Message #27 received at 48695 <at> debbugs.gnu.org (full text, mbox):

From: Jakub Ječmínek <kuba <at> kubajecminek.cz>
To: kobarity <kobarity <at> gmail.com>, Eli Zaretskii <eliz <at> gnu.org>
Cc: mikpom <at> fastmail.com, larsi <at> gnus.org, 48695 <at> debbugs.gnu.org
Subject: Re: bug#48695: [PATCH] Fix region deletion behavior in python.el
Date: Wed, 9 Jul 2025 00:00:49 +0200
On 7/1/25 05:31, kobarity wrote:
> 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.

Do you mean something like this?

diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index f4f0518dbfd..92c0889da8f 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)
+  (when (or
+         (and (use-region-p) delete-active-region)
+         (not (python-indent-dedent-line)))
     (backward-delete-char-untabify arg)))

 (put 'python-indent-dedent-line-backspace 'delete-selection 'supersede)




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#48695; Package emacs. (Wed, 09 Jul 2025 14:28:06 GMT) Full text and rfc822 format available.

Message #30 received at 48695 <at> debbugs.gnu.org (full text, mbox):

From: kobarity <kobarity <at> gmail.com>
To: Jakub Ječmínek <kuba <at> kubajecminek.cz>
Cc: mikpom <at> fastmail.com, Eli Zaretskii <eliz <at> gnu.org>, larsi <at> gnus.org,
 48695 <at> debbugs.gnu.org
Subject: Re: bug#48695: [PATCH] Fix region deletion behavior in python.el
Date: Wed, 09 Jul 2025 23:26:55 +0900
Jakub Ječmínek wrote:
> 
> On 7/1/25 05:31, kobarity wrote:
> > 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.
> 
> Do you mean something like this?
> 
> diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
> index f4f0518dbfd..92c0889da8f 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)
> +  (when (or
> +         (and (use-region-p) delete-active-region)
> +         (not (python-indent-dedent-line)))
>      (backward-delete-char-untabify arg)))
> 
>  (put 'python-indent-dedent-line-backspace 'delete-selection 'supersede)

Mostly yes.  I would prefer to add the check for arg being 1 as well.
Doing so has the following advantages:

- Less difference from current behavior.
- The behavior can be controlled by the prefix argument.  (When
  `delete-active-region' is non-nil and the region is not empty.)
- More consistent with `backward-delete-char-untabify'.

In any case, it would be better to update the docstring.

diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index f4f0518dbfd..867e945fabb 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)
+  (when (or
+         (and (use-region-p) delete-active-region (= arg 1))
+         (not (python-indent-dedent-line)))
     (backward-delete-char-untabify arg)))
 
 (put 'python-indent-dedent-line-backspace 'delete-selection 'supersede)




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#48695; Package emacs. (Wed, 09 Jul 2025 19:39:03 GMT) Full text and rfc822 format available.

Message #33 received at 48695 <at> debbugs.gnu.org (full text, mbox):

From: Jakub Ječmínek <kuba <at> kubajecminek.cz>
To: kobarity <kobarity <at> gmail.com>
Cc: mikpom <at> fastmail.com, Eli Zaretskii <eliz <at> gnu.org>, larsi <at> gnus.org,
 48695 <at> debbugs.gnu.org
Subject: Re: bug#48695: [PATCH] Fix region deletion behavior in python.el
Date: Wed, 9 Jul 2025 21:35:50 +0200
On 7/9/25 16:26, kobarity wrote:
> Mostly yes.  I would prefer to add the check for arg being 1 as well.

Thank you — adding a check for `(= arg 1)' makes sense here.

> In any case, it would be better to update the docstring.

Agreed. I’ll send a new patch that includes updated docstrings, ERTs, 
and a NEWS entry. However, before doing that, I’d like to hear Eli’s 
opinion: Is using `delete-active-region' appropriate here, or would it 
be better to introduce a new option specific to `python-mode'?




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#48695; Package emacs. (Thu, 10 Jul 2025 06:06:02 GMT) Full text and rfc822 format available.

Message #36 received at 48695 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Jakub Ječmínek <kuba <at> kubajecminek.cz>
Cc: mikpom <at> fastmail.com, kobarity <at> gmail.com, larsi <at> gnus.org,
 48695 <at> debbugs.gnu.org
Subject: Re: bug#48695: [PATCH] Fix region deletion behavior in python.el
Date: Thu, 10 Jul 2025 09:05:02 +0300
> Date: Wed, 9 Jul 2025 21:35:50 +0200
> Cc: Eli Zaretskii <eliz <at> gnu.org>, larsi <at> gnus.org, mikpom <at> fastmail.com,
>  48695 <at> debbugs.gnu.org
> From: Jakub Ječmínek <kuba <at> kubajecminek.cz>
> 
> On 7/9/25 16:26, kobarity wrote:
> > Mostly yes.  I would prefer to add the check for arg being 1 as well.
> 
> Thank you — adding a check for `(= arg 1)' makes sense here.
> 
> > In any case, it would be better to update the docstring.
> 
> Agreed. I’ll send a new patch that includes updated docstrings, ERTs, 
> and a NEWS entry. However, before doing that, I’d like to hear Eli’s 
> opinion: Is using `delete-active-region' appropriate here, or would it 
> be better to introduce a new option specific to `python-mode'?

I think the test for ARG = 1 is enough.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#48695; Package emacs. (Sat, 26 Jul 2025 08:19:02 GMT) Full text and rfc822 format available.

Message #39 received at 48695 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: kuba <at> kubajecminek.cz
Cc: mikpom <at> fastmail.com, kobarity <at> gmail.com, larsi <at> gnus.org,
 48695 <at> debbugs.gnu.org
Subject: Re: bug#48695: [PATCH] Fix region deletion behavior in python.el
Date: Sat, 26 Jul 2025 11:18:43 +0300
Ping! Jakub, did you have an opportunity to work on the updated patch?

> Cc: mikpom <at> fastmail.com, kobarity <at> gmail.com, larsi <at> gnus.org,
>  48695 <at> debbugs.gnu.org
> Date: Thu, 10 Jul 2025 09:05:02 +0300
> From: Eli Zaretskii <eliz <at> gnu.org>
> 
> > Date: Wed, 9 Jul 2025 21:35:50 +0200
> > Cc: Eli Zaretskii <eliz <at> gnu.org>, larsi <at> gnus.org, mikpom <at> fastmail.com,
> >  48695 <at> debbugs.gnu.org
> > From: Jakub Ječmínek <kuba <at> kubajecminek.cz>
> > 
> > On 7/9/25 16:26, kobarity wrote:
> > > Mostly yes.  I would prefer to add the check for arg being 1 as well.
> > 
> > Thank you — adding a check for `(= arg 1)' makes sense here.
> > 
> > > In any case, it would be better to update the docstring.
> > 
> > Agreed. I’ll send a new patch that includes updated docstrings, ERTs, 
> > and a NEWS entry. However, before doing that, I’d like to hear Eli’s 
> > opinion: Is using `delete-active-region' appropriate here, or would it 
> > be better to introduce a new option specific to `python-mode'?
> 
> I think the test for ARG = 1 is enough.
> 
> 
> 
> 




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#48695; Package emacs. (Sat, 26 Jul 2025 20:00:02 GMT) Full text and rfc822 format available.

Message #42 received at 48695 <at> debbugs.gnu.org (full text, mbox):

From: Jakub Ječmínek <kuba <at> kubajecminek.cz>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: mikpom <at> fastmail.com, kobarity <at> gmail.com, larsi <at> gnus.org,
 48695 <at> debbugs.gnu.org
Subject: Re: bug#48695: [PATCH] Fix region deletion behavior in python.el
Date: Sat, 26 Jul 2025 21:57:38 +0200
Eli Zaretskii <eliz <at> gnu.org> writes:

> Ping! Jakub, did you have an opportunity to work on the updated patch?

Sorry for the delayed response.  Please see the patch below.

From d10520e9ab362b3667bf06a798316e8afe6e8e64 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jakub=20Je=C4=8Dm=C3=ADnek?= <kuba <at> kubajecminek.cz>
Date: Sun, 29 Jun 2025 23:56:13 +0200
Subject: [PATCH] Improve region deletion handling in python.el

* lisp/progmodes/python.el (python-indent-dedent-line-backspace):
Delete the text in the region if Transient Mark mode is enabled, the
mark is active, and prefix arg is 1.  (Bug#48695)

* test/lisp/progmodes/python-tests.el: Add new test
`python-indent-dedent-line-backspace-4'.
---
 etc/NEWS                            |  7 +++++++
 lisp/progmodes/python.el            |  9 ++++++---
 test/lisp/progmodes/python-tests.el | 17 +++++++++++++++++
 3 files changed, 30 insertions(+), 3 deletions(-)

diff --git a/etc/NEWS b/etc/NEWS
index 8d41efdaf64..1ee573213aa 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1809,6 +1809,13 @@ restart Emacs.
 ---
 *** Support of 'electric-layout-mode' added.
 
+---
+*** DEL now deletes the text in the active region when point is between indentation.
+The command 'python-indent-dedent-line-backspace' (by default bound to
+'DEL') now deletes the text in the region and deactivates the mark if
+Transient Mark mode is enabled, the mark is active, and prefix argument
+is 1.
+
 ** Tmm Menubar
 
 ---
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index f4f0518dbfd..8b5ffae57d6 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -1967,10 +1967,13 @@ python-indent-dedent-line
 
 (defun python-indent-dedent-line-backspace (arg)
   "De-indent current line.
-Argument ARG is passed to `backward-delete-char-untabify' when
-point is not in between the indentation."
+Argument ARG is passed to `backward-delete-char-untabify' when point is
+not in between the indentation or when Transient Mark mode is enabled,
+the mark is active, and ARG is 1."
   (interactive "*p")
-  (unless (python-indent-dedent-line)
+  (when (or
+         (and (use-region-p) (= arg 1))
+         (not (python-indent-dedent-line)))
     (backward-delete-char-untabify arg)))
 
 (put 'python-indent-dedent-line-backspace 'delete-selection 'supersede)
diff --git a/test/lisp/progmodes/python-tests.el b/test/lisp/progmodes/python-tests.el
index 2c00f47d82c..d9aad7c7034 100644
--- a/test/lisp/progmodes/python-tests.el
+++ b/test/lisp/progmodes/python-tests.el
@@ -3780,6 +3780,23 @@ python-indent-dedent-line-backspace-3
                 (pos-bol) (pos-eol))
                "abcdef")))))
 
+(ert-deftest python-indent-dedent-line-backspace-4 ()
+  "Delete the text in the region instead of de-indentation.  Bug#48695."
+  (dolist (test '((1 4) (2 0)))
+    (python-tests-with-temp-buffer
+        "
+if True:
+    x ()
+    if False:
+"
+      (let ((current-prefix-arg (list (car test))))
+        (python-tests-look-at "if False:")
+        (end-of-line)
+        (set-mark-command nil)
+        (backward-word 2)
+        (call-interactively #'python-indent-dedent-line-backspace)
+        (should (= (current-indentation) (cadr test)))))))
+
 (ert-deftest python-bob-infloop-avoid ()
   "Test that strings at BOB don't confuse syntax analysis.  Bug#24905"
   (python-tests-with-temp-buffer
-- 
2.49.1




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#48695; Package emacs. (Sun, 27 Jul 2025 14:49:02 GMT) Full text and rfc822 format available.

Message #45 received at 48695 <at> debbugs.gnu.org (full text, mbox):

From: kobarity <kobarity <at> gmail.com>
To: Jakub Ječmínek <kuba <at> kubajecminek.cz>
Cc: mikpom <at> fastmail.com, Eli Zaretskii <eliz <at> gnu.org>, larsi <at> gnus.org,
 48695 <at> debbugs.gnu.org
Subject: Re: bug#48695: [PATCH] Fix region deletion behavior in python.el
Date: Sun, 27 Jul 2025 23:48:35 +0900
Jakub Ječmínek wrote:
> 
> Eli Zaretskii <eliz <at> gnu.org> writes:
> 
> > Ping! Jakub, did you have an opportunity to work on the updated patch?
> 
> Sorry for the delayed response.  Please see the patch below.

`python-indent-dedent-line-backspace-4' seems to fail in batch mode.
It would be better to use

        (transient-mark-mode)
        (set-mark (point))

instead of

        (set-mark-command nil)




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#48695; Package emacs. (Sun, 27 Jul 2025 21:01:02 GMT) Full text and rfc822 format available.

Message #48 received at 48695 <at> debbugs.gnu.org (full text, mbox):

From: Jakub Ječmínek <kuba <at> kubajecminek.cz>
To: kobarity <kobarity <at> gmail.com>
Cc: mikpom <at> fastmail.com, Eli Zaretskii <eliz <at> gnu.org>, larsi <at> gnus.org,
 48695 <at> debbugs.gnu.org
Subject: Re: bug#48695: [PATCH] Fix region deletion behavior in python.el
Date: Sun, 27 Jul 2025 22:57:46 +0200
kobarity <kobarity <at> gmail.com> writes:

> `python-indent-dedent-line-backspace-4' seems to fail in batch mode.
> It would be better to use
>
>         (transient-mark-mode)
>         (set-mark (point))
>
> instead of
>
>         (set-mark-command nil)

Oops, here's revised version. Thanks!

From 405e06443a2d75ddb3e5b8c245dd65bbb5c2d25a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jakub=20Je=C4=8Dm=C3=ADnek?= <kuba <at> kubajecminek.cz>
Date: Sun, 29 Jun 2025 23:56:13 +0200
Subject: [PATCH] Improve region deletion handling in python.el

* lisp/progmodes/python.el (python-indent-dedent-line-backspace):
Delete the text in the region if Transient Mark mode is enabled, the
mark is active, and prefix arg is 1.  (Bug#48695)

* test/lisp/progmodes/python-tests.el: Add new test
`python-indent-dedent-line-backspace-4'.
---
 etc/NEWS                            |  7 +++++++
 lisp/progmodes/python.el            |  9 ++++++---
 test/lisp/progmodes/python-tests.el | 18 ++++++++++++++++++
 3 files changed, 31 insertions(+), 3 deletions(-)

diff --git a/etc/NEWS b/etc/NEWS
index 8d41efdaf64..1ee573213aa 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1809,6 +1809,13 @@ restart Emacs.
 ---
 *** Support of 'electric-layout-mode' added.
 
+---
+*** DEL now deletes the text in the active region when point is between indentation.
+The command 'python-indent-dedent-line-backspace' (by default bound to
+'DEL') now deletes the text in the region and deactivates the mark if
+Transient Mark mode is enabled, the mark is active, and prefix argument
+is 1.
+
 ** Tmm Menubar
 
 ---
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index f4f0518dbfd..8b5ffae57d6 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -1967,10 +1967,13 @@ python-indent-dedent-line
 
 (defun python-indent-dedent-line-backspace (arg)
   "De-indent current line.
-Argument ARG is passed to `backward-delete-char-untabify' when
-point is not in between the indentation."
+Argument ARG is passed to `backward-delete-char-untabify' when point is
+not in between the indentation or when Transient Mark mode is enabled,
+the mark is active, and ARG is 1."
   (interactive "*p")
-  (unless (python-indent-dedent-line)
+  (when (or
+         (and (use-region-p) (= arg 1))
+         (not (python-indent-dedent-line)))
     (backward-delete-char-untabify arg)))
 
 (put 'python-indent-dedent-line-backspace 'delete-selection 'supersede)
diff --git a/test/lisp/progmodes/python-tests.el b/test/lisp/progmodes/python-tests.el
index 2c00f47d82c..d65ef39abb4 100644
--- a/test/lisp/progmodes/python-tests.el
+++ b/test/lisp/progmodes/python-tests.el
@@ -3780,6 +3780,24 @@ python-indent-dedent-line-backspace-3
                 (pos-bol) (pos-eol))
                "abcdef")))))
 
+(ert-deftest python-indent-dedent-line-backspace-4 ()
+  "Delete the text in the region instead of de-indentation.  Bug#48695."
+  (dolist (test '((1 4) (2 0)))
+    (python-tests-with-temp-buffer
+        "
+if True:
+    x ()
+    if False:
+"
+      (let ((current-prefix-arg (list (car test))))
+        (python-tests-look-at "if False:")
+        (end-of-line)
+        (transient-mark-mode)
+        (set-mark (point))
+        (backward-word 2)
+        (call-interactively #'python-indent-dedent-line-backspace)
+        (should (= (current-indentation) (cadr test)))))))
+
 (ert-deftest python-bob-infloop-avoid ()
   "Test that strings at BOB don't confuse syntax analysis.  Bug#24905"
   (python-tests-with-temp-buffer
-- 
2.49.1





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#48695; Package emacs. (Mon, 28 Jul 2025 14:07:01 GMT) Full text and rfc822 format available.

Message #51 received at 48695 <at> debbugs.gnu.org (full text, mbox):

From: kobarity <kobarity <at> gmail.com>
To: Jakub Ječmínek <kuba <at> kubajecminek.cz>
Cc: mikpom <at> fastmail.com, Eli Zaretskii <eliz <at> gnu.org>, larsi <at> gnus.org,
 48695 <at> debbugs.gnu.org
Subject: Re: bug#48695: [PATCH] Fix region deletion behavior in python.el
Date: Mon, 28 Jul 2025 23:06:33 +0900
Jakub Ječmínek wrote:
> 
> kobarity <kobarity <at> gmail.com> writes:
> 
> > `python-indent-dedent-line-backspace-4' seems to fail in batch mode.
> > It would be better to use
> >
> >         (transient-mark-mode)
> >         (set-mark (point))
> >
> > instead of
> >
> >         (set-mark-command nil)
> 
> Oops, here's revised version. Thanks!

Thanks, it looks good to me.




Reply sent to Eli Zaretskii <eliz <at> gnu.org>:
You have taken responsibility. (Sat, 02 Aug 2025 14:17:01 GMT) Full text and rfc822 format available.

Notification sent to Mikhail P <mikpom <at> fastmail.com>:
bug acknowledged by developer. (Sat, 02 Aug 2025 14:17:03 GMT) Full text and rfc822 format available.

Message #56 received at 48695-done <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: kuba <at> kubajecminek.cz, kobarity <kobarity <at> gmail.com>
Cc: mikpom <at> fastmail.com, 48695-done <at> debbugs.gnu.org, larsi <at> gnus.org
Subject: Re: bug#48695: [PATCH] Fix region deletion behavior in python.el
Date: Sat, 02 Aug 2025 17:16:48 +0300
> Date: Mon, 28 Jul 2025 23:06:33 +0900
> From: kobarity <kobarity <at> gmail.com>
> Cc: Eli Zaretskii <eliz <at> gnu.org>,
> 	mikpom <at> fastmail.com,
> 	larsi <at> gnus.org,
> 	48695 <at> debbugs.gnu.org
> 
> Jakub Ječmínek wrote:
> > 
> > kobarity <kobarity <at> gmail.com> writes:
> > 
> > > `python-indent-dedent-line-backspace-4' seems to fail in batch mode.
> > > It would be better to use
> > >
> > >         (transient-mark-mode)
> > >         (set-mark (point))
> > >
> > > instead of
> > >
> > >         (set-mark-command nil)
> > 
> > Oops, here's revised version. Thanks!
> 
> Thanks, it looks good to me.

Thanks, now installed on the master branch, and closing the bug.




This bug report was last modified 13 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.