Struct Terminal

Source
pub struct Terminal<I: TermIn, O: TermOut> { /* private fields */ }
Expand description

§Terminal

Stores the current termios stuff and derives a new termios object. It also reverts changes on drop. All fields should be treated as private, mutating any of them (pointer magic included) will break the system.

If I implements BufRead, then Terminal will implement BufRead.

Implementations§

Source§

impl<I: TermIn, O: TermOut> Terminal<I, O>

Source

pub fn new(input: I, output: O) -> Result<Self>

constructs a new Terminal object and puts it in control. If you’re using stdin/stdout, it’s recommended to lock them first since it gives you StdinLock/StdoutLock, which gives you the BufRead trait.

Examples found in repository?
examples/naive.rs (line 8)
7fn main() -> io::Result<()> {
8    let mut terminal = TJ::Terminal::new(stdin().lock(), stdout().lock())?;
9    for i in 0 .. 16 {
10        let ri = 15 - i;
11        terminal.foreground(TJ::Colour::Term(i as u8))?;
12        terminal.background(TJ::Colour::Term(ri as u8))?;
13        terminal.write(format!("The colour of term col {i:>02}:{ri:>02}")
14                               .as_bytes())?;
15        terminal.style_clear()?;
16        terminal.write(b"\n")?;
17        terminal.flush()?;
18    }
19    Ok(())
20}
Source

pub fn change<'a>(&'a mut self) -> Transform<'a, I, O>

prep a transform object for changing the current termios object.

Source

pub fn foreground(&mut self, col: Colour) -> Result<()>

§foreground

sets the foreground colour

Examples found in repository?
examples/naive.rs (line 11)
7fn main() -> io::Result<()> {
8    let mut terminal = TJ::Terminal::new(stdin().lock(), stdout().lock())?;
9    for i in 0 .. 16 {
10        let ri = 15 - i;
11        terminal.foreground(TJ::Colour::Term(i as u8))?;
12        terminal.background(TJ::Colour::Term(ri as u8))?;
13        terminal.write(format!("The colour of term col {i:>02}:{ri:>02}")
14                               .as_bytes())?;
15        terminal.style_clear()?;
16        terminal.write(b"\n")?;
17        terminal.flush()?;
18    }
19    Ok(())
20}
Source

pub fn background(&mut self, col: Colour) -> Result<()>

§background

sets the background colour

Examples found in repository?
examples/naive.rs (line 12)
7fn main() -> io::Result<()> {
8    let mut terminal = TJ::Terminal::new(stdin().lock(), stdout().lock())?;
9    for i in 0 .. 16 {
10        let ri = 15 - i;
11        terminal.foreground(TJ::Colour::Term(i as u8))?;
12        terminal.background(TJ::Colour::Term(ri as u8))?;
13        terminal.write(format!("The colour of term col {i:>02}:{ri:>02}")
14                               .as_bytes())?;
15        terminal.style_clear()?;
16        terminal.write(b"\n")?;
17        terminal.flush()?;
18    }
19    Ok(())
20}
Source

pub fn style_clear(&mut self) -> Result<()>

Examples found in repository?
examples/naive.rs (line 15)
7fn main() -> io::Result<()> {
8    let mut terminal = TJ::Terminal::new(stdin().lock(), stdout().lock())?;
9    for i in 0 .. 16 {
10        let ri = 15 - i;
11        terminal.foreground(TJ::Colour::Term(i as u8))?;
12        terminal.background(TJ::Colour::Term(ri as u8))?;
13        terminal.write(format!("The colour of term col {i:>02}:{ri:>02}")
14                               .as_bytes())?;
15        terminal.style_clear()?;
16        terminal.write(b"\n")?;
17        terminal.flush()?;
18    }
19    Ok(())
20}
Source

pub fn pull_utf8(&mut self) -> Result<Option<char>>

Trait Implementations§

Source§

impl<I: TermIn + BufRead, O: TermOut> BufRead for Terminal<I, O>

Source§

fn consume(&mut self, amt: usize)

Marks the given amount of additional bytes from the internal buffer as having been read. Subsequent calls to read only return bytes that have not been marked as read. Read more
Source§

fn fill_buf(&mut self) -> Result<&[u8]>

Returns the contents of the internal buffer, filling it with more data, via Read methods, if empty. Read more
Source§

fn has_data_left(&mut self) -> Result<bool, Error>

🔬This is a nightly-only experimental API. (buf_read_has_data_left)
Checks if there is any data left to be read. Read more
1.0.0 · Source§

