Get the buffer of StdinLock<'_> without filling it


Could the type StdinLock<'_> provide an access to the buffer like BufReader?

The alternative could be to create a BufReader of io::Stdin and if I want it clonable then I would need to use Rc<RefCell<BufReader<io::Stdin>>>.

What's your end goal? You can use fill_buf to immutably borrow the read-but-not-consumed portion of it.

If the buffer is empty then I try to switch the terminal to raw mode, read a single character else I read the character that's in the buffer.

If I use fill_buf then it will try to fill the buffer which will block.

Sorry, I skipped over that requirement in your subject. Other that double-buffering, you could keep track of how much data is pending yourself (though that seems fragile), or submit a PR to see how the lib team feels about having a buffer method on StdLock like the one on BufReader (the process would take awhile).

Or perhaps termion::async_stdin (or other parts of termion) can serve your needs, if you're working with TTYs.

Thank you.

This topic was automatically closed 90 days after the last reply. We invite you to open a new topic if you have further questions or comments.