Skip to content

Commit

Permalink
Add option to only display directories
Browse files Browse the repository at this point in the history
This allows printing directory trees without any files, only
showing the structure.
I haven't decided on a letter for the short option.

Implements #401
  • Loading branch information
Don42 committed Jul 12, 2018
1 parent a3b2f2b commit 054cac6
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 1 deletion.
7 changes: 7 additions & 0 deletions src/fs/filter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ pub struct FileFilter {
/// ones, depending on the sort field.
pub reverse: bool,

/// Whether to only show directories
pub only_dirs: bool,

/// Which invisible “dot” files to include when listing a directory.
///
/// Files starting with a single “.” are used to determine “system” or
Expand Down Expand Up @@ -94,6 +97,10 @@ impl FileFilter {
/// filter predicate for files found inside a directory.
pub fn filter_child_files(&self, files: &mut Vec<File>) {
files.retain(|f| !self.ignore_patterns.is_ignored(&f.name));

if self.only_dirs {
files.retain(|f| f.is_directory());
}
}

/// Remove every file in the given vector that does *not* pass the
Expand Down
1 change: 1 addition & 0 deletions src/options/filter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ impl FileFilter {
Ok(FileFilter {
list_dirs_first: matches.has(&flags::DIRS_FIRST)?,
reverse: matches.has(&flags::REVERSE)?,
only_dirs: matches.has(&flags::ONLY_DIRS)?,
sort_field: SortField::deduce(matches)?,
dot_filter: DotFilter::deduce(matches)?,
ignore_patterns: IgnorePatterns::deduce(matches)?,
Expand Down
3 changes: 2 additions & 1 deletion src/options/flags.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ pub static SORT: Arg = Arg { short: Some(b's'), long: "sort", take
pub static IGNORE_GLOB: Arg = Arg { short: Some(b'I'), long: "ignore-glob", takes_value: TakesValue::Necessary(None) };
pub static GIT_IGNORE: Arg = Arg { short: None, long: "git-ignore", takes_value: TakesValue::Forbidden };
pub static DIRS_FIRST: Arg = Arg { short: None, long: "group-directories-first", takes_value: TakesValue::Forbidden };
pub static ONLY_DIRS: Arg = Arg { short: None, long: "only-dirs", takes_value: TakesValue::Forbidden };
const SORTS: Values = &[ "name", "Name", "size", "extension",
"Extension", "modified", "accessed",
"created", "inode", "type", "none" ];
Expand Down Expand Up @@ -62,7 +63,7 @@ pub static ALL_ARGS: Args = Args(&[
&COLOR, &COLOUR, &COLOR_SCALE, &COLOUR_SCALE,

&ALL, &LIST_DIRS, &LEVEL, &REVERSE, &SORT, &DIRS_FIRST,
&IGNORE_GLOB, &GIT_IGNORE,
&IGNORE_GLOB, &GIT_IGNORE, &ONLY_DIRS,

&BINARY, &BYTES, &GROUP, &HEADER, &INODE, &LINKS, &MODIFIED, &BLOCKS,
&TIME, &ACCESSED, &CREATED, &TIME_STYLE,
Expand Down

0 comments on commit 054cac6

Please sign in to comment.