use std::io::{self, Write}; use { Context, Terminal }; use super::IScreenManager; use super::super::state::commands::ICommand; use super::super::state::commands::shared_commands::ToAlternateScreenBufferCommand; pub struct AnsiScreenManager { is_alternate_screen: bool, output: Output, } impl IScreenManager for AnsiScreenManager { fn stdout(&mut self) -> &mut Output { return &mut self.output } fn register_output(&mut self, output: Output, is_alternate_screen: bool) { self.output = output; self.is_alternate_screen = is_alternate_screen; } fn write_ansi(&mut self, string: String) { match self.is_alternate_screen { true => write!(self.output, "{}", string), false => write!(io::stdout(), "{}", string), }; } fn write_ansi_str(&mut self, string: &str) { match self.is_alternate_screen { true => write!(self.output, "{}", string), false => write!(io::stdout(), "{}", string), }; } } impl AnsiScreenManager> { pub fn new() -> Self { AnsiScreenManager { output: (Box::from(io::stdout()) as Box), is_alternate_screen: false } } } impl Write for AnsiScreenManager { fn write(&mut self, buf: &[u8]) -> io::Result { self.output.write(buf) } fn flush(&mut self) -> io::Result<()> { self.stdout().flush() } }