41 lines
1.4 KiB
Rust
41 lines
1.4 KiB
Rust
extern crate termion;
|
|
|
|
use termion::event::Key;
|
|
use termion::input::TermRead;
|
|
use termion::raw::IntoRawMode;
|
|
use termion::screen::{IntoAlternateScreen, ToAlternateScreen, ToMainScreen};
|
|
use std::io::{Write, stdout, stdin};
|
|
|
|
fn write_alt_screen_msg<W: Write>(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();
|
|
}
|