First stab at ignoring compressed files from picker (#767)

This commit is contained in:
Daniel S Poulin 2021-10-21 21:02:05 -04:00 committed by GitHub
parent 2edc85e953
commit 3b032e8e1f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -91,9 +91,25 @@ pub fn regex_prompt(
} }
pub fn file_picker(root: PathBuf) -> FilePicker<PathBuf> { pub fn file_picker(root: PathBuf) -> FilePicker<PathBuf> {
use ignore::Walk; use ignore::{types::TypesBuilder, WalkBuilder};
use std::time; 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()?; let entry = entry.ok()?;
// Path::is_dir() traverses symlinks, so we use it over DirEntry::is_dir // Path::is_dir() traverses symlinks, so we use it over DirEntry::is_dir
if entry.path().is_dir() { if entry.path().is_dir() {