mirror of
https://github.com/lotabout/skim.git
synced 2026-09-10 15:26:18 -04:00
* chore: remove skim::Item run_items wrapper * fix: properly trigger re-render on custom previews * feat: add AppendItems event * feat!: internally compute indexes at match time (removes get/set_index) * chore: generate completions & manpage * chore: better benchmarks --------- Co-authored-by: Skim bot <skim-bot@skim-rs.github.io>
54 lines
1.4 KiB
Rust
54 lines
1.4 KiB
Rust
extern crate skim;
|
|
use skim::prelude::*;
|
|
|
|
struct MyItem {
|
|
inner: String,
|
|
}
|
|
|
|
impl SkimItem for MyItem {
|
|
fn text(&self) -> Cow<'_, str> {
|
|
Cow::Borrowed(&self.inner)
|
|
}
|
|
|
|
fn preview(&self, _context: PreviewContext) -> ItemPreview {
|
|
if self.inner.starts_with("color") {
|
|
ItemPreview::AnsiText(format!("\x1b[31mhello:\x1b[m\n{}", self.inner))
|
|
} else {
|
|
ItemPreview::Text(format!("hello:\n{}", self.inner))
|
|
}
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
let options = SkimOptionsBuilder::default()
|
|
.height("50%")
|
|
.multi(true)
|
|
.preview("") // preview should be specified to enable preview window
|
|
.build()
|
|
.unwrap();
|
|
|
|
env_logger::init();
|
|
|
|
let (tx_item, rx_item): (SkimItemSender, SkimItemReceiver) = unbounded();
|
|
let _ = tx_item.send(vec![
|
|
Arc::new(MyItem {
|
|
inner: "color aaaa".to_string(),
|
|
}) as Arc<dyn SkimItem>,
|
|
Arc::new(MyItem {
|
|
inner: "bbbb".to_string(),
|
|
}) as Arc<dyn SkimItem>,
|
|
Arc::new(MyItem {
|
|
inner: "ccc".to_string(),
|
|
}) as Arc<dyn SkimItem>,
|
|
]);
|
|
drop(tx_item); // so that skim could know when to stop waiting for more items.
|
|
|
|
let selected_items = Skim::run_with(options, Some(rx_item))
|
|
.map(|out| out.selected_items)
|
|
.unwrap_or_default();
|
|
|
|
for item in selected_items.iter() {
|
|
println!("{}", item.output());
|
|
}
|
|
}
|