Package: emacs;
Reported by: Bob Rogers <rogers-perl6 <at> rgrjr.dyndns.org>
Date: Wed, 18 Mar 2009 01:30:03 UTC
Severity: normal
Done: Stefan Monnier <monnier <at> iro.umontreal.ca>
Bug is archived. No further changes may be made.
Message #5 received at submit <at> emacsbugs.donarmstrong.com (full text, mbox):
From: Bob Rogers <rogers-perl6 <at> rgrjr.dyndns.org> To: emacs-pretest-bug <at> gnu.org Subject: 23.0.91; Error in Python indenter Date: Tue, 17 Mar 2009 21:24:49 -0400 (EDT)
1. Put the following code into the indent-test.py file: ================ def parse_cvs(self, stream): new_entry \ = Entry(encoded_date = mod.encoded_date, files = mods) # The indenter can't handle this line. combined_entries.append(new_entry) ================ 2. "emacs -Q indent-test.py" 3. Move the cursor anywhere on the comment line, and type TAB. You should see this error message: python-indent-line: Wrong type argument: number-or-marker-p, nil The patch at the bottom to lisp/python.el (rev 1.95, which is current in trunk) addresses the immediate problem, by refusing to add nil to the end of python-indent-list. The resulting behavior is still not right: The indenter then oscillates between indenting by 0 and 8, without considering 4 at all. I suspect that python-beginning-of-statement is getting confused by the mixed continuation style of the previous three lines, and this confusion is the cause of both problems, but I haven't been able to track it further. TIA, -- Bob Rogers http://www.rgrjr.com/ ------------------------------------------------------------------------ In GNU Emacs 23.0.91.1 (i686-pc-linux-gnu, GTK+ Version 2.12.9) of 2009-03-06 on rgr Windowing system distributor `The X.Org Foundation', version 11.0.10400090 Important settings: value of $LC_ALL: nil value of $LC_COLLATE: nil value of $LC_CTYPE: nil value of $LC_MESSAGES: nil value of $LC_MONETARY: nil value of $LC_NUMERIC: nil value of $LC_TIME: nil value of $LANG: en_US.UTF-8 value of $XMODIFIERS: nil locale-coding-system: utf-8-unix default-enable-multibyte-characters: t Major mode: Shell Minor modes in effect: diff-auto-refine-mode: t shell-dirtrack-mode: t mouse-wheel-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-encryption-mode: t auto-compression-mode: t line-number-mode: t Recent input: <backspace> C-u C-SPC C-u C-SPC C-u C-n C-n C-n <tab> C-SPC C-u C-p C-p C-p C-w <tab> C-_ C-e C-f C-e C-f C-k C-k C-k C-k C-k C-k C-n M-f <tab> C-p M-^ C-e C-f <tab> M-f <tab> C-_ C-n <tab> C-n C-n C-u - 4 C-g C-x C-x M-{ C-u - 4 C-x TAB C-SPC C-p C-p C-w C-u C-SPC C-u C-SPC C-p M-b <tab> C-n C-a C-k C-k M-b <tab> C-_ C-_ C-_ M-b <tab> C-n C-n M-> C-w C-u C-SPC C-p M-b <tab> C-u C-p C-p C-p C-a C-SPC C-n C-n C-w C-u C-SPC C-u C-SPC C-u C-j C-SPC C-_ M-> C-p M-b <tab> C-a <tab> M-f M-b C-k T h i s SPC d o e s n ' t SPC i n d e n t SPC c o r r e c t l y . <tab> M-b M-b M-b M-b M-b T h e SPC i n d e n t e r SPC c a n ' t SPC h a n d l e SPC M-l C-k SPC l i n e . q <backspace> <tab> C-f C-e C-f C-f C-x 4 b * M e s <tab> <return> M-> C-p C-p C-p C-p C-SPC C-p M-w C-u C-SPC C-x b f o o <return> M-> <return> C-y C-u C-SPC C-M-f C-M-f C-f C-o C-f C-f C-M-f C-o C-M-f C-o C-f C-f C-e C-M-b C-M-f C-f C-f C-x o C-u C-p C-p M-f M-f C-d C-d C-n M-b = SPC SPC C-n C-p <backspace> C-n SPC SPC C-n <tab> C-p C-p M-^ <backspace> <backspace> C-n C-n <tab> C-_ C-_ C-_ C-x C-s C-x o <f8> e m a c s SPC - Q SPC i n d e <tab> SPC & <return> <help-echo> M-x r e p o r <tab> <re turn> Recent messages: python-indent-list is ((0 . #("def parse_cvs(self, stream):" 0 3 (fontified t face font-lock-keyword-face) 3 4 (fontified t) 4 13 (fontified t face font-lock-function-name-face) 13 14 (fontified t) 14 18 (fontified t face py-pseudo-keyword-face) 18 28 (fontified t))) (8 . #("= Entry(encoded_date = mod.encoded_date," 0 2 (fontified t) 2 26 (fontified t) 26 38 (fontified t) 38 39 (rear-nonsticky t fontified t) 39 40 (fontified t))) nil) [target nil] python-indent-line: Wrong type argument: number-or-marker-p, nil python-indent-list is ((0 . #("def parse_cvs(self, stream):" 0 3 (fontified t face font-lock-keyword-face) 3 4 (fontified t) 4 13 (fontified t face font-lock-function-name-face) 13 14 (fontified t) 14 18 (fontified t face py-pseudo-keyword-face) 18 28 (fontified t))) (4 . #("new_entry = Entry(encoded_date = mod.encoded_date," 0 9 (fontified t) 9 10 (fontified t) 10 12 (fontified t) 12 36 (fontified t) 36 48 (fontified t) 48 49 (rear-nonsticky t fontified t) 49 50 (fontified t)))) [target 4] Undo! [3 times] Auto-saving... Saving file /home/rogers/projects/system/scripts/indent-test.py... Wrote /home/rogers/projects/system/scripts/indent-test.py Partially completed ---------------- Index: lisp/progmodes/python.el =================================================================== RCS file: /sources/emacs/emacs/lisp/progmodes/python.el,v retrieving revision 1.95 diff -c -r1.95 python.el *** lisp/progmodes/python.el 20 Feb 2009 16:30:56 -0000 1.95 --- lisp/progmodes/python.el 18 Mar 2009 00:11:18 -0000 *************** *** 723,731 **** (forward-line) (unless (python-comment-line-p) (let ((elt (assq (current-indentation) python-indent-list))) ! (setq python-indent-list ! (nconc (delete elt python-indent-list) ! (list elt)))))) (caar (last python-indent-list))))))) ;;;; Cycling through the possible indentations with successive TABs. --- 723,732 ---- (forward-line) (unless (python-comment-line-p) (let ((elt (assq (current-indentation) python-indent-list))) ! (when elt ! (setq python-indent-list ! (nconc (delete elt python-indent-list) ! (list elt))))))) (caar (last python-indent-list))))))) ;;;; Cycling through the possible indentations with successive TABs.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.