lotabout.skim/examples/fine-grain.rs
LoricAndre e9fb1877c0
feat(lib): add fine-grained control over skim's event loop (#968)
* feat(lib): add fine-grained control over skim's event loop

* fix: do not panic on reload

* fix: cleaner handling of reload
2026-02-12 11:57:02 +01:00

35 lines
940 B
Rust

extern crate skim;
use color_eyre::Result;
use skim::prelude::*;
#[tokio::main(flavor = "current_thread")]
pub async fn main() -> Result<()> {
let options = SkimOptionsBuilder::default().height("50%").multi(true).build()?;
let (tx_item, rx_item): (SkimItemSender, SkimItemReceiver) = unbounded();
let mut skim = Skim::init(options, Some(rx_item))?;
skim.start();
skim.init_tui()?;
let event_tx = skim.event_sender();
skim.enter().await?;
let output = skim
.run_until(async move {
for i in 1..=10 {
let _ = event_tx.try_send(Event::ClearItems);
let _ = tx_item.send(vec![Arc::new(format!("item {i}")) as Arc<dyn SkimItem>]);
tokio::time::sleep(std::time::Duration::from_secs(1)).await;
}
})
.await?;
for item in output.selected_items.iter() {
println!("{}", item.output());
}
Ok(())
}