term: Add configurable output stream for `Spinner`
This commit is contained in:
parent
45a4578724
commit
cfc386ed0e
|
|
@ -22,7 +22,7 @@ pub use inquire::ui::Styled;
|
||||||
pub use io::*;
|
pub use io::*;
|
||||||
pub use is_terminal::is_terminal;
|
pub use is_terminal::is_terminal;
|
||||||
pub use label::{label, Label};
|
pub use label::{label, Label};
|
||||||
pub use spinner::{spinner, Spinner};
|
pub use spinner::{spinner, spinner_to, Spinner};
|
||||||
pub use table::Table;
|
pub use table::Table;
|
||||||
pub use textarea::{textarea, TextArea};
|
pub use textarea::{textarea, TextArea};
|
||||||
pub use vstack::{VStack, VStackOptions};
|
pub use vstack::{VStack, VStackOptions};
|
||||||
|
|
|
||||||
|
|
@ -102,16 +102,26 @@ impl Spinner {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Create a new spinner with the given message.
|
/// Create a new spinner with the given message. Sends animation output to `stderr` and success or
|
||||||
|
/// failure messages to `stdout`.
|
||||||
pub fn spinner(message: impl ToString) -> Spinner {
|
pub fn spinner(message: impl ToString) -> Spinner {
|
||||||
|
spinner_to(message, io::stdout(), io::stderr())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create a new spinner with the given message, and send output to the given writers.
|
||||||
|
pub fn spinner_to(
|
||||||
|
message: impl ToString,
|
||||||
|
completion: impl io::Write + Send + 'static,
|
||||||
|
animation: impl io::Write + Send + 'static,
|
||||||
|
) -> Spinner {
|
||||||
let message = message.to_string();
|
let message = message.to_string();
|
||||||
let progress = Arc::new(Mutex::new(Progress::new(Paint::new(message))));
|
let progress = Arc::new(Mutex::new(Progress::new(Paint::new(message))));
|
||||||
let handle = thread::spawn({
|
let handle = thread::spawn({
|
||||||
let progress = progress.clone();
|
let progress = progress.clone();
|
||||||
|
|
||||||
move || {
|
move || {
|
||||||
let mut stdout = io::stdout();
|
let mut stdout = completion;
|
||||||
let mut stderr = termion::cursor::HideCursor::from(io::stderr());
|
let mut stderr = termion::cursor::HideCursor::from(animation);
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let Ok(mut progress) = progress.lock() else {
|
let Ok(mut progress) = progress.lock() else {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue