Struct Terminal

Source
pub struct Terminal {
    pub size: (u16, u16),
    pub screen: Vec<Vec<Char>>,
}
Expand description

Struct that represents a terminal

Fields§

§size: (u16, u16)§screen: Vec<Vec<Char>>

Implementations§

Source§

impl Terminal

Source

pub fn new(cfg: &Config) -> Self

Source

pub fn reinit(&mut self, cfg: &Config)

Reload terminal to adapt new window size

Examples found in repository?
examples/heart.rs (line 49)
23fn main() -> Result<()> {
24    let mut stdout = stdout();
25    let (_width, _height) = terminal::size()?;
26    let mut is_running = true;
27    let cfg = Config::default();
28
29    terminal::enable_raw_mode()?;
30    execute!(stdout, terminal::EnterAlternateScreen, cursor::Hide)?;
31
32    let mut time = SystemTime::now();
33    let mut term = Terminal::default();
34    let mut fm = FireworkManager::default().with_firework(gen_heart_firework(Vec2::new(
35        _width as f32 / 4.,
36        _height as f32 / 2.,
37    )));
38
39    while is_running {
40        if event::poll(Duration::ZERO)? {
41            match event::read()? {
42                event::Event::Key(e) => {
43                    if e.code == KeyCode::Esc {
44                        is_running = false;
45                    }
46                }
47                event::Event::Resize(_, _) => {
48                    fm.reset();
49                    term.reinit(&cfg);
50                }
51                _ => {}
52            };
53        }
54
55        let delta_time = SystemTime::now().duration_since(time).unwrap();
56        fm.update(time, delta_time);
57        time = SystemTime::now();
58
59        term.render(&fm, &cfg);
60        term.print(&mut stdout, &cfg);
61
62        if delta_time < Duration::from_secs_f32(0.05) {
63            let rem = Duration::from_secs_f32(0.05) - delta_time;
64            sleep(rem);
65        }
66    }
67
68    execute!(stdout, cursor::Show, terminal::LeaveAlternateScreen)?;
69    terminal::disable_raw_mode()?;
70
71    Ok(())
72}
More examples
Hide additional examples
examples/vortex.rs (line 48)
22fn main() -> Result<()> {
23    let mut stdout = stdout();
24    let (_width, _height) = terminal::size()?;
25    let mut is_running = true;
26    let cfg = Config::default();
27
28    terminal::enable_raw_mode()?;
29    execute!(stdout, terminal::EnterAlternateScreen, cursor::Hide)?;
30
31    let mut time = SystemTime::now();
32    let mut term = Terminal::default();
33    let mut fm = FireworkManager::default().with_firework(gen_vortex_firework(Vec2::new(
34        _width as f32 / 4.,
35        _height as f32 / 2.,
36    )));
37
38    while is_running {
39        if event::poll(Duration::ZERO)? {
40            match event::read()? {
41                event::Event::Key(e) => {
42                    if e.code == KeyCode::Esc {
43                        is_running = false;
44                    }
45                }
46                event::Event::Resize(_, _) => {
47                    fm.reset();
48                    term.reinit(&cfg);
49                }
50                _ => {}
51            };
52        }
53
54        let delta_time = SystemTime::now().duration_since(time).unwrap();
55        fm.update(time, delta_time);
56        time = SystemTime::now();
57
58        term.render(&fm, &cfg);
59        term.print(&mut stdout, &cfg);
60
61        if delta_time < Duration::from_secs_f32(0.05) {
62            let rem = Duration::from_secs_f32(0.05) - delta_time;
63            sleep(rem);
64        }
65    }
66
67    execute!(stdout, cursor::Show, terminal::LeaveAlternateScreen)?;
68    terminal::disable_raw_mode()?;
69
70    Ok(())
71}
examples/fountain.rs (line 49)
23fn main() -> Result<()> {
24    let mut stdout = stdout();
25    let (_width, _height) = terminal::size()?;
26    let mut is_running = true;
27    let cfg = Config::default();
28
29    terminal::enable_raw_mode()?;
30    execute!(stdout, terminal::EnterAlternateScreen, cursor::Hide)?;
31
32    let mut time = SystemTime::now();
33    let mut term = Terminal::default();
34    let mut fm = FireworkManager::default().with_firework(gen_fountain_firework(Vec2::new(
35        _width as f32 / 4.,
36        _height as f32 / 2. + 13.,
37    )));
38
39    while is_running {
40        if event::poll(Duration::ZERO)? {
41            match event::read()? {
42                event::Event::Key(e) => {
43                    if e.code == KeyCode::Esc {
44                        is_running = false;
45                    }
46                }
47                event::Event::Resize(_, _) => {
48                    fm.reset();
49                    term.reinit(&cfg);
50                }
51                _ => {}
52            };
53        }
54
55        let delta_time = SystemTime::now().duration_since(time).unwrap();
56        fm.update(time, delta_time);
57        time = SystemTime::now();
58
59        term.render(&fm, &cfg);
60        term.print(&mut stdout, &cfg);
61
62        if delta_time < Duration::from_secs_f32(0.05) {
63            let rem = Duration::from_secs_f32(0.05) - delta_time;
64            sleep(rem);
65        }
66    }
67
68    execute!(stdout, cursor::Show, terminal::LeaveAlternateScreen)?;
69    terminal::disable_raw_mode()?;
70
71    Ok(())
72}
Source

