aboutsummaryrefslogtreecommitdiff
path: root/helix-term/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'helix-term/src/lib.rs')
-rw-r--r--helix-term/src/lib.rs25
1 files changed, 25 insertions, 0 deletions
diff --git a/helix-term/src/lib.rs b/helix-term/src/lib.rs
index a945b20d..f0bc9129 100644
--- a/helix-term/src/lib.rs
+++ b/helix-term/src/lib.rs
@@ -10,6 +10,9 @@ pub mod health;
pub mod job;
pub mod keymap;
pub mod ui;
+use std::path::Path;
+
+use ignore::DirEntry;
pub use keymap::macros::*;
#[cfg(not(windows))]
@@ -22,3 +25,25 @@ fn true_color() -> bool {
fn true_color() -> bool {
true
}
+
+/// Function used for filtering dir entries in the various file pickers.
+fn filter_picker_entry(entry: &DirEntry, root: &Path, dedup_symlinks: bool) -> bool {
+ // We always want to ignore the .git directory, otherwise if
+ // `ignore` is turned off, we end up with a lot of noise
+ // in our picker.
+ if entry.file_name() == ".git" {
+ return false;
+ }
+
+ // We also ignore symlinks that point inside the current directory
+ // if `dedup_links` is enabled.
+ if dedup_symlinks && entry.path_is_symlink() {
+ return entry
+ .path()
+ .canonicalize()
+ .ok()
+ .map_or(false, |path| !path.starts_with(&root));
+ }
+
+ true
+}