fn read_until(&mut self, byte: u8, buf: &mut Vec<u8>) -> Result<usize, Error>

Reads all bytes into buf until the delimiter byte or EOF is reached. Read more
1.83.0 · Source§

fn skip_until(&mut self, byte: u8) -> Result<usize, Error>

Skips all bytes until the delimiter byte or EOF is reached. Read more
1.0.0 · Source§

fn read_line(&mut self, buf: &mut String) -> Result<usize, Error>

Reads all bytes until a newline (the 0xA byte) is reached, and append them to the provided String buffer. Read more
1.0.0 · Source§

fn split(self, byte: u8) -> Split<Self>
where Self: Sized,

Returns an iterator over the contents of this reader split on the byte byte. Read more
1.0.0 · Source§

fn lines(self) -> Lines<Self>
where Self: Sized,

Returns an iterator over the lines of this reader. Read more
Source§

impl<I: TermIn, O: TermOut> Drop for Terminal<I, O>

Source§

fn drop(&mut self)

automatically revert termios object.

Source§

impl<I: TermIn, O: TermOut> Read for Terminal<I, O>

Source§

fn read(&mut self, buf: &mut [u8]) -> Result<usize>

Pull some bytes from this source into the specified buffer, returning how many bytes were read. Read more
1.36.0 · Source§

fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>

Like read, except that it reads into a slice of buffers. Read more
Source§

fn is_read_vectored(&self) -> bool

🔬This is a nightly-only experimental API. (can_vector)
Determines if this Reader has an efficient read_vectored implementation. Read more
1.0.0 · Source§

fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>

Reads all bytes until EOF in this source, placing them into buf. Read more
1.0.0 · Source§

fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>

Reads all bytes until EOF in this source, appending them to buf. Read more
1.6.0 · Source§

fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>

Reads the exact number of bytes required to fill buf. Read more
Source§

fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>

🔬This is a nightly-only experimental API. (read_buf)
Pull some bytes from this source into the specified buffer. Read more
Source§

fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>

🔬This is a nightly-only experimental API. (read_buf)
Reads the exact number of bytes required to fill cursor. Read more
1.0.0 · Source§

fn by_ref(&mut self) -> &mut Self
where Self: Sized,

Creates a “by reference” adaptor for this instance of Read. Read more
1.0.0 · Source§

fn bytes(self) -> Bytes<Self>
where Self: Sized,

Transforms this Read instance to an Iterator over its bytes. Read more
1.0.0 · Source§

fn chain<R>(self, next: R) -> Chain<Self, R>
where R: Read, Self: Sized,

Creates an adapter which will chain this stream with another. Read more
1.0.0 · Source§

fn take(self, limit: u64) -> Take<Self>
where Self: Sized,

Creates an adapter which will read at most limit bytes from it. Read more
Source§

impl<I: TermIn, O: TermOut> Write for Terminal<I, O>

Source§

fn write(&mut self, buf: &[u8]) -> Result<usize>

Writes a buffer into this writer, returning how many bytes were written. Read more
Source§

fn flush(&mut self) -> Result<()>

Flushes this output stream, ensuring that all intermediately buffered contents reach their destination. Read more
1.36.0 · Source§

fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> Result<usize, Error>

Like write, except that it writes from a slice of buffers. Read more
Source§

fn is_write_vectored(&self) -> bool

🔬This is a nightly-only experimental API. (can_vector)
Determines if this Writer has an efficient write_vectored implementation. Read more
1.0.0 · Source§

fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>

Attempts to write an entire buffer into this writer. Read more
Source§

fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>

🔬This is a nightly-only experimental API. (write_all_vectored)
Attempts to write multiple buffers into this writer. Read more
1.0.0 · Source§

fn write_fmt(&mut self, args: Arguments<'_>) -> Result<(), Error>

Writes a formatted string into this writer, returning any error encountered. Read more
1.0.0 · Source§

fn by_ref(&mut self) -> &mut Self
where Self: Sized,

Creates a “by reference” adapter for this instance of Write. Read more

Auto Trait Implementations§

§

impl<I, O> Freeze for Terminal<I, O>
where I: Freeze, O: Freeze,

§

impl<I, O> RefUnwindSafe for Terminal<I, O>

§

impl<I, O> Send for Terminal<I, O>
where I: Send, O: Send,

§

impl<I, O> Sync for Terminal<I, O>
where I: Sync, O: Sync,

§

impl<I, O> Unpin for Terminal<I, O>
where I: Unpin, O: Unpin,

§

impl<I, O> UnwindSafe for Terminal<I, O>
where I: UnwindSafe, O: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.