mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-15 10:30:25 -08:00
(python-preoutput-leftover): New var.
(python-preoutput-filter): Use it. (python-send-receive): Loop until all the result has been received.
This commit is contained in:
parent
c5568a11c0
commit
12566797d3
2 changed files with 35 additions and 15 deletions
|
|
@ -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-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)
|
||||
"")
|
||||
((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 @@ 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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue