Set the terminal title according to the current step
This commit is contained in:
1
Cargo.lock
generated
1
Cargo.lock
generated
@@ -1906,6 +1906,7 @@ dependencies = [
|
||||
"toml 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"walkdir 2.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"which 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
||||
@@ -35,6 +35,9 @@ openssl-probe = { version = "0.1.2", optional = true }
|
||||
[target.'cfg(unix)'.dependencies]
|
||||
nix = "0.14.0"
|
||||
|
||||
[target.'cfg(windows)'.dependencies]
|
||||
winapi = { version = "0.3", features = ["wincon"] }
|
||||
|
||||
[profile.release]
|
||||
lto = true
|
||||
|
||||
|
||||
@@ -3,9 +3,18 @@ use console::{style, Term};
|
||||
use lazy_static::lazy_static;
|
||||
use std::cmp::{max, min};
|
||||
use std::env;
|
||||
#[cfg(windows)]
|
||||
use std::ffi::OsStr;
|
||||
use std::fmt::Display;
|
||||
use std::io::{self, Write};
|
||||
#[cfg(windows)]
|
||||
use std::iter::once;
|
||||
#[cfg(windows)]
|
||||
use std::os::windows::ffi::OsStrExt;
|
||||
use std::process::Command;
|
||||
use std::sync::Mutex;
|
||||
#[cfg(windows)]
|
||||
use winapi::um::wincon::SetConsoleTitleW;
|
||||
|
||||
lazy_static! {
|
||||
static ref TERMINAL: Mutex<Terminal> = Mutex::new(Terminal::new());
|
||||
@@ -44,6 +53,7 @@ impl Terminal {
|
||||
}
|
||||
|
||||
fn print_separator<P: AsRef<str>>(&mut self, message: P) {
|
||||
set_title(format!("{}Topgrade - {}", self.prefix, message.as_ref()));
|
||||
let now = Local::now();
|
||||
let message = format!(
|
||||
"{}{:02}:{:02}:{:02} - {}",
|
||||
@@ -117,6 +127,7 @@ impl Terminal {
|
||||
return Ok(false);
|
||||
}
|
||||
|
||||
set_title("Topgrade - Awaiting user");
|
||||
self.term
|
||||
.write_fmt(format_args!(
|
||||
"\n{}",
|
||||
@@ -194,3 +205,16 @@ pub fn is_dumb() -> bool {
|
||||
pub fn get_char() -> char {
|
||||
TERMINAL.lock().unwrap().get_char().unwrap()
|
||||
}
|
||||
|
||||
#[cfg(unix)]
|
||||
pub fn set_title<T: Display>(title: T) {
|
||||
print!("\x1b]0;{}\x07", title);
|
||||
}
|
||||
|
||||
#[cfg(windows)]
|
||||
pub fn set_title<T: Display>(title: T) {
|
||||
let buffer: Vec<u16> = OsStr::new(&format!("{}", title)).encode_wide().chain(once(0)).collect();
|
||||
unsafe {
|
||||
SetConsoleTitleW(buffer.as_ptr());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user