@@ -91,9 +91,25 @@ pub fn regex_prompt(
9191}
9292
9393pub fn file_picker(root: PathBuf) -> FilePicker<PathBuf> {
94− use ignore::Walk;
94+ use ignore::{types::TypesBuilder, WalkBuilder};
9595 use std::time;
96− let files = Walk::new(&root).filter_map(|entry| {
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+
112+ let files = walk_builder.build().filter_map(|entry| {
97113 let entry = entry.ok()?;
98114 // Path::is_dir() traverses symlinks, so we use it over DirEntry::is_dir
99115 if entry.path().is_dir() {