diff options
| author | Gustav Sörnäs <gustav@sornas.net> | 2021-04-28 23:53:28 +0200 |
|---|---|---|
| committer | Gustav Sörnäs <gustav@sornas.net> | 2021-04-28 23:53:28 +0200 |
| commit | 2d1c367f7754a495cb0caf05779e21ce7ba60354 (patch) | |
| tree | d45ebf42ce5fa4811d04e395763a2928387ef285 /src/buffer/mod.rs | |
| parent | 4a33cd02bef5fba633d99cf0e8f5ca55a25e8384 (diff) | |
| download | mail-2d1c367f7754a495cb0caf05779e21ce7ba60354.tar.gz | |
state -> buffer
Diffstat (limited to 'src/buffer/mod.rs')
| -rw-r--r-- | src/buffer/mod.rs | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/buffer/mod.rs b/src/buffer/mod.rs new file mode 100644 index 0000000..fe83a97 --- /dev/null +++ b/src/buffer/mod.rs @@ -0,0 +1,47 @@ +mod threads; + +use std::io::{Stdin, Write}; +use termion::event::Key; +use termion::input::TermRead; + +pub use threads::Threads; + +pub struct Client { + buffers: Vec<Buffer>, +} + +impl Client { + pub fn new(initial_buffer: Buffer) -> Self { + Self { + buffers: vec![initial_buffer], + } + } + + pub fn run<W: Write>(mut self, mut screen: W, stdin: Stdin) { + for c in stdin.keys() { + let c = c.unwrap(); + // Global keybinds + match c { + Key::Char('q') => { + self.buffers.pop().unwrap(); + if self.buffers.is_empty() { + break; + } + }, + _ => () + } + + let next_buffer = match self.buffers.last_mut().unwrap() { + Buffer::Threads(s) => s.tick(&mut screen, c), + }; + + if let Some(next_buffer) = next_buffer { + self.buffers.push(next_buffer); + } + } + } +} + +pub enum Buffer { + Threads(Threads), +} |
