#[macro_use] extern crate failure; use failure::Error; use termion::raw::IntoRawMode; use termion::screen::AlternateScreen; use tui::backend::TermionBackend; use tui::layout::Rect; use tui::Terminal; use tui_image::{ColorMode, Image}; fn main() { match run() { Ok(_) => {} Err(e) => eprintln!("Error: {:?}", e), } } #[derive(Fail, Debug)] #[fail(display = "Please give an image file as an argument.")] struct UsageError; fn run() -> Result<(), Error> { let img_path = std::env::args().nth(1).ok_or_else(|| UsageError {})?; let img = image::open(img_path)?.to_rgba8(); let stdout = std::io::stdout().into_raw_mode()?; let stdout = AlternateScreen::from(stdout); let backend = TermionBackend::new(stdout); let mut terminal = Terminal::new(backend)?; terminal.hide_cursor()?; terminal.draw(|f| { let size = f.size(); f.render_widget( Image::with_img(img).color_mode(ColorMode::Rgb), Rect { x: 0, y: 0, width: size.width, height: size.height, }, ); })?; Ok(()) }