extern crate termion; use std::io::{stdin, stdout, Write}; use termion::event::Key; use termion::input::TermRead; use termion::raw::IntoRawMode; use termion::screen::{IntoAlternateScreen, ToAlternateScreen, ToMainScreen}; fn write_alt_screen_msg(screen: &mut W) { write!(screen, "{}{}Welcome to the alternate screen.{}Press '1' to switch to the main screen or '2' to switch to the alternate screen.{}Press 'q' to exit (and switch back to the main screen).", termion::clear::All, termion::cursor::Goto(1, 1), termion::cursor::Goto(1, 3), termion::cursor::Goto(1, 4)).unwrap(); } fn main() { let stdin = stdin(); let mut screen = stdout() .into_raw_mode() .unwrap() .into_alternate_screen() .unwrap(); write!(screen, "{}", termion::cursor::Hide).unwrap(); write_alt_screen_msg(&mut screen); screen.flush().unwrap(); for c in stdin.keys() { match c.unwrap() { Key::Char('q') => break, Key::Char('1') => { write!(screen, "{}", ToMainScreen).unwrap(); } Key::Char('2') => { write!(screen, "{}", ToAlternateScreen).unwrap(); write_alt_screen_msg(&mut screen); } _ => {} } screen.flush().unwrap(); } write!(screen, "{}", termion::cursor::Show).unwrap(); }