-
Notifications
You must be signed in to change notification settings - Fork 203
Open
Labels
bugSomething isn't workingSomething isn't working
Description
I've been encountering this issue in my own application for some time, and thought it was just a mistake in my implementation.
What follows is my minimal reproduction.
ExternalPrint.fullscreen.wipes.mov
use std::sync::{
Arc,
atomic::{AtomicBool, Ordering},
};
use std::thread;
use std::time::Duration;
use reedline::ExternalPrinter;
use reedline::{DefaultPrompt, Reedline, Signal};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let printer = ExternalPrinter::default();
let printer_tx = printer.sender();
let running = Arc::new(AtomicBool::new(true));
let sync_thread = {
let printer_tx = printer_tx.clone();
let running = running.clone();
thread::spawn(move || {
while running.load(Ordering::Relaxed) {
thread::sleep(Duration::from_secs(1));
let _ = printer_tx.send("event1".to_string());
let _ = printer_tx.send("event2".to_string()); // Tends to trigger the issue.
}
})
};
let mut line_editor = Reedline::create().with_external_printer(printer);
let prompt = DefaultPrompt::default();
loop {
match line_editor.read_line(&prompt) {
Ok(Signal::Success(line)) => {
if matches!(line.trim(), "exit" | "quit") {
break;
}
}
Ok(Signal::CtrlD) | Ok(Signal::CtrlC) => break,
_ => break,
}
}
running.store(false, Ordering::Relaxed);
let _ = sync_thread.join();
Ok(())
}Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working