extern crate picleo;
use std::fs;
use std::io::{self, BufRead};
use std::path::PathBuf;
use anyhow::Result;
use clap::Parser;
use picleo::selectable::Selectable;
use picleo::picker::Picker;
#[derive(Parser, Debug)]
#[command(author, version, about, long_about = None)]
struct Args {
#[arg(name = "DIRS")]
dirs: Vec<PathBuf>,
}
fn main() -> Result<()> {
let args = Args::parse();
let mut picker = Picker::<String>::new();
if !args.dirs.is_empty() {
picker.inject_items(|i|
for dir in args.dirs {
if let Ok(entries) = fs::read_dir(&dir) {
for entry in entries.flatten() {
let path = entry.path();
let str = path.to_string_lossy();
i.push(Selectable::new(str.to_string()), |columns| columns[0] = str.into());
}
}
}
);
} else {
picker.inject_items(|i| {
for line in io::stdin().lock().lines().map_while(Result::ok) {
i.push(Selectable::new(line.clone()), |columns| {
columns[0] = line.into()
});
}
});
}
match picker.run() {
Ok(lines) => {
for line in lines {
println!("{}", line)
}
}
Err(err) => {
println!("{err:?}");
return Err(anyhow::anyhow!("{:?}", err));
}
}
Ok(())
}