Skip to content

Commit

Permalink
Support for disabling the cursor in the pretty line renderer
Browse files Browse the repository at this point in the history
  • Loading branch information
Byron committed Jul 11, 2020
1 parent 1f1b725 commit 48c4bbd
Show file tree
Hide file tree
Showing 5 changed files with 69 additions and 8 deletions.
30 changes: 30 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ doctest = false

[features]
default = ["max"]

max = ["fast", "pretty-cli", "prodash/tui-renderer-crossterm", "prodash-line-renderer-crossterm"]
max-termion = ["fast", "pretty-cli", "prodash/tui-renderer-termion", "prodash-line-renderer-termion"]
lean = ["fast", "lean-cli", "prodash-line-renderer-crossterm"]
Expand All @@ -37,6 +38,7 @@ pretty-cli = ["structopt",
"prodash/log-renderer",
"prodash-tui-renderer",
"prodash-line-renderer",
"ctrlc",
"prodash/localtime",
"env_logger",
"smol"]
Expand All @@ -63,6 +65,7 @@ smol = { version = "0.1.18", optional = true, default-features = false }
atty = { version = "0.2.14", optional = true, default-features = false }
env_logger = { version = "0.7.1", optional = true, default-features = false, features = ["humantime", "termcolor", "atty"] }
crosstermion = { version = "0.1.5", optional = true, default-features = false }
ctrlc = { version = "3.1.4", optional = true, default-features = false, features = ['termination'] }

[profile.release]
overflow-checks = false
Expand Down
2 changes: 1 addition & 1 deletion src/plumbing/lean.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ fn prepare(verbose: bool, name: &str) -> (Option<prodash::line::JoinHandle>, Opt
if verbose {
let progress = prodash::Tree::new();
let sub_progress = progress.add_child(name);
let handle = crate::shared::setup_line_renderer(progress, 2);
let handle = crate::shared::setup_line_renderer(progress, 2, false);
(Some(handle), Some(sub_progress))
} else {
(None, None)
Expand Down
35 changes: 29 additions & 6 deletions src/plumbing/pretty.rs
Original file line number Diff line number Diff line change
Expand Up @@ -70,10 +70,34 @@ fn prepare_and_run<T: Send + 'static>(
match (verbose, progress) {
(false, false) => run(None, &mut stdout(), &mut stderr()),
(true, false) => {
enum Event<T> {
UIDone,
ComputationDone(Result<T>),
};
let progress = prodash::Tree::new();
let sub_progress = progress.add_child(name);
let _handle = crate::shared::setup_line_renderer(progress, 2);
run(Some(sub_progress), &mut stdout(), &mut stderr())
let (tx, rx) = std::sync::mpsc::sync_channel::<Event<T>>(1);
let ui_handle = crate::shared::setup_line_renderer(progress, 2, true);
ctrlc::set_handler({
let tx = tx.clone();
move || {
tx.send(Event::UIDone).ok();
}
})?;
std::thread::spawn(move || {
let res = run(Some(sub_progress), &mut stdout(), &mut stderr());
tx.send(Event::ComputationDone(res)).ok();
});
match rx.recv()? {
Event::UIDone => {
ui_handle.shutdown_and_wait();
Err(anyhow!("Operation cancelled by user"))
}
Event::ComputationDone(res) => {
ui_handle.shutdown_and_wait();
res
}
}
}
(true, true) | (false, true) => {
enum Event<T> {
Expand Down Expand Up @@ -109,15 +133,14 @@ fn prepare_and_run<T: Send + 'static>(
let res = run(Some(sub_progress), &mut out, &mut err);
tx.send(Event::ComputationDone(res, out, err)).ok();
});
match rx.recv() {
Ok(Event::UIDone) => Err(anyhow!("Operation cancelled by user")),
Ok(Event::ComputationDone(res, out, err)) => {
match rx.recv()? {
Event::UIDone => Err(anyhow!("Operation cancelled by user")),
Event::ComputationDone(res, out, err) => {
ui_handle.join().ok();
stdout().write_all(&out)?;
stderr().write_all(&err)?;
res
}
_ => Err(anyhow!("Error communicating with threads")),
}
}
}
Expand Down
7 changes: 6 additions & 1 deletion src/shared.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@
pub const DEFAULT_FRAME_RATE: f32 = 6.0;

#[cfg(feature = "prodash-line-renderer")]
pub fn setup_line_renderer(progress: prodash::Tree, level: prodash::tree::Level) -> prodash::line::JoinHandle {
pub fn setup_line_renderer(
progress: prodash::Tree,
level: prodash::tree::Level,
hide_cursor: bool,
) -> prodash::line::JoinHandle {
let output_is_terminal = atty::is(atty::Stream::Stderr);
prodash::line::render(
std::io::stderr(),
Expand All @@ -14,6 +18,7 @@ pub fn setup_line_renderer(progress: prodash::Tree, level: prodash::tree::Level)
output_is_terminal,
colored: output_is_terminal && crosstermion::color::allowed(),
timestamp: true,
hide_cursor,
..prodash::line::Options::default()
},
)
Expand Down

0 comments on commit 48c4bbd

Please sign in to comment.