mirror of
https://github.com/xonsh/xonsh.git
synced 2025-03-04 00:14:41 +01:00
prompt: switching to prompt_toolkit in case of stdin with interactive mode (#5536)
### Motivation There is an edge case that we're using mostly in integration tests from the beginning of the world: `echo 'echo 1' | xonsh -i` and it's not working with `TERM=dumb` because dumb is readline. So in this case we need to force using prompt_toolkit to avoid hanging. Closes #5462 #5517 ### Before These all produces hanging because reading stdin is not implemented in readline backend: ```xsh echo whoami | TERM=dumb xonsh -i --no-rc # dumb is readline in fact # or the same echo whoami | xonsh -st dumb -i # dumb is readline in fact # or the same echo whoami | xonsh -st readline -i ``` ### After Switching to prompt_toolkit in these cases. ## For community ⬇️ **Please click the 👍 reaction instead of leaving a `+1` or 👍 comment** --------- Co-authored-by: a <1@1.1> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
parent
584a84d645
commit
0b65348d5e
2 changed files with 34 additions and 1 deletions
23
news/prompt_switch_to_ptk.rst
Normal file
23
news/prompt_switch_to_ptk.rst
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
**Added:**
|
||||||
|
|
||||||
|
* <news item>
|
||||||
|
|
||||||
|
**Changed:**
|
||||||
|
|
||||||
|
* prompt: Switching to prompt_toolkit in edge case of sending stdin to interactive mode (#5462 #5517).
|
||||||
|
|
||||||
|
**Deprecated:**
|
||||||
|
|
||||||
|
* <news item>
|
||||||
|
|
||||||
|
**Removed:**
|
||||||
|
|
||||||
|
* <news item>
|
||||||
|
|
||||||
|
**Fixed:**
|
||||||
|
|
||||||
|
* <news item>
|
||||||
|
|
||||||
|
**Security:**
|
||||||
|
|
||||||
|
* <news item>
|
|
@ -202,9 +202,19 @@ class Shell:
|
||||||
if is_class(backend):
|
if is_class(backend):
|
||||||
cls = backend
|
cls = backend
|
||||||
else:
|
else:
|
||||||
|
"""
|
||||||
|
There is an edge case that we're using mostly in integration tests:
|
||||||
|
`echo 'echo 1' | xonsh -i` and it's not working with `TERM=dumb` (#5462 #5517)
|
||||||
|
because `dumb` is readline where stdin is not supported yet. PR is very welcome!
|
||||||
|
So in this case we need to force using prompt_toolkit.
|
||||||
|
"""
|
||||||
|
is_stdin_to_interactive = (
|
||||||
|
XSH.env.get("XONSH_INTERACTIVE", False) and not sys.stdin.isatty()
|
||||||
|
)
|
||||||
|
|
||||||
if backend == "none":
|
if backend == "none":
|
||||||
from xonsh.base_shell import BaseShell as cls
|
from xonsh.base_shell import BaseShell as cls
|
||||||
elif backend == "prompt_toolkit":
|
elif backend == "prompt_toolkit" or is_stdin_to_interactive:
|
||||||
from xonsh.ptk_shell.shell import PromptToolkitShell as cls
|
from xonsh.ptk_shell.shell import PromptToolkitShell as cls
|
||||||
elif backend == "readline":
|
elif backend == "readline":
|
||||||
from xonsh.readline_shell import ReadlineShell as cls
|
from xonsh.readline_shell import ReadlineShell as cls
|
||||||
|
|
Loading…
Add table
Reference in a new issue