summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1995-03-14 21:33:10 (GMT)
committerGuido van Rossum <guido@python.org>1995-03-14 21:33:10 (GMT)
commit1c1fbf817e7eaf3f755fa498f3e5730d3bfb5396 (patch)
tree5e39947f597dd914b5a6dab8167851c6a2a66af3
parent1d5645d727c97cc95028777ef173e5ad79d55116 (diff)
downloadcpython-1c1fbf817e7eaf3f755fa498f3e5730d3bfb5396.zip
cpython-1c1fbf817e7eaf3f755fa498f3e5730d3bfb5396.tar.gz
cpython-1c1fbf817e7eaf3f755fa498f3e5730d3bfb5396.tar.bz2
Barry's 2.12 -- fix some bugs in electric colon code
-rw-r--r--Misc/python-mode-old.el65
1 files changed, 43 insertions, 22 deletions
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 @@ Currently-active file is at the head of the list.")
(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 @@ In certain cases the line is outdented appropriately. If a numeric
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 @@ needed so that only a single column position is deleted."
(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 @@ local bindings to py-newline-and-indent."))
(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.")