]> git.eshelyaron.com Git - emacs.git/commitdiff
(python-preoutput-leftover): New var.
authorStefan Monnier <monnier@iro.umontreal.ca>
Mon, 28 Mar 2005 14:36:25 +0000 (14:36 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Mon, 28 Mar 2005 14:36:25 +0000 (14:36 +0000)
(python-preoutput-filter): Use it.
(python-send-receive): Loop until all the result has been received.

lisp/ChangeLog
lisp/progmodes/python.el

index 62f84d0ce41391bb8e2314ce0a8358ac39fd1aed..46f5bdc0880ec5acca3fa335a42e564670b841b4 100644 (file)
@@ -1,3 +1,9 @@
+2005-03-28  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * progmodes/python.el (python-preoutput-leftover): New var.
+       (python-preoutput-filter): Use it.
+       (python-send-receive): Loop until all the result has been received.
+
 2005-03-28  Juri Linkov  <juri@jurta.org>
 
        * dired.el (dired-mode-map): Add ellipsis to "Compare directories".
index 20af0aaf96e034208040f698a6114216a550c4c1..10845b236304f3db8e12b8c0663cb33e1da47572 100644 (file)
@@ -1098,28 +1098,40 @@ Don't save anything for STR matching `inferior-python-filter-regexp'."
 (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= 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-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)))
+            (eq t (compare-strings s nil nil "_emacs_out " nil
+                                   (min (length "_emacs_out ") (length s)))))
+        (setq python-preoutput-leftover s)
         "")
-       (t s)))
+        (t s)))
 
 ;;;###autoload
 (defun run-python (&optional cmd noshow)
@@ -1359,7 +1371,9 @@ The result is what follows `_emacs_out' in the output (or nil)."
   (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