on master help sign in
First stab at ignoring compressed files from picker (#767)
3b032e8Daniel S Poulin
helix-term/src/ui/mod.rs+18−2
@@ -91,9 +91,25 @@ pub fn regex_prompt(
91}
91}
92
92
93pub fn file_picker(root: PathBuf) -> FilePicker<PathBuf> {
93pub fn file_picker(root: PathBuf) -> FilePicker<PathBuf> {
94− use ignore::Walk;
94+ use ignore::{types::TypesBuilder, WalkBuilder};
95 use std::time;
95 use std::time;
96+
97+ // We want to exclude files that the editor can't handle yet
98+ let mut type_builder = TypesBuilder::new();
99+ let mut walk_builder = WalkBuilder::new(&root);
100+ let walk_builder = match type_builder.add(
101+ "compressed",
102+ "*.{zip,gz,bz2,zst,lzo,sz,tgz,tbz2,lz,lz4,lzma,lzo,z,Z,xz,7z,rar,cab}",
103+ ) {
104+ Err(_) => &walk_builder,
105+ _ => {
106+ type_builder.negate("all");
107+ let excluded_types = type_builder.build().unwrap();
108+ walk_builder.types(excluded_types)
109+ }
110+ };
111+
96− let files = Walk::new(&root).filter_map(|entry| {
112+ let files = walk_builder.build().filter_map(|entry| {
97 let entry = entry.ok()?;
113 let entry = entry.ok()?;
98 // Path::is_dir() traverses symlinks, so we use it over DirEntry::is_dir
114 // Path::is_dir() traverses symlinks, so we use it over DirEntry::is_dir
99 if entry.path().is_dir() {
115 if entry.path().is_dir() {