(py-outdent-re): new constant

(py-electric-colon): use py-outdent-re instead of hardcoding

(py-indent-line): look for py-outdent-re and outdent a level
accordingly
diff --git a/Misc/python-mode.el b/Misc/python-mode.el
index 194caa5..07b00f8 100644
--- a/Misc/python-mode.el
+++ b/Misc/python-mode.el
@@ -290,6 +290,15 @@
 (defconst py-blank-or-comment-re "[ \t]*\\($\\|#\\)"
   "Regexp matching blank or comment lines.")
 
+(defconst py-outdent-re
+  (concat "\\(" (mapconcat 'identity
+			   '("else:"
+			     "except\\s +.*:"
+			     "finally:"
+			     "elif\\s +.*:")
+			   "\\|")
+	  "\\)")
+  "Regexp matching clauses to be outdented one level.")
 
 
 ;;;###autoload
@@ -374,8 +383,8 @@
   (let (this-indent)
     (if (and (not arg)
 	     (save-excursion
-	       (forward-word -1)
-	       (looking-at "\\(else\\|except\\|finally\\elif\\):"))
+	       (back-to-indentation)
+	       (looking-at py-outdent-re))
 	     (= (setq this-indent (py-compute-indentation))
 		(save-excursion
 		  (forward-line -1)
@@ -604,6 +613,11 @@
   (let* ((ci (current-indentation))
 	 (move-to-indentation-p (<= (current-column) ci))
 	 (need (py-compute-indentation)))
+    ;; watch for outdents
+    (if (save-excursion
+	  (back-to-indentation)
+	  (looking-at py-outdent-re))
+	(setq need (- need py-indent-offset)))
     (if (/= ci need)
 	(save-excursion
 	  (beginning-of-line)