diff options
author | Guido van Rossum <guido@python.org> | 1995-03-14 21:33:10 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1995-03-14 21:33:10 (GMT) |
commit | 1c1fbf817e7eaf3f755fa498f3e5730d3bfb5396 (patch) | |
tree | 5e39947f597dd914b5a6dab8167851c6a2a66af3 | |
parent | 1d5645d727c97cc95028777ef173e5ad79d55116 (diff) | |
download | cpython-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.el | 65 |
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.") |