From: Augusto Stoffel <arstoffel@gmail.com>
To: "Barton, Mark" <Mark.Barton@disney.com>
Cc: Andy Moreton <andrewjmoreton@gmail.com>,
emacs-devel@gnu.org, Andreas Schwab <schwab@linux-m68k.org>,
Stefan Monnier <monnier@iro.umontreal.ca>,
49822@debbugs.gnu.org, Michael Albinus <michael.albinus@gmx.de>,
Lars Ingebrigtsen <larsi@gnus.org>
Subject: bug#49822: master e32c7d2: Change Python eval to send directly instead of using temporary files
Date: Tue, 07 Sep 2021 19:37:41 +0200 [thread overview]
Message-ID: <875yvcmgm2.fsf@gmail.com> (raw)
In-Reply-To: <87r1e1ex7z.fsf@igel.home> (Andreas Schwab's message of "Mon, 06 Sep 2021 13:53:52 +0200")
[-- Attachment #1: Type: text/plain, Size: 1628 bytes --]
On Mon, 6 Sep 2021 at 13:53, Andreas Schwab <schwab@linux-m68k.org> wrote:
> On Sep 06 2021, Michael Albinus wrote:
>
>> Andreas Schwab <schwab@linux-m68k.org> writes:
>>
>>>>> Okay, so is the TTY line length limit of the OS available in Lisp
>>>>> somewhere? Otherwise, can we at least trust that 1024 is the universal
>>>>> lower bound?
>>>>
>>>> On systems with a POSIX shell:
>>>>
>>>> (let ((default-directory "/"))
>>>> (read (shell-command-to-string "getconf LINE_MAX")))
>>>
>>> LINE_MAX has nothing to do with the tty line discipline.
>>
>> I'll never learn it :-(
>>
>> We've discussed this issue some years ago already. IIRC, the outcome was
>> to use "getconf PIPE_BUF /" instead.
>
> Neither has PIPE_BUF.
>
> Andreas.
Okay then. Since there seem to be no better alternatives, I have
attached a new patch reducing the limit to a hard-coded 1024 bytes. If
some day someone adds a variable specifying a more precise limit, then
we can change this.
I have also rearranged things a bit so that the setup code is sent to
the inferior process just once, rather than of on every call to
`python-shell-send-string'. This way, the smaller line length limit
doesn't increase too much the use of temp files, which, as I mentioned,
is slow over ssh.
It would be great if someone with access to a BSD-like OS could test
this. I can only test locally on Linux and over ssh between Linux
machines.
PS: I have some more suggestions around the Python shell. Is the ideal
workflow to keep creating bugs with a small patch to each improvement,
or do you prefer to review a larger collection of changes bundled
together?
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Reduce-limit-of-line-length-sent-to-the-Python-infer.patch --]
[-- Type: text/x-patch, Size: 3680 bytes --]
From 05947ad82219af3f4bcb228f076995f181a7255d Mon Sep 17 00:00:00 2001
From: Augusto Stoffel <arstoffel@gmail.com>
Date: Mon, 6 Sep 2021 23:34:48 +0200
Subject: [PATCH] Reduce limit of line length sent to the Python inferior
* lisp/progmodes/python.el
(python-shell-comint-watch-for-first-prompt-output-filter): Send setup
code to the inferior process only once and at this stage.
(python-shell-send-string-no-output): Revert changes of e32c7d2a8d
(python-shell-send-string): Assume a smaller TTY line length limit,
as required by some OSes.
(python-shell-send-file): Ditto.
---
lisp/progmodes/python.el | 21 +++++++++++++--------
1 file changed, 13 insertions(+), 8 deletions(-)
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index d8ec032402..347c3ffe00 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -2826,6 +2826,15 @@ python-shell-comint-watch-for-first-prompt-output-filter
(setq python-shell--first-prompt-received-output-buffer nil)
(setq-local python-shell--first-prompt-received t)
(setq python-shell--first-prompt-received-output-buffer nil)
+ (cl-letf (((symbol-function 'python-shell-send-string)
+ (lambda (string process)
+ (comint-send-string
+ process
+ (format "exec(%s)\n" (python-shell--encode-string string))))))
+ ;; Bootstrap: the normal definition of `python-shell-send-string'
+ ;; depends on the Python code sent here.
+ (python-shell-send-string-no-output python-shell-eval-setup-code)
+ (python-shell-send-string-no-output python-shell-eval-file-setup-code))
(with-current-buffer (current-buffer)
(let ((inhibit-quit nil))
(run-hooks 'python-shell-first-prompt-hook))))))
@@ -3128,12 +3137,11 @@ python-shell-send-string
(interactive
(list (read-string "Python command: ") nil t))
(let ((process (or process (python-shell-get-process-or-error msg)))
- (code (format "exec(%s);__PYTHON_EL_eval(%s, %s)\n"
- (python-shell--encode-string python-shell-eval-setup-code)
+ (code (format "__PYTHON_EL_eval(%s, %s)\n"
(python-shell--encode-string string)
(python-shell--encode-string (or (buffer-file-name)
"<string>")))))
- (if (<= (string-bytes code) 4096)
+ (if (<= (string-bytes code) 1024)
(comint-send-string process code)
(let* ((temp-file-name (with-current-buffer (process-buffer process)
(python-shell--save-temp-file string)))
@@ -3180,8 +3188,7 @@ python-shell-send-string-no-output
(inhibit-quit t))
(or
(with-local-quit
- (comint-send-string
- process (format "exec(%s)\n" (python-shell--encode-string string)))
+ (python-shell-send-string string process)
(while python-shell-output-filter-in-progress
;; `python-shell-output-filter' takes care of setting
;; `python-shell-output-filter-in-progress' to NIL after it
@@ -3419,9 +3426,7 @@ python-shell-send-file
(comint-send-string
process
(format
- "exec(%s);exec(%s);__PYTHON_EL_eval_file(%s, %s, %s, %s)\n"
- (python-shell--encode-string python-shell-eval-setup-code)
- (python-shell--encode-string python-shell-eval-file-setup-code)
+ "__PYTHON_EL_eval_file(%s, %s, %s, %s)\n"
(python-shell--encode-string file-name)
(python-shell--encode-string (or temp-file-name ""))
(python-shell--encode-string (symbol-name encoding))
--
2.31.1
next prev parent reply other threads:[~2021-09-07 17:37 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20210903122828.16890.65271@vcs0.savannah.gnu.org>
[not found] ` <20210903122829.EAAC220B71@vcs0.savannah.gnu.org>
2021-09-03 23:04 ` master e32c7d2: Change Python eval to send directly instead of using temporary files Stefan Monnier
2021-09-04 9:49 ` bug#49822: " Augusto Stoffel
2021-09-04 13:52 ` Stefan Monnier
2021-09-04 13:52 ` bug#49822: " Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-09-05 6:13 ` Barton, Mark
2021-09-05 7:46 ` bug#49822: " Augusto Stoffel
2021-09-05 8:10 ` Augusto Stoffel
2021-09-05 8:10 ` Augusto Stoffel
2021-09-05 17:18 ` bug#49822: " Mark Barton
2021-09-05 17:33 ` Mark Barton
2021-09-05 17:46 ` Augusto Stoffel
2021-09-05 17:46 ` bug#49822: " Augusto Stoffel
2021-09-05 6:13 ` Barton, Mark
2021-09-05 7:41 ` bug#32042: " Lars Ingebrigtsen
2021-09-05 7:41 ` Lars Ingebrigtsen
2021-09-05 7:41 ` Lars Ingebrigtsen
2021-09-05 16:36 ` Andreas Schwab
2021-09-05 18:40 ` Augusto Stoffel
2021-09-06 7:43 ` Michael Albinus
2021-09-06 7:43 ` Michael Albinus
2021-09-06 8:40 ` Andreas Schwab
2021-09-06 11:23 ` Michael Albinus
2021-09-06 11:23 ` Michael Albinus
2021-09-06 11:53 ` Andreas Schwab
2021-08-02 14:32 ` bug#49822: 28.0.50; python-shell-send functions show no output dalanicolai
2021-08-02 15:11 ` bug#49822: forgot link (and mentioned wrong user) dalanicolai
2021-08-02 15:17 ` bug#49822: 28.0.50; python-shell-send functions show no output Andrea Corallo via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-08-04 7:18 ` Lars Ingebrigtsen
2021-08-05 10:03 ` dalanicolai
2021-08-12 14:57 ` Augusto Stoffel
2021-08-13 11:10 ` Lars Ingebrigtsen
2021-08-13 16:44 ` Andreas Röhler
2021-08-14 9:29 ` Augusto Stoffel
2021-08-15 6:41 ` Andreas Röhler
2021-08-26 8:27 ` Augusto Stoffel
2021-08-26 14:09 ` Lars Ingebrigtsen
2021-08-28 9:28 ` bug#49822: [RFC PATCH] " Augusto Stoffel
2021-08-28 15:41 ` Lars Ingebrigtsen
2021-09-03 8:02 ` bug#49822: [PATCH] " Augusto Stoffel
2021-09-03 12:28 ` Lars Ingebrigtsen
2021-09-06 22:15 ` bug#49822: master e32c7d2: Change Python eval to send directly instead of using temporary files Andy Moreton
2021-09-07 7:18 ` Andreas Schwab
2021-09-06 12:00 ` Michael Albinus
2021-09-06 16:08 ` Augusto Stoffel
2021-09-06 16:08 ` Augusto Stoffel
2021-09-07 17:37 ` Augusto Stoffel [this message]
2021-09-07 17:48 ` Eli Zaretskii
2021-09-07 17:48 ` Eli Zaretskii
2021-09-07 17:59 ` Augusto Stoffel
2021-09-07 17:59 ` Augusto Stoffel
2021-09-07 18:19 ` Eli Zaretskii
2021-09-07 18:13 ` Augusto Stoffel
2021-09-07 18:13 ` Augusto Stoffel
2021-09-07 18:31 ` Eli Zaretskii
2021-09-07 19:00 ` Augusto Stoffel
2021-09-07 19:16 ` Eli Zaretskii
2021-09-08 7:02 ` Michael Albinus
2021-09-08 7:02 ` Michael Albinus
2021-09-07 19:16 ` Eli Zaretskii
2021-09-07 18:31 ` Eli Zaretskii
2021-09-08 3:17 ` Barton, Mark
2021-09-08 5:09 ` Augusto Stoffel
2021-09-08 7:50 ` Lars Ingebrigtsen
2021-09-08 14:05 ` Augusto Stoffel
2021-09-09 13:48 ` Lars Ingebrigtsen
2021-09-08 14:05 ` Augusto Stoffel
2021-09-08 7:50 ` Lars Ingebrigtsen
2021-09-06 8:40 ` Andreas Schwab
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=875yvcmgm2.fsf@gmail.com \
--to=arstoffel@gmail.com \
--cc=49822@debbugs.gnu.org \
--cc=Mark.Barton@disney.com \
--cc=andrewjmoreton@gmail.com \
--cc=emacs-devel@gnu.org \
--cc=larsi@gnus.org \
--cc=michael.albinus@gmx.de \
--cc=monnier@iro.umontreal.ca \
--cc=schwab@linux-m68k.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.