4c14ad836b
working for windows 10 terminals. Refactored usings. Rearanged usings. Raw Mode / alternate screeen windows yet to be tested. Added examples. Refactored code
70 lines
1.9 KiB
Rust
70 lines
1.9 KiB
Rust
extern crate crossterm;
|
|
|
|
use crossterm::terminal::screen::{AlternateScreen, ToAlternateScreen, ToMainScreen};
|
|
use crossterm::cursor::cursor;
|
|
use crossterm::terminal::{self, ClearType};
|
|
|
|
use std::io::{Write, stdout};
|
|
use std::{time, thread};
|
|
|
|
fn print_wait_screen(screen: &mut Write)
|
|
{
|
|
terminal::terminal().clear(ClearType::All);
|
|
write!(screen,
|
|
"Welcome to the wait screen.\n\
|
|
Please wait a few seconds until we arrive back at the main screen.\n\
|
|
Seconds to Go: "
|
|
);
|
|
|
|
let mut counter = 5;
|
|
// get cursor instance
|
|
let mut cursor = cursor();
|
|
|
|
// loop until the counter hits 0
|
|
loop
|
|
{
|
|
// 1 second delay
|
|
thread::sleep(time::Duration::from_secs(1));
|
|
// decrement counter
|
|
counter -= 1;
|
|
|
|
// print the current counter at the line of `Seconds to Go: {counter}`
|
|
cursor.goto(15,2).print(counter);
|
|
|
|
if counter <= 0
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
pub fn with_alternate_screen_instance()
|
|
{
|
|
// create scope. If this scope ends the screen will be switched back to mainscreen.
|
|
// becouse `AlternateScreen` switches back to main screen when switching back.
|
|
{
|
|
// create new alternate screen instance and switch to the alternate screen.
|
|
let mut screen = AlternateScreen::from(stdout());
|
|
|
|
// Print the wait screen.
|
|
print_wait_screen(&mut screen);
|
|
}
|
|
|
|
println!("Whe are back at the main screen");
|
|
}
|
|
|
|
pub fn manually_switch_to_alternate_screen()
|
|
{
|
|
// You can switch to alternate screen manually but if you forget to switch back your terminal may cause some undefined behavior.
|
|
|
|
let mut screen = stdout();
|
|
|
|
// switch to alternate screeen
|
|
write!(screen, "{}", ToAlternateScreen);
|
|
// load wait screen
|
|
print_wait_screen(&mut screen);
|
|
// switch back
|
|
write!(screen,"{}", ToMainScreen);
|
|
println!("Whe are back at the main screen");
|
|
|
|
} |