diff --git a/src/exa.rs b/src/exa.rs index ca2b9dc..3084ce2 100644 --- a/src/exa.rs +++ b/src/exa.rs @@ -26,43 +26,39 @@ fn main() { match Options::getopts(args) { Err(err) => println!("Invalid options:\n{}", err), - Ok(opts) => { - if opts.dirs.is_empty() { - exa(&opts, false, ".".to_string()) - } - else { - let mut first = true; - let print_dir_names = opts.dirs.len() > 1; - for dir in opts.dirs.clone().move_iter() { - if first { - first = false; - } - else { - print!("\n"); - } - exa(&opts, print_dir_names, dir) - } - } - } + Ok(opts) => exa(&opts), }; } -fn exa(options: &Options, print_dir_names: bool, string: String) { - let path = Path::new(string.clone()); - - let dir = match Dir::readdir(path) { - Ok(dir) => dir, - Err(e) => { - println!("{}: {}", string, e); - return; +fn exa(opts: &Options) { + let mut first = true; + + // It's only worth printing out directory names if the user supplied + // more than one of them. + let print_dir_names = opts.dirs.len() > 1; + + for dir_name in opts.dirs.clone().move_iter() { + if first { + first = false; + } + else { + print!("\n"); } - }; - // Print header *after* readdir must have succeeded - if print_dir_names { - println!("{}:", string); + match Dir::readdir(Path::new(dir_name.clone())) { + Ok(dir) => { + if print_dir_names { println!("{}:", dir_name); } + lines_view(opts, dir); + } + Err(e) => { + println!("{}: {}", dir_name, e); + return; + } + }; } +} +fn lines_view(options: &Options, dir: Dir) { let unsorted_files = dir.files(); let files: Vec<&File> = options.transform_files(&unsorted_files); diff --git a/src/options.rs b/src/options.rs index 9cb8ecb..3afa8b9 100644 --- a/src/options.rs +++ b/src/options.rs @@ -50,7 +50,7 @@ impl Options { reverse: matches.opt_present("reverse"), header: matches.opt_present("header"), sortField: matches.opt_str("sort").map(|word| SortField::from_word(word)).unwrap_or(Name), - dirs: matches.free.clone(), + dirs: if matches.free.is_empty() { vec![ ".".to_string() ] } else { matches.free.clone() }, columns: Options::columns(matches), }) }