Subject: Re: bug#50514: 28.0.50; org inline call to python src block req C-g to break

From: Augusto Stoffel <[email-masked]>
Date: Tue, 14 Sep 2021 21:36:23 +0200

Lars, can you install the attached patch, which solves the parts of this
issue which originate in my recent changes?  The patch also does the
correct thing w.r.t. the text fields in the comint, something I was
unaware of until yesterday.

Thanks!

>From 096a3cb45baa4ff954c19c1d2d34dd86757ef4f5 Mon Sep 17 00:00:00 2001
From: Augusto Stoffel <[email-masked]>
Date: Tue, 14 Sep 2021 05:31:45 +0200
Subject: [PATCH] Python shell: rearrange printing of newline before output

* progmodes/python.el (python-shell-output-filter-in-progress,
python-shell-output-filter-buffer): Move defvars to avoid compiler
warnings.
(python-shell-eval-setup-code): Don't print a
newline in __PYTHON_EL_eval.
(python-shell-send-string): Insert newline before output when
applicable,
---
 lisp/progmodes/python.el | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index d9fc5c5009..fae350dea2 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -2189,6 +2189,9 @@ python-shell-compilation-regexp-alist
   :type '(alist regexp)
   :group 'python)
 
+(defvar python-shell-output-filter-in-progress nil)
+(defvar python-shell-output-filter-buffer nil)
+
 (defmacro python-shell--add-to-path-with-priority (pathvar paths)
   "Modify PATHVAR and ensure PATHS are added only once at beginning."
   `(dolist (path (reverse ,paths))
@@ -2821,7 +2824,6 @@ python-shell-eval-setup-code
         from __builtin__ import compile, eval, globals
     else:
         from builtins import compile, eval, globals
-    sys.stdout.write('\\n')
     try:
         p, e = ast.parse(source, filename), None
     except SyntaxError:
@@ -3162,6 +3164,11 @@ python-shell-send-string
                       (python-shell--encode-string string)
                       (python-shell--encode-string (or (buffer-file-name)
                                                        "<string>")))))
+    (unless python-shell-output-filter-in-progress
+      (with-current-buffer (process-buffer process)
+        (save-excursion
+          (goto-char (process-mark process))
+          (insert-before-markers "\n"))))
     (if (or (null (process-tty-name process))
             (<= (string-bytes code)
                 (or (bound-and-true-p comint-max-line-length)
@@ -3172,9 +3179,6 @@ python-shell-send-string
              (file-name (or (buffer-file-name) temp-file-name)))
         (python-shell-send-file file-name process temp-file-name t)))))
 
-(defvar python-shell-output-filter-in-progress nil)
-(defvar python-shell-output-filter-buffer nil)
-
 (defun python-shell-output-filter (string)
   "Filter used in `python-shell-send-string-no-output' to grab output.
 STRING is the output received to this point from the process.
-- 
2.31.1