|
|
|
@ -91,9 +91,25 @@ pub fn regex_prompt(
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn file_picker(root: PathBuf) -> FilePicker<PathBuf> {
|
|
|
|
|
use ignore::Walk;
|
|
|
|
|
use ignore::{types::TypesBuilder, WalkBuilder};
|
|
|
|
|
use std::time;
|
|
|
|
|
let files = Walk::new(&root).filter_map(|entry| {
|
|
|
|
|
|
|
|
|
|
// We want to exclude files that the editor can't handle yet
|
|
|
|
|
let mut type_builder = TypesBuilder::new();
|
|
|
|
|
let mut walk_builder = WalkBuilder::new(&root);
|
|
|
|
|
let walk_builder = match type_builder.add(
|
|
|
|
|
"compressed",
|
|
|
|
|
"*.{zip,gz,bz2,zst,lzo,sz,tgz,tbz2,lz,lz4,lzma,lzo,z,Z,xz,7z,rar,cab}",
|
|
|
|
|
) {
|
|
|
|
|
Err(_) => &walk_builder,
|
|
|
|
|
_ => {
|
|
|
|
|
type_builder.negate("all");
|
|
|
|
|
let excluded_types = type_builder.build().unwrap();
|
|
|
|
|
walk_builder.types(excluded_types)
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let files = walk_builder.build().filter_map(|entry| {
|
|
|
|
|
let entry = entry.ok()?;
|
|
|
|
|
// Path::is_dir() traverses symlinks, so we use it over DirEntry::is_dir
|
|
|
|
|
if entry.path().is_dir() {
|
|
|
|
|