GNU bug report logs -
#36884
Default python mode with electric-indent-mode sometimes indents empty lines
Previous Next
To reply to this bug, email your comments to 36884 AT debbugs.gnu.org.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#36884
; Package
emacs
.
(Thu, 01 Aug 2019 07:07:05 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
Jarosław Rzeszótko <jrzeszotko <at> gmail.com>
:
New bug report received and forwarded. Copy sent to
bug-gnu-emacs <at> gnu.org
.
(Thu, 01 Aug 2019 07:07:05 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
When pressing enter with the cursor like this:
def test():
print("test")
[cursor]
Emacs (26.1) correctly just inserts a blank line. However, with this:
def test():
if True:
print("test")
[cursor]
Emacs inserts a blank line and indents it one level. With this:
def test():
if True:
if False:
print("test")
[cursor]
it inserts a blank line and indents it two levels, etc. Moreover, with two
methods like this:
def test1():
if True:
print("test")
[cursor]def test2():
if True:
print("test")
pressing enter will also indent the def block, instead of just inserting
the empty line.
[Message part 2 (text/html, inline)]
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#36884
; Package
emacs
.
(Thu, 01 Aug 2019 07:55:01 GMT)
Full text and
rfc822 format available.
Message #8 received at submit <at> debbugs.gnu.org (full text, mbox):
On 01.08.19 09:06, Jarosław Rzeszótko wrote:
> When pressing enter with the cursor like this:
>
> def test():
> print("test")
> [cursor]
>
> Emacs (26.1) correctly just inserts a blank line. However, with this:
>
> def test():
> if True:
> print("test")
> [cursor]
>
> Emacs inserts a blank line and indents it one level. With this:
>
> def test():
> if True:
> if False:
> print("test")
> [cursor]
>
> it inserts a blank line and indents it two levels, etc. Moreover, with
> two methods like this:
>
> def test1():
> if True:
> print("test")
>
> [cursor]def test2():
> if True:
> print("test")
>
> pressing enter will also indent the def block, instead of just
> inserting the empty line.
Hi Jarosław,
python-mode.el developer here, just being interested.
AFAIU electric-indent-mode doesn't run a timer, cursor position alone
would not trigger it.
Assume there is a command used from pos. Which? BTW the key alone
doesn't tell enough, as RET and C-j changed binding recently. Reporting
Emacs version will be useful.
Thanks,
Andreas
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#36884
; Package
emacs
.
(Thu, 01 Aug 2019 08:53:01 GMT)
Full text and
rfc822 format available.
Message #11 received at 36884 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
M-x about-emacs shows:
GNU Emacs 26.1 (build 2, x86_64-pc-linux-gnu, GTK+ Version 3.24.4) of
2019-02-03, modified by Debian
C-h k [RET] shows that it is bound to the "newline" function. I get the
same behavior with --no-init.
Cheers,
Jarek
On Thu, Aug 1, 2019 at 9:55 AM Andreas Röhler <andreas.roehler <at> easy-emacs.de>
wrote:
>
> On 01.08.19 09:06, Jarosław Rzeszótko wrote:
> > When pressing enter with the cursor like this:
> >
> > def test():
> > print("test")
> > [cursor]
> >
> > Emacs (26.1) correctly just inserts a blank line. However, with this:
> >
> > def test():
> > if True:
> > print("test")
> > [cursor]
> >
> > Emacs inserts a blank line and indents it one level. With this:
> >
> > def test():
> > if True:
> > if False:
> > print("test")
> > [cursor]
> >
> > it inserts a blank line and indents it two levels, etc. Moreover, with
> > two methods like this:
> >
> > def test1():
> > if True:
> > print("test")
> >
> > [cursor]def test2():
> > if True:
> > print("test")
> >
> > pressing enter will also indent the def block, instead of just
> > inserting the empty line.
>
>
> Hi Jarosław,
>
> python-mode.el developer here, just being interested.
>
> AFAIU electric-indent-mode doesn't run a timer, cursor position alone
> would not trigger it.
>
> Assume there is a command used from pos. Which? BTW the key alone
> doesn't tell enough, as RET and C-j changed binding recently. Reporting
> Emacs version will be useful.
>
> Thanks,
>
> Andreas
>
>
>
>
>
[Message part 2 (text/html, inline)]
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#36884
; Package
emacs
.
(Fri, 02 Aug 2019 01:26:01 GMT)
Full text and
rfc822 format available.
Message #14 received at 36884 <at> debbugs.gnu.org (full text, mbox):
Andreas Röhler <andreas.roehler <at> easy-emacs.de> writes:
> AFAIU electric-indent-mode doesn't run a timer, cursor position alone
> would not trigger it.
electric-indent-mode works from post-self-insert-hook. Not sure how
cursor position and timers are related.
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#36884
; Package
emacs
.
(Fri, 02 Aug 2019 05:09:01 GMT)
Full text and
rfc822 format available.
Message #17 received at 36884 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
Perhaps this behavior exists because there can also be a situation like
this:
def test():
print("test")
[cursor, on empty line in middle of indented block]
print("test")
where what electric indent does after pressing RET (creates new line
aligned to the print statements) makes sense. I think it is mostly
irritating though, and editors I tested, Vim and Sublime Text, do not
automatically indent in any of the situations I mentioned.
FWIW this works as a workaround for me:
(setq electric-indent-functions
'((lambda (inserted-char)
(when (eq major-mode 'python-mode)
;; Do not auto-indent after inserting any empty line
(when (save-excursion
(previous-line)
(beginning-of-line)
(looking-at "^\s*$"))
'no-indent)))))
Cheers,
Jarek
On Fri, Aug 2, 2019 at 3:26 AM Noam Postavsky <npostavs <at> gmail.com> wrote:
> Andreas Röhler <andreas.roehler <at> easy-emacs.de> writes:
>
> > AFAIU electric-indent-mode doesn't run a timer, cursor position alone
> > would not trigger it.
>
> electric-indent-mode works from post-self-insert-hook. Not sure how
> cursor position and timers are related.
>
>
>
>
[Message part 2 (text/html, inline)]
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#36884
; Package
emacs
.
(Fri, 02 Aug 2019 10:38:01 GMT)
Full text and
rfc822 format available.
Message #20 received at submit <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
All you need probably is calling C-j, not RET
There is certain confusion IMO in recent design, as
C-j is bound to electric-newline-and-maybe-indent
which works as I would expect from newline.
On 02.08.19 07:08, Jarosław Rzeszótko wrote:
> Perhaps this behavior exists because there can also be a situation
> like this:
>
> def test():
> print("test")
> [cursor, on empty line in middle of indented block]
> print("test")
>
> where what electric indent does after pressing RET (creates new line
> aligned to the print statements) makes sense. I think it is mostly
> irritating though, and editors I tested, Vim and Sublime Text, do not
> automatically indent in any of the situations I mentioned.
>
> FWIW this works as a workaround for me:
>
> (setq electric-indent-functions
> '((lambda (inserted-char)
> (when (eq major-mode 'python-mode)
> ;; Do not auto-indent after inserting any empty line
> (when (save-excursion
> (previous-line)
> (beginning-of-line)
> (looking-at "^\s*$"))
> 'no-indent)))))
>
> Cheers,
> Jarek
>
> On Fri, Aug 2, 2019 at 3:26 AM Noam Postavsky <npostavs <at> gmail.com
> <mailto:npostavs <at> gmail.com>> wrote:
>
> Andreas Röhler <andreas.roehler <at> easy-emacs.de
> <mailto:andreas.roehler <at> easy-emacs.de>> writes:
>
> > AFAIU electric-indent-mode doesn't run a timer, cursor position
> alone
> > would not trigger it.
>
> electric-indent-mode works from post-self-insert-hook. Not sure how
> cursor position and timers are related.
>
>
>
[Message part 2 (text/html, inline)]
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#36884
; Package
emacs
.
(Fri, 02 Aug 2019 14:56:02 GMT)
Full text and
rfc822 format available.
Message #23 received at 36884 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
So this is by design? Of course I can insert a newline in some other way,
circumventing the electric stuff, but having to decide between
RET-version-1 and RET-version-2 seems really inconvenient, personally I
would much rather have RET insert a newline without indent if the cursor is
not after text. This is also how it seems to work in other editors.
Cheers,
Jarek
On Fri, Aug 2, 2019 at 12:38 PM Andreas Röhler <
andreas.roehler <at> easy-emacs.de> wrote:
> All you need probably is calling C-j, not RET
>
> There is certain confusion IMO in recent design, as
>
> C-j is bound to electric-newline-and-maybe-indent
>
> which works as I would expect from newline.
>
>
> On 02.08.19 07:08, Jarosław Rzeszótko wrote:
>
> Perhaps this behavior exists because there can also be a situation like
> this:
>
> def test():
> print("test")
> [cursor, on empty line in middle of indented block]
> print("test")
>
> where what electric indent does after pressing RET (creates new line
> aligned to the print statements) makes sense. I think it is mostly
> irritating though, and editors I tested, Vim and Sublime Text, do not
> automatically indent in any of the situations I mentioned.
>
> FWIW this works as a workaround for me:
>
> (setq electric-indent-functions
> '((lambda (inserted-char)
> (when (eq major-mode 'python-mode)
> ;; Do not auto-indent after inserting any empty line
> (when (save-excursion
> (previous-line)
> (beginning-of-line)
> (looking-at "^\s*$"))
> 'no-indent)))))
>
> Cheers,
> Jarek
>
> On Fri, Aug 2, 2019 at 3:26 AM Noam Postavsky <npostavs <at> gmail.com> wrote:
>
>> Andreas Röhler <andreas.roehler <at> easy-emacs.de> writes:
>>
>> > AFAIU electric-indent-mode doesn't run a timer, cursor position alone
>> > would not trigger it.
>>
>> electric-indent-mode works from post-self-insert-hook. Not sure how
>> cursor position and timers are related.
>>
>>
>>
>>
[Message part 2 (text/html, inline)]
This bug report was last modified 5 years and 323 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.