-
-
Notifications
You must be signed in to change notification settings - Fork 2.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
The first terminal event is ignored after using stdin
#5535
Comments
Reading from stdin is based on This is a well known issue, and it is the reason we added this to the documentation for
Since your IO is interactive, I recommend not using Tokio's stdin for it. |
I understood it. Thanks. |
`async-std` and `tokio` stdin use `spawn_blocking` to handle stdin, That is, `stdin` task does not end after the timeout, so no input can be processed after opening the TUI. This fix came from upstream: https://github.com/dalance/termbg/tree/non_blocking_stdin, but it was not adopted by upstream because it doesn't compile under Windows, but fortunately oma has no plans to support Windows for the time being. ref: - tokio-rs/tokio#5535 - async-rs/async-std#1055 - zellij-org/zellij#538 - https://github.com/zellij-org/zellij/blob/3569daf7c9cacc1dbbec6a3813079130b4c0683c/zellij-client/src/os_input_output.rs#L270
`async-std` and `tokio` stdin use `spawn_blocking` to handle stdin, That is, `stdin` task does not end after the timeout, so no input can be processed after opening the TUI. This fix came from upstream: https://github.com/dalance/termbg/tree/non_blocking_stdin, but it was not adopted by upstream because it doesn't compile under Windows, but fortunately oma has no plans to support Windows for the time being. ref: - tokio-rs/tokio#5535 - async-rs/async-std#1055 - zellij-org/zellij#538 - https://github.com/zellij-org/zellij/blob/3569daf7c9cacc1dbbec6a3813079130b4c0683c/zellij-client/src/os_input_output.rs#L270
Version
tokio v1.26.0
Platform
x86_64 GNU/Linux
Description
I want to use
tokio::io::stdin
with timeout and terminal event after it.But the first event seems to be ignored.
The procedure of reproduce is below:
I expected to see this happen: the first key pressing is shown
Instead, this happened: the first key pressing is ignored, and the second key pressing is shown.
If
let buf = ...
code block is commented out, the first key pressing is shown.This seems to be the same behaviour as
async_std
.async-rs/async-std#1055
Is there any usage mistake or any known limitation?
The text was updated successfully, but these errors were encountered: