diff --git a/src/main.rs b/src/main.rs index facf3c126ae8e251e8ceb3786d1ed970cd489b53..e57fa47fce5c78bb0db989ad22107657d871a088 100644 --- a/src/main.rs +++ b/src/main.rs @@ -80,8 +80,7 @@ fn exa(options: &Options) { match Dir::readdir(&dir_path) { Ok(ref dir) => { - let unsorted_files = dir.files(false); - let files: Vec = options.transform_files(unsorted_files); + let files = options.transform_files(dir.files(false)); // When recursing, add any directories to the dirs stack // backwards: the *last* element of the stack is used each diff --git a/src/options.rs b/src/options.rs index f18083ba9f104a9fa33900e6e499856d0f82b456..5a569e51f5e03791756a0de9dcbbc7878a81ebeb 100644 --- a/src/options.rs +++ b/src/options.rs @@ -20,10 +20,15 @@ use self::Misfire::*; pub struct Options { pub dir_action: DirAction, pub path_strs: Vec, + pub filter: FileFilter, + view: View, +} + +#[derive(PartialEq, Debug, Copy)] +pub struct FileFilter { reverse: bool, show_invisibles: bool, sort_field: SortField, - view: View, } impl Options { @@ -65,20 +70,28 @@ impl Options { }; Ok(Options { - dir_action: try!(dir_action(&matches)), - path_strs: if matches.free.is_empty() { vec![ ".".to_string() ] } else { matches.free.clone() }, - reverse: matches.opt_present("reverse"), - show_invisibles: matches.opt_present("all"), - sort_field: sort_field, - view: try!(view(&matches)), + dir_action: try!(dir_action(&matches)), + path_strs: if matches.free.is_empty() { vec![ ".".to_string() ] } else { matches.free.clone() }, + view: try!(view(&matches)), + filter: FileFilter { + reverse: matches.opt_present("reverse"), + show_invisibles: matches.opt_present("all"), + sort_field: sort_field, + }, }) } + pub fn transform_files<'a>(&self, files: Vec>) -> Vec> { + self.filter.transform_files(files) + } + /// Display the files using this Option's View. pub fn view(&self, dir: Option<&Dir>, files: &[File]) { self.view.view(dir, files) } +} +impl FileFilter { /// Transform the files (sorting, reversing, filtering) before listing them. pub fn transform_files<'a>(&self, mut files: Vec>) -> Vec> {