Skip to content

Commit

Permalink
feat(fs): add --no-link option to disable showing links in --only-fil…
Browse files Browse the repository at this point in the history
…es and --only-dirs
  • Loading branch information
MartinFillon committed Oct 11, 2023
1 parent 3a7344a commit 4d9f1f1
Show file tree
Hide file tree
Showing 6 changed files with 23 additions and 4 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -328,6 +328,7 @@ eza’s options are almost, but not quite, entirely unlike `ls`’s.
- **-D**, **--only-dirs**: list only directories and links to directories
- **-f**, **--only-files**: list only files and links to files
- **--only-links**: list only symbolic links
- **--no-links**: don't list symbolic links in **--only-files** or **--only-dirs** cases
- **--git-ignore**: ignore files mentioned in `.gitignore`
- **-I**, **--ignore-glob=(globs)**: glob patterns (pipe-separated) of files to ignore

Expand Down
2 changes: 2 additions & 0 deletions man/eza.1.md
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,8 @@ Sort fields starting with a capital letter will sort uppercase before lowercase:
`--only-links`
: List only links

`--only-links`
: Don't show links in `--only-files` or `--only-dirs` cases

LONG VIEW OPTIONS
=================
Expand Down
21 changes: 17 additions & 4 deletions src/fs/filter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ pub enum FileFilterFlags {

/// Whether to only show links.
OnlyLinks,

/// Whether to ignore links.
NoLinks,
}

/// The **file filter** processes a list of files before displaying them to
Expand Down Expand Up @@ -77,7 +80,7 @@ impl FileFilter {
/// Remove every file in the given vector that does *not* pass the
/// filter predicate for files found inside a directory.
pub fn filter_child_files(&self, files: &mut Vec<File<'_>>) {
use FileFilterFlags::{OnlyDirs, OnlyFiles, OnlyLinks};
use FileFilterFlags::{NoLinks, OnlyDirs, OnlyFiles, OnlyLinks};

files.retain(|f| !self.ignore_patterns.is_ignored(&f.name));

Expand All @@ -88,15 +91,25 @@ impl FileFilter {
) {
(true, false, false) => {
// On pass -'-only-dirs' flag only
files.retain(File::points_to_directory);
if self.flags.contains(&NoLinks) {
files.retain(File::is_directory);
} else {
files.retain(File::points_to_directory);
}
}
(false, true, false) => {
// On pass -'-only-files' flag only
files.retain(File::points_to_file);
if self.flags.contains(&NoLinks) {
files.retain(File::is_file);
} else {
files.retain(File::points_to_file);
}
}
(false, false, true) => {
// On pass -'-only-links' flag only
files.retain(File::is_link);
if !self.flags.contains(&NoLinks) {
files.retain(File::is_link);
}
}
_ => {}
}
Expand Down
1 change: 1 addition & 0 deletions src/options/filter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ impl FileFilter {
(matches.has(&flags::ONLY_DIRS)?, FFF::OnlyDirs),
(matches.has(&flags::ONLY_FILES)?, FFF::OnlyFiles),
(matches.has(&flags::ONLY_LINKS)?, FFF::OnlyLinks),
(matches.has(&flags::NO_LINKS)?, FFF::NoLinks),
] {
if *has {
filter_flags.push(flag.clone());
Expand Down
1 change: 1 addition & 0 deletions src/options/flags.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ pub static DIRS_FIRST: Arg = Arg { short: None, long: "group-directories-first"
pub static ONLY_DIRS: Arg = Arg { short: Some(b'D'), long: "only-dirs", takes_value: TakesValue::Forbidden };
pub static ONLY_FILES: Arg = Arg { short: Some(b'f'), long: "only-files", takes_value: TakesValue::Forbidden };
pub static ONLY_LINKS: Arg = Arg { short: None, long: "only-links", takes_value: TakesValue::Forbidden };
pub static NO_LINKS: Arg = Arg { short: None, long: "no-links", takes_value: TakesValue::Forbidden };
const SORTS: Values = &[ "name", "Name", "size", "extension",
"Extension", "modified", "changed", "accessed",
"created", "inode", "type", "none" ];
Expand Down
1 change: 1 addition & 0 deletions src/options/help.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ FILTERING AND SORTING OPTIONS
-D, --only-dirs list only directories and links to directories
-f, --only-files list only files and links to files
--only-links list only symbolic links
--no-links don't list symbolic links in --only-files or --only-dirs cases
-I, --ignore-glob GLOBS glob patterns (pipe-separated) of files to ignore";

static GIT_FILTER_HELP: &str = " \
Expand Down

0 comments on commit 4d9f1f1

Please sign in to comment.