diff lisp/progmodes/python.el @ 90133:4da4a09e8b1b

Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-31 Merge from emacs--cvs-trunk--0 Patches applied: * emacs--cvs-trunk--0 (patch 206-222) - Update from CVS - Merge from gnus--rel--5.10 * gnus--rel--5.10 (patch 45-52) - Update from CVS - Update from CVS: texi Makefile.in CVS keyw cruft - Update from CVS: ChangeLog tweaks
author Miles Bader <miles@gnu.org>
date Thu, 31 Mar 2005 09:58:14 +0000
parents 3ebd9bdb4fe5 bf4917ef8f38
children 08185296b491
line wrap: on
line diff
--- a/lisp/progmodes/python.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/progmodes/python.el	Thu Mar 31 09:58:14 2005 +0000
@@ -1,6 +1,6 @@
 ;;; python.el --- silly walks for Python
 
-;; Copyright (C) 2003, 2004  Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2004, 2005  Free Software Foundation, Inc.
 
 ;; Author: Dave Love <fx@gnu.org>
 ;; Maintainer: FSF
@@ -336,14 +336,14 @@
     (unless bos (python-beginning-of-statement))
     (back-to-indentation)
     (looking-at (rx (and (or "return" "raise" "break" "continue" "pass")
-			 word-end)))))
+			 symbol-end)))))
 
 (defun python-outdent-p ()
   "Return non-nil if current line should outdent a level."
   (save-excursion
     (back-to-indentation)
-    (and (looking-at (rx (and (or (and (or "else" "finally") word-end)
-				  (and (or "except" "elif") word-end
+    (and (looking-at (rx (and (or (and (or "else" "finally") symbol-end)
+				  (and (or "except" "elif") symbol-end
 				       (1+ (not (any ?:)))))
 			      (optional space) ":" (optional space)
 			      (or (syntax comment-start) line-end))))
@@ -355,8 +355,8 @@
 	 ;; Fixme: check this
 	 (not (looking-at (rx (and (or (and (or "if" "elif" "except"
 						"for" "while")
-					    word-end (1+ (not (any ?:))))
-				       (and "try" word-end))
+					    symbol-end (1+ (not (any ?:))))
+				       (and "try" symbol-end))
 				   (optional space) ":" (optional space)
 				   (or (syntax comment-start) line-end)))))
 	 (progn (end-of-line)
@@ -1098,28 +1098,40 @@
 (defvar python-preoutput-continuation nil
   "If non-nil, funcall this when `python-preoutput-filter' sees `_emacs_ok'.")
 
+(defvar python-preoutput-leftover nil)
+
 ;; Using this stops us getting lines in the buffer like
 ;; >>> ... ... >>>
 ;; Also look for (and delete) an `_emacs_ok' string and call
 ;; `python-preoutput-continuation' if we get it.
 (defun python-preoutput-filter (s)
   "`comint-preoutput-filter-functions' function: ignore prompts not at bol."
+  (when python-preoutput-leftover
+    (setq s (concat python-preoutput-leftover s))
+    (setq python-preoutput-leftover nil))
   (cond ((and (string-match (rx (and string-start (repeat 3 (any ".>"))
-				     " " string-end))
-			    s)
-	      (/= (let ((inhibit-field-text-motion t))
-		    (line-beginning-position))
-		  (point)))
+                                     " " string-end))
+                            s)
+              (/= (let ((inhibit-field-text-motion t))
+                    (line-beginning-position))
+                  (point)))
+         "")
+        ((string= s "_emacs_ok\n")
+         (when python-preoutput-continuation
+           (funcall python-preoutput-continuation)
+           (setq python-preoutput-continuation nil))
+         "")
+        ((string-match "_emacs_out \\(.*\\)\n" s)
+         (setq python-preoutput-result (match-string 1 s))
+         "")
+	((string-match ".*\n" s)
+	 s)
+	((or (eq t (compare-strings s nil nil "_emacs_ok\n" nil (length s)))
+	     (let ((end (min (length "_emacs_out ") (length s))))
+	       (eq t (compare-strings s nil end "_emacs_out " nil end))))
+	 (setq python-preoutput-leftover s)
 	 "")
-	((string= s "_emacs_ok\n")
-	 (when python-preoutput-continuation
-	   (funcall python-preoutput-continuation)
-	   (setq python-preoutput-continuation nil))
-	 "")
-	((string-match "_emacs_out \\(.*\\)\n" s)
-	 (setq python-preoutput-result (match-string 1 s))
-	 "")
-	(t s)))
+        (t s)))
 
 ;;;###autoload
 (defun run-python (&optional cmd noshow)
@@ -1359,7 +1371,9 @@
   (let ((proc (python-proc)))
     (python-send-string string)
     (setq python-preoutput-result nil)
-    (accept-process-output proc 5)
+    (while (progn
+	     (accept-process-output proc 5)
+	     python-preoutput-leftover))
     python-preoutput-result))
 
 ;; Fixme: try to make it work with point in the arglist.  Also, is
@@ -1562,7 +1576,8 @@
 	(beginning-of-defun)
 	(if (looking-at (rx (and (0+ space) (or "def" "class") (1+ space)
 				 (group (1+ (or word (syntax symbol))))
-				 word-end)))
+				 ;; Greediness makes this unnecessary?  --Stef
+				 symbol-end)))
 	    (push (match-string 1) accum)))
       (if accum (mapconcat 'identity accum ".")))))
 
@@ -1702,9 +1717,9 @@
        '(python-font-lock-keywords nil nil ((?_ . "w")) nil
 				   (font-lock-syntactic-keywords
 				    . python-font-lock-syntactic-keywords)
-;;; This probably isn't worth it.
-;;; 				   (font-lock-syntactic-face-function
-;;; 				    . python-font-lock-syntactic-face-function)
+				   ;; This probably isn't worth it.
+				   ;; (font-lock-syntactic-face-function
+				   ;;  . python-font-lock-syntactic-face-function)
 				   ))
   (set (make-local-variable 'parse-sexp-lookup-properties) t)
   (set (make-local-variable 'comment-start) "# ")