Barry's 2.12 -- fix some bugs in electric colon code
diff --git a/Misc/python-mode-old.el b/Misc/python-mode-old.el
index 3560669..2894b9b 100644
--- a/Misc/python-mode-old.el
+++ b/Misc/python-mode-old.el
@@ -6,8 +6,8 @@
;; 1992-1994 Tim Peters <tim@ksr.com>
;; Maintainer: bwarsaw@cnri.reston.va.us
;; Created: Feb 1992
-;; Version: 2.11
-;; Last Modified: 1995/03/14 18:32:54
+;; Version: 2.12
+;; Last Modified: 1995/03/14 20:53:08
;; Keywords: python editing language major-mode
;; This software is provided as-is, without express or implied
@@ -68,7 +68,7 @@
;; LCD Archive Entry:
;; python-mode|Barry A. Warsaw|bwarsaw@cnri.reston.va.us
;; |Major mode for editing Python programs
-;; |1995/03/14 18:32:54|2.11|
+;; |1995/03/14 20:53:08|2.12|
;;; Code:
@@ -310,13 +310,25 @@
(defconst py-outdent-re
(concat "\\(" (mapconcat 'identity
'("else:"
- "except\\s +.*:"
+ "except\\(\\s +.*\\)?:"
"finally:"
"elif\\s +.*:")
"\\|")
"\\)")
"Regexp matching clauses to be outdented one level.")
+(defconst py-no-outdent-re
+ (concat "\\(" (mapconcat 'identity
+ '("try\\s +.*:"
+ "except\\(\\s +.*\\)?:"
+ "while\\s +.*:"
+ "for\\s +.*:"
+ "if\\s +.*:"
+ "elif\\s +.*:")
+ "\\|")
+ "\\)")
+ "Regexp matching lines to not outdent after.")
+
;;;###autoload
(defun python-mode ()
@@ -397,20 +409,27 @@
argument is provided, that many colons are inserted non-electrically."
(interactive "P")
(self-insert-command (prefix-numeric-value arg))
- (let (this-indent)
- (if (and (not arg)
- (save-excursion
- (back-to-indentation)
- (looking-at py-outdent-re))
- (= (setq this-indent (py-compute-indentation))
- (save-excursion
- (forward-line -1)
- (py-compute-indentation)))
- )
- (save-excursion
- (beginning-of-line)
- (delete-horizontal-space)
- (indent-to (- this-indent py-indent-offset)))
+ (save-excursion
+ (let ((here (point))
+ (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))
+ (= indent (progn
+ (forward-line -1)
+ (py-compute-indentation)))
+ )
+ (setq outdent py-indent-offset))
+ (goto-char here)
+ (beginning-of-line)
+ (delete-horizontal-space)
+ (indent-to (- indent outdent))
)))
@@ -630,10 +649,12 @@
(let* ((ci (current-indentation))
(move-to-indentation-p (<= (current-column) ci))
(need (py-compute-indentation)))
- ;; watch for outdents
+ ;; see if we need to outdent
(if (save-excursion
- (back-to-indentation)
- (looking-at py-outdent-re))
+ (and (progn (back-to-indentation)
+ (looking-at py-outdent-re))
+ (progn (backward-to-indentation 1)
+ (not (looking-at py-no-outdent-re)))))
(setq need (- need py-indent-offset)))
(if (/= ci need)
(save-excursion
@@ -1839,7 +1860,7 @@
(setq zmacs-region-stays t)))
-(defconst py-version "2.11"
+(defconst py-version "2.12"
"`python-mode' version number.")
(defconst py-help-address "bwarsaw@cnri.reston.va.us"
"Address accepting submission of bug reports.")