(py-outdent-p): new function
(py-electric-colon, py-indent-line): watch out for intervening blank
or comment lines.
diff --git a/Misc/python-mode.el b/Misc/python-mode.el
index 0d5df7b..619f3f8 100644
--- a/Misc/python-mode.el
+++ b/Misc/python-mode.el
@@ -403,6 +403,19 @@
;; electric characters
+(defun py-outdent-p ()
+ ;; returns non-nil if the current line should outdent one level
+ (save-excursion
+ (and (progn (back-to-indentation)
+ (looking-at py-outdent-re))
+ (progn (backward-to-indentation 1)
+ (while (or (looking-at py-blank-or-comment-re)
+ (bobp))
+ (backward-to-indentation 1))
+ (not (looking-at py-no-outdent-re)))
+ )))
+
+
(defun py-electric-colon (arg)
"Insert a colon.
In certain cases the line is outdented appropriately. If a numeric
@@ -414,13 +427,7 @@
(outdent 0)
(indent (py-compute-indentation)))
(if (and (not arg)
- (progn
- (back-to-indentation)
- (looking-at py-outdent-re))
- (prog2
- (backward-to-indentation 1)
- (not (looking-at py-no-outdent-re))
- (goto-char here))
+ (py-outdent-p)
(= indent (progn
(forward-line -1)
(py-compute-indentation)))
@@ -650,11 +657,7 @@
(move-to-indentation-p (<= (current-column) ci))
(need (py-compute-indentation)))
;; see if we need to outdent
- (if (save-excursion
- (and (progn (back-to-indentation)
- (looking-at py-outdent-re))
- (progn (backward-to-indentation 1)
- (not (looking-at py-no-outdent-re)))))
+ (if (py-outdent-p)
(setq need (- need py-indent-offset)))
(if (/= ci need)
(save-excursion