Augusto Stoffel wrote: > On Sun, 18 Dec 2022 at 12:39, Eli Zaretskii wrote: > >> If I select the `a` or `a = "test"` it will correctly send it to the > >> console, however it won't echo the evaluation of the statement. > > I can at least explain why this happens and is expected. > > An evaluation result is printed only if you send a bunch of statements, > the last of which is an expression. OTOH, since whitespace is > significant in Python, if you evaluate anything that's not a "toplevel > form" it gets wrapper in a `if True:` statement, so the actually > evaluated code is not a simple expression anymore. > > It seems hard to work around this limitation. Sorry for the late reply. As Augusto explained, `if True:` is added to the indented region. This behavior is documented in `python-shell-buffer-substring'. Maybe it's better to add a reference to `python-shell-buffer-substring' in the docstring of `python-shell-send-region'. What I'm trying to do is to improve the behavior in some use cases. Specifically, there is no need to add `if True:` if the region consists of a single statement such as `a` or `a = "test"`. Removing leading spaces should be enough to avoid an indentation error even if the single statement spans multiple lines. The corner case is the following use case. #+begin_src python if True: s = """ a = 1 b = 2 """ #+end_src Let's assume we want to send the lines "a = 1" and "b = 1" only. Although they are part of a single statement (multiline string), `if True:` should be added to avoid an indentation error. In other words, they should not be considered as a single statement. To address such situation, the single statement check should be done after calling `narrow-to-region'. Attached is a patch to achieve this. I appreciate your comments. Thanks,