pub fn clear_screen(&mut self)

Clear the terminal screen by setting all the characters in terminal to space

Source

pub fn print(&self, w: &mut Stdout, cfg: &Config)

Print the data out to terminal

Examples found in repository?
examples/heart.rs (line 60)
23fn main() -> Result<()> {
24    let mut stdout = stdout();
25    let (_width, _height) = terminal::size()?;
26    let mut is_running = true;
27    let cfg = Config::default();
28
29    terminal::enable_raw_mode()?;
30    execute!(stdout, terminal::EnterAlternateScreen, cursor::Hide)?;
31
32    let mut time = SystemTime::now();
33    let mut term = Terminal::default();
34    let mut fm = FireworkManager::default().with_firework(gen_heart_firework(Vec2::new(
35        _width as f32 / 4.,
36        _height as f32 / 2.,
37    )));
38
39    while is_running {
40        if event::poll(Duration::ZERO)? {
41            match event::read()? {
42                event::Event::Key(e) => {
43                    if e.code == KeyCode::Esc {
44                        is_running = false;
45                    }
46                }
47                event::Event::Resize(_, _) => {
48                    fm.reset();
49                    term.reinit(&cfg);
50                }
51                _ => {}
52            };
53        }
54
55        let delta_time = SystemTime::now().duration_since(time).unwrap();
56        fm.update(time, delta_time);
57        time = SystemTime::now();
58
59        term.render(&fm, &cfg);
60        term.print(&mut stdout, &cfg);
61
62        if delta_time < Duration::from_secs_f32(0.05) {
63            let rem = Duration::from_secs_f32(0.05) - delta_time;
64            sleep(rem);
65        }
66    }
67
68    execute!(stdout, cursor::Show, terminal::LeaveAlternateScreen)?;
69    terminal::disable_raw_mode()?;
70
71    Ok(())
72}
More examples
Hide additional examples
examples/vortex.rs (line 59)
22fn main() -> Result<()> {
23    let mut stdout = stdout();
24    let (_width, _height) = terminal::size()?;
25    let mut is_running = true;
26    let cfg = Config::default();
27
28    terminal::enable_raw_mode()?;
29    execute!(stdout, terminal::EnterAlternateScreen, cursor::Hide)?;
30
31    let mut time = SystemTime::now();
32    let mut term = Terminal::default();
33    let mut fm = FireworkManager::default().with_firework(gen_vortex_firework(Vec2::new(
34        _width as f32 / 4.,
35        _height as f32 / 2.,
36    )));
37
38    while is_running {
39        if event::poll(Duration::ZERO)? {
40            match event::read()? {
41                event::Event::Key(e) => {
42                    if e.code == KeyCode::Esc {
43                        is_running = false;
44                    }
45                }
46                event::Event::Resize(_, _) => {
47                    fm.reset();
48                    term.reinit(&cfg);
49                }
50                _ => {}
51            };
52        }
53
54        let delta_time = SystemTime::now().duration_since(time).unwrap();
55        fm.update(time, delta_time);
56        time = SystemTime::now();
57
58        term.render(&fm, &cfg);
59        term.print(&mut stdout, &cfg);
60
61        if delta_time < Duration::from_secs_f32(0.05) {
62            let rem = Duration::from_secs_f32(0.05) - delta_time;
63            sleep(rem);
64        }
65    }
66
67    execute!(stdout, cursor::Show, terminal::LeaveAlternateScreen)?;
68    terminal::disable_raw_mode()?;
69
70    Ok(())
71}
examples/fountain.rs (line 60)
23fn main() -> Result<()> {
24    let mut stdout = stdout();
25    let (_width, _height) = terminal::size()?;
26    let mut is_running = true;
27    let cfg = Config::default();
28
29    terminal::enable_raw_mode()?;
30    execute!(stdout, terminal::EnterAlternateScreen, cursor::Hide)?;
31
32    let mut time = SystemTime::now();
33    let mut term = Terminal::default();
34    let mut fm = FireworkManager::default().with_firework(gen_fountain_firework(Vec2::new(
35        _width as f32 / 4.,
36        _height as f32 / 2. + 13.,
37    )));
38
39    while is_running {
40        if event::poll(Duration::ZERO)? {
41            match event::read()? {
42                event::Event::Key(e) => {
43                    if e.code == KeyCode::Esc {
44                        is_running = false;
45                    }
46                }
47                event::Event::Resize(_, _) => {
48                    fm.reset();
49                    term.reinit(&cfg);
50                }
51                _ => {}
52            };
53        }
54
55        let delta_time = SystemTime::now().duration_since(time).unwrap();
56        fm.update(time, delta_time);
57        time = SystemTime::now();
58
59        term.render(&fm, &cfg);
60        term.print(&mut stdout, &cfg);
61
62        if delta_time < Duration::from_secs_f32(0.05) {
63            let rem = Duration::from_secs_f32(0.05) - delta_time;
64            sleep(rem);
65        }
66    }
67
68    execute!(stdout, cursor::Show, terminal::LeaveAlternateScreen)?;
69    terminal::disable_raw_mode()?;
70
71    Ok(())
72}
Source

pub fn render(&mut self, fm: &FireworkManager, cfg: &Config)

Write the rendering data of all Fireworks and Particles to Terminal

Examples found in repository?
examples/heart.rs (line 59)
23fn main() -> Result<()> {
24    let mut stdout = stdout();
25    let (_width, _height) = terminal::size()?;
26    let mut is_running = true;
27    let cfg = Config::default();
28
29    terminal::enable_raw_mode()?;
30    execute!(stdout, terminal::EnterAlternateScreen, cursor::Hide)?;
31
32    let mut time = SystemTime::now();
33    let mut term = Terminal::default();
34    let mut fm = FireworkManager::default().with_firework(gen_heart_firework(Vec2::new(
35        _width as f32 / 4.,
36        _height as f32 / 2.,
37    )));
38
39    while is_running {
40        if event::poll(Duration::ZERO)? {
41            match event::read()? {
42                event::Event::Key(e) => {
43                    if e.code == KeyCode::Esc {
44                        is_running = false;
45                    }
46                }
47                event::Event::Resize(_, _) => {
48                    fm.reset();
49                    term.reinit(&cfg);
50                }
51                _ => {}
52            };
53        }
54
55        let delta_time = SystemTime::now().duration_since(time).unwrap();
56        fm.update(time, delta_time);
57        time = SystemTime::now();
58
59        term.render(&fm, &cfg);
60        term.print(&mut stdout, &cfg);
61
62        if delta_time < Duration::from_secs_f32(0.05) {
63            let rem = Duration::from_secs_f32(0.05) - delta_time;
64            sleep(rem);
65        }
66    }
67
68    execute!(stdout, cursor::Show, terminal::LeaveAlternateScreen)?;
69    terminal::disable_raw_mode()?;
70
71    Ok(())
72}
More examples
Hide additional examples
examples/vortex.rs (line 58)
22fn main() -> Result<()> {
23    let mut stdout = stdout();
24    let (_width, _height) = terminal::size()?;
25    let mut is_running = true;
26    let cfg = Config::default();
27
28    terminal::enable_raw_mode()?;
29    execute!(stdout, terminal::EnterAlternateScreen, cursor::Hide)?;
30
31    let mut time = SystemTime::now();
32    let mut term = Terminal::default();
33    let mut fm = FireworkManager::default().with_firework(gen_vortex_firework(Vec2::new(
34        _width as f32 / 4.,
35        _height as f32 / 2.,
36    )));
37
38    while is_running {
39        if event::poll(Duration::ZERO)? {
40            match event::read()? {
41                event::Event::Key(e) => {
42                    if e.code == KeyCode::Esc {
43                        is_running = false;
44                    }
45                }
46                event::Event::Resize(_, _) => {
47                    fm.reset();
48                    term.reinit(&cfg);
49                }
50                _ => {}
51            };
52        }
53
54        let delta_time = SystemTime::now().duration_since(time).unwrap();
55        fm.update(time, delta_time);
56        time = SystemTime::now();
57
58        term.render(&fm, &cfg);
59        term.print(&mut stdout, &cfg);
60
61        if delta_time < Duration::from_secs_f32(0.05) {
62            let rem = Duration::from_secs_f32(0.05) - delta_time;
63            sleep(rem);
64        }
65    }
66
67    execute!(stdout, cursor::Show, terminal::LeaveAlternateScreen)?;
68    terminal::disable_raw_mode()?;
69
70    Ok(())
71}
examples/fountain.rs (line 59)
23fn main() -> Result<()> {
24    let mut stdout = stdout();
25    let (_width, _height) = terminal::size()?;
26    let mut is_running = true;
27    let cfg = Config::default();
28
29    terminal::enable_raw_mode()?;
30    execute!(stdout, terminal::EnterAlternateScreen, cursor::Hide)?;
31
32    let mut time = SystemTime::now();
33    let mut term = Terminal::default();
34    let mut fm = FireworkManager::default().with_firework(gen_fountain_firework(Vec2::new(
35        _width as f32 / 4.,
36        _height as f32 / 2. + 13.,
37    )));
38
39    while is_running {
40        if event::poll(Duration::ZERO)? {
41            match event::read()? {
42                event::Event::Key(e) => {
43                    if e.code == KeyCode::Esc {
44                        is_running = false;
45                    }
46                }
47                event::Event::Resize(_, _) => {
48                    fm.reset();
49                    term.reinit(&cfg);
50                }
51                _ => {}
52            };
53        }
54
55        let delta_time = SystemTime::now().duration_since(time).unwrap();
56        fm.update(time, delta_time);
57        time = SystemTime::now();
58
59        term.render(&fm, &cfg);
60        term.print(&mut stdout, &cfg);
61
62        if delta_time < Duration::from_secs_f32(0.05) {
63            let rem = Duration::from_secs_f32(0.05) - delta_time;
64            sleep(rem);
65        }
66    }
67
68    execute!(stdout, cursor::Show, terminal::LeaveAlternateScreen)?;
69    terminal::disable_raw_mode()?;
70
71    Ok(())
72}

Trait Implementations§

Source§

impl Default for Terminal

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V