* bug#24856: 25.1.50; Emacs stucks when using C-k to kill lines in python-mode if the next line is a beginning of a docstring
@ 2016-11-02 2:39 raynewang
2016-11-02 6:59 ` Clément Pit--Claudel
0 siblings, 1 reply; 4+ messages in thread
From: raynewang @ 2016-11-02 2:39 UTC (permalink / raw)
To: 24856
Please look at the following python snippet:
class Test(object):
def func(self):
"""
This is a test.
"""
I was trying to kill lines (C-k) from line 1. Emacs stucked everytime
after I killed line 2 and was going to kill line 3 (just before the
docstring delimiters). Most time C-g would not work or just brought
Emacs back for no more than 1 sec only. When it occurred, the only thing
I could do was to kill Emacs process.
I tried to disable all of my Emacs configurations, nothing changed.
May it be a problem of built-in python-mode?
Wish you guys could help me. I love your works!
Sincerely
Lei
======================================================================
In GNU Emacs 25.1.50.1 (x86_64-apple-darwin15.6.0, NS appkit-1404.47 Version 10.11.6 (Build 15G31))
of 2016-09-20 built on raynewang-rmbp.local
Repository revision: 83fbb3a6dd75e01a768cb6b3348b7c947711ee46
Windowing system distributor 'Apple', version 10.3.1504
Recent messages:
For information about GNU Emacs and the GNU system, type C-h C-a.
<s-backspace> is undefined [2 times]
funcall-interactively: Wrong type argument: char-or-string-p, nil
Configured using:
'configure --disable-dependency-tracking --disable-silent-rules
--enable-locallisppath=/usr/local/share/emacs/site-lisp
--infodir=/usr/local/Cellar/emacs/HEAD-83fbb3a/share/info/emacs
--prefix=/usr/local/Cellar/emacs/HEAD-83fbb3a --without-x --with-xml2
--without-dbus --without-gnutls --with-rsvg --with-ns
--disable-ns-self-contained'
Configured features:
JPEG RSVG NOTIFY ACL LIBXML2 ZLIB TOOLKIT_SCROLL_BARS NS
Important settings:
value of $LANG: en_US.UTF-8
locale-coding-system: utf-8-unix
Major mode: Fundamental
Minor modes in effect:
tooltip-mode: t
global-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
blink-cursor-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t
buffer-read-only: t
line-number-mode: t
transient-mark-mode: t
Load-path shadows:
None found.
Features:
(shadow sort mail-extr emacsbug message subr-x puny seq byte-opt gv
bytecomp byte-compile cl-extra help-mode cconv cl-loaddefs pcase cl-lib
dired dired-loaddefs format-spec rfc822 mml easymenu mml-sec
password-cache epa derived epg epg-config gnus-util rmail rmail-loaddefs
mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils
mailheader sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr
mail-utils time-date mule-util tooltip eldoc electric uniquify
ediff-hook vc-hooks lisp-float-type mwheel term/ns-win ns-win
ucs-normalize term/common-win tool-bar dnd fontset image regexp-opt
fringe tabulated-list newcomment elisp-mode lisp-mode prog-mode register
page menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock
font-lock syntax facemenu font-core term/tty-colors frame 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 charscript case-table epa-hook
jka-cmpr-hook help simple abbrev obarray minibuffer 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 kqueue cocoa ns multi-tty
make-network-process emacs)
Memory information:
((conses 16 206717 18560)
(symbols 48 20249 0)
(miscs 40 75 177)
(strings 32 18166 5363)
(string-bytes 1 584409)
(vectors 16 35204)
(vector-slots 8 670777 6763)
(floats 8 179 123)
(intervals 56 206 0)
(buffers 976 12))
^ permalink raw reply [flat|nested] 4+ messages in thread
* bug#24856: 25.1.50; Emacs stucks when using C-k to kill lines in python-mode if the next line is a beginning of a docstring
2016-11-02 2:39 bug#24856: 25.1.50; Emacs stucks when using C-k to kill lines in python-mode if the next line is a beginning of a docstring raynewang
@ 2016-11-02 6:59 ` Clément Pit--Claudel
2016-11-03 2:22 ` npostavs
0 siblings, 1 reply; 4+ messages in thread
From: Clément Pit--Claudel @ 2016-11-02 6:59 UTC (permalink / raw)
To: 24856
[-- Attachment #1.1: Type: text/plain, Size: 4819 bytes --]
Thanks, I can reproduce the bug. Here's a simpler recipe:
emacs -Q test.py --eval '(insert " \"")'
In other words, a mis-indented string on the first line is enough to reproduce the bug. It seems to be an infinite loop in fontification:
Debugger entered--Lisp error: (quit)
python-info-beginning-of-statement-p()
python-nav--forward-sexp(-1 nil nil)
python-nav-forward-sexp(-1 nil nil)
python-nav-backward-sexp()
python-info-docstring-p((0 nil nil t nil nil 0 nil 5 nil nil))
python-font-lock-syntactic-face-function((0 nil nil t nil nil 0 nil 5 nil nil))
font-lock-fontify-syntactically-region(1 9 nil)
font-lock-default-fontify-region(1 9 nil)
font-lock-fontify-region(1 9)
#[257 "\211\300\301\"\211\242\306=\203\x10
Clément.
On 2016-11-01 22:39, raynewang (王磊) wrote:
> Please look at the following python snippet:
>
> class Test(object):
> def func(self):
> """
> This is a test.
> """
>
> I was trying to kill lines (C-k) from line 1. Emacs stucked everytime
> after I killed line 2 and was going to kill line 3 (just before the
> docstring delimiters). Most time C-g would not work or just brought
> Emacs back for no more than 1 sec only. When it occurred, the only thing
> I could do was to kill Emacs process.
>
> I tried to disable all of my Emacs configurations, nothing changed.
>
> May it be a problem of built-in python-mode?
>
> Wish you guys could help me. I love your works!
>
> Sincerely
>
> Lei
>
> ======================================================================
>
>
> In GNU Emacs 25.1.50.1 (x86_64-apple-darwin15.6.0, NS appkit-1404.47 Version 10.11.6 (Build 15G31))
> of 2016-09-20 built on raynewang-rmbp.local
> Repository revision: 83fbb3a6dd75e01a768cb6b3348b7c947711ee46
> Windowing system distributor 'Apple', version 10.3.1504
> Recent messages:
> For information about GNU Emacs and the GNU system, type C-h C-a.
> <s-backspace> is undefined [2 times]
> funcall-interactively: Wrong type argument: char-or-string-p, nil
>
> Configured using:
> 'configure --disable-dependency-tracking --disable-silent-rules
> --enable-locallisppath=/usr/local/share/emacs/site-lisp
> --infodir=/usr/local/Cellar/emacs/HEAD-83fbb3a/share/info/emacs
> --prefix=/usr/local/Cellar/emacs/HEAD-83fbb3a --without-x --with-xml2
> --without-dbus --without-gnutls --with-rsvg --with-ns
> --disable-ns-self-contained'
>
> Configured features:
> JPEG RSVG NOTIFY ACL LIBXML2 ZLIB TOOLKIT_SCROLL_BARS NS
>
> Important settings:
> value of $LANG: en_US.UTF-8
> locale-coding-system: utf-8-unix
>
> Major mode: Fundamental
>
> Minor modes in effect:
> tooltip-mode: t
> global-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
> blink-cursor-mode: t
> auto-composition-mode: t
> auto-encryption-mode: t
> auto-compression-mode: t
> buffer-read-only: t
> line-number-mode: t
> transient-mark-mode: t
>
> Load-path shadows:
> None found.
>
> Features:
> (shadow sort mail-extr emacsbug message subr-x puny seq byte-opt gv
> bytecomp byte-compile cl-extra help-mode cconv cl-loaddefs pcase cl-lib
> dired dired-loaddefs format-spec rfc822 mml easymenu mml-sec
> password-cache epa derived epg epg-config gnus-util rmail rmail-loaddefs
> mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils
> mailheader sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr
> mail-utils time-date mule-util tooltip eldoc electric uniquify
> ediff-hook vc-hooks lisp-float-type mwheel term/ns-win ns-win
> ucs-normalize term/common-win tool-bar dnd fontset image regexp-opt
> fringe tabulated-list newcomment elisp-mode lisp-mode prog-mode register
> page menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock
> font-lock syntax facemenu font-core term/tty-colors frame 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 charscript case-table epa-hook
> jka-cmpr-hook help simple abbrev obarray minibuffer 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 kqueue cocoa ns multi-tty
> make-network-process emacs)
>
> Memory information:
> ((conses 16 206717 18560)
> (symbols 48 20249 0)
> (miscs 40 75 177)
> (strings 32 18166 5363)
> (string-bytes 1 584409)
> (vectors 16 35204)
> (vector-slots 8 670777 6763)
> (floats 8 179 123)
> (intervals 56 206 0)
> (buffers 976 12))
>
>
>
>
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
* bug#24856: 25.1.50; Emacs stucks when using C-k to kill lines in python-mode if the next line is a beginning of a docstring
2016-11-02 6:59 ` Clément Pit--Claudel
@ 2016-11-03 2:22 ` npostavs
2016-11-03 5:47 ` Clément Pit--Claudel
0 siblings, 1 reply; 4+ messages in thread
From: npostavs @ 2016-11-03 2:22 UTC (permalink / raw)
To: Clément Pit--Claudel; +Cc: 24856
[-- Attachment #1: Type: text/plain, Size: 636 bytes --]
merge 24856 24839
tags 24856 patch
quit
Clément Pit--Claudel <clement.pit@gmail.com> writes:
> emacs -Q test.py --eval '(insert " \"")'
>
> In other words, a mis-indented string on the first line is enough to
> reproduce the bug.
>
Yes, seems to be the same as 24839.
> It seems to be an infinite loop in fontification:
>
> Debugger entered--Lisp error: (quit)
> python-info-beginning-of-statement-p()
> python-nav--forward-sexp(-1 nil nil)
> python-nav-forward-sexp(-1 nil nil)
> python-nav-backward-sexp()
> python-info-docstring-p((0 nil nil t nil nil 0 nil 5 nil nil))
Here is a patch:
[-- Attachment #2: patch --]
[-- Type: text/plain, Size: 2218 bytes --]
From 5da4f196fc3c8b411936551568477d70a9046421 Mon Sep 17 00:00:00 2001
From: Noam Postavsky <npostavs@gmail.com>
Date: Wed, 2 Nov 2016 21:59:10 -0400
Subject: [PATCH v1] Fix infloop in python docstring detection
The function `python-info-docstring-p' (introduced in 2015-04-05
"python.el: Enhance docstring detection following PEP-257[...]") could
get stuck when called with point before the first expression in the
buffer. The attempted fix in 2015-04-06 "Fix previous commit to prevent
infloop" did not handle the case where there is only whitespace between
the first expression and the beginning of buffer (Bug#24856, Bug#24839).
* lisp/progmodes/python.el (python-info-docstring-p): Stop looping when
`python-nav-backward-sexp' fails to move point.
---
lisp/progmodes/python.el | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index e5efc2b..de06efb 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -4867,13 +4867,14 @@ python-info-docstring-p
2
(progn
(while (save-excursion
- (python-nav-backward-sexp)
- (setq backward-sexp-point (point))
- (and (= indentation (current-indentation))
- (not (bobp)) ; Prevent infloop.
- (looking-at-p
- (concat "[uU]?[rR]?"
- (python-rx string-delimiter)))))
+ (let ((cur-point (point)))
+ (python-nav-backward-sexp)
+ (setq backward-sexp-point (point))
+ (and (= indentation (current-indentation))
+ (/= cur-point (point)) ; Prevent infloop.
+ (looking-at-p
+ (concat "[uU]?[rR]?"
+ (python-rx string-delimiter))))))
;; Previous sexp was a string, restore point.
(goto-char backward-sexp-point)
(cl-incf counter))
--
2.9.3
^ permalink raw reply related [flat|nested] 4+ messages in thread
* bug#24856: 25.1.50; Emacs stucks when using C-k to kill lines in python-mode if the next line is a beginning of a docstring
2016-11-03 2:22 ` npostavs
@ 2016-11-03 5:47 ` Clément Pit--Claudel
0 siblings, 0 replies; 4+ messages in thread
From: Clément Pit--Claudel @ 2016-11-03 5:47 UTC (permalink / raw)
To: npostavs; +Cc: 24856
[-- Attachment #1.1: Type: text/plain, Size: 113 bytes --]
On 2016-11-02 22:22, npostavs@users.sourceforge.net wrote:
> Here is a patch:
Thanks; works great for me!
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2016-11-03 5:47 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-11-02 2:39 bug#24856: 25.1.50; Emacs stucks when using C-k to kill lines in python-mode if the next line is a beginning of a docstring raynewang
2016-11-02 6:59 ` Clément Pit--Claudel
2016-11-03 2:22 ` npostavs
2016-11-03 5:47 ` Clément Pit--Claudel
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).