diff --git a/src/main.rs b/src/main.rs index ad1a797..ac69533 100644 --- a/src/main.rs +++ b/src/main.rs @@ -264,13 +264,15 @@ impl<'args> Exa<'args> { match (mode, self.console_width) { (Mode::Grid(ref opts), Some(console_width)) => { - let r = grid::Render { files, theme, file_style, opts, console_width }; + let filter = &self.options.filter; + let r = grid::Render { files, theme, file_style, opts, console_width, filter }; r.render(&mut self.writer) } (Mode::Grid(_), None) | (Mode::Lines, _) => { - let r = lines::Render { files, theme, file_style }; + let filter = &self.options.filter; + let r = lines::Render { files, theme, file_style, filter }; r.render(&mut self.writer) } diff --git a/src/output/grid.rs b/src/output/grid.rs index 952d909..290ee8b 100644 --- a/src/output/grid.rs +++ b/src/output/grid.rs @@ -3,6 +3,7 @@ use std::io::{self, Write}; use term_grid as tg; use crate::fs::File; +use crate::fs::filter::FileFilter; use crate::output::file_name::Options as FileStyle; use crate::theme::Theme; @@ -26,10 +27,11 @@ pub struct Render<'a> { pub file_style: &'a FileStyle, pub opts: &'a Options, pub console_width: usize, + pub filter: &'a FileFilter, } impl<'a> Render<'a> { - pub fn render(&self, w: &mut W) -> io::Result<()> { + pub fn render(mut self, w: &mut W) -> io::Result<()> { let mut grid = tg::Grid::new(tg::GridOptions { direction: self.opts.direction(), filling: tg::Filling::Spaces(2), @@ -37,6 +39,7 @@ impl<'a> Render<'a> { grid.reserve(self.files.len()); + self.filter.sort_files(&mut self.files); for file in &self.files { let filename = self.file_style.for_file(file, self.theme).paint(); diff --git a/src/output/lines.rs b/src/output/lines.rs index 9304a84..2343ce5 100644 --- a/src/output/lines.rs +++ b/src/output/lines.rs @@ -3,6 +3,7 @@ use std::io::{self, Write}; use ansi_term::ANSIStrings; use crate::fs::File; +use crate::fs::filter::FileFilter; use crate::output::cell::TextCellContents; use crate::output::file_name::{Options as FileStyle}; use crate::theme::Theme; @@ -13,10 +14,12 @@ pub struct Render<'a> { pub files: Vec>, pub theme: &'a Theme, pub file_style: &'a FileStyle, + pub filter: &'a FileFilter, } impl<'a> Render<'a> { - pub fn render(&self, w: &mut W) -> io::Result<()> { + pub fn render(mut self, w: &mut W) -> io::Result<()> { + self.filter.sort_files(&mut self.files); for file in &self.files { let name_cell = self.render_file(file); writeln!(w, "{}", ANSIStrings(&name_cell))?; diff --git a/xtests/outputs/exts_grid_sort_name_reverse.ansitxt b/xtests/outputs/exts_grid_sort_name_reverse.ansitxt new file mode 100644 index 0000000..93f07de --- /dev/null +++ b/xtests/outputs/exts_grid_sort_name_reverse.ansitxt @@ -0,0 +1,6 @@ +video.wmv lossless.flac crypto.signature compressed.tar.gz backup~ +VIDEO.AVI image.svg crypto.asc compressed.deb #SAVEFILE# +MUSIC.OGG IMAGE.PNG COMPRESSED.ZIP compiled.o +music.mp3 file.tmp compressed.txz compiled.js +Makefile DOCUMENT.XLSX compressed.tgz compiled.coffee +lossless.wav document.pdf compressed.tar.xz compiled.class diff --git a/xtests/outputs/exts_oneline_sort_name_reverse.ansitxt b/xtests/outputs/exts_oneline_sort_name_reverse.ansitxt new file mode 100644 index 0000000..f335667 --- /dev/null +++ b/xtests/outputs/exts_oneline_sort_name_reverse.ansitxt @@ -0,0 +1,26 @@ +video.wmv +VIDEO.AVI +MUSIC.OGG +music.mp3 +Makefile +lossless.wav +lossless.flac +image.svg +IMAGE.PNG +file.tmp +DOCUMENT.XLSX +document.pdf +crypto.signature +crypto.asc +COMPRESSED.ZIP +compressed.txz +compressed.tgz +compressed.tar.xz +compressed.tar.gz +compressed.deb +compiled.o +compiled.js +compiled.coffee +compiled.class +backup~ +#SAVEFILE# diff --git a/xtests/sorting.toml b/xtests/sorting.toml index f25d798..b81bde3 100644 --- a/xtests/sorting.toml +++ b/xtests/sorting.toml @@ -136,3 +136,22 @@ stdout = { string = "plum\npear\npeach" } stderr = { empty = true } status = 0 tags = [ 'oneline', 'sort', 'dates' ] + +# sorting with arguments specified + +[[cmd]] +name = "‘exa -G --sort=name -r’ with file arguments sorts by file name in reverse order" +shell = "cd /testcases/file-names-exts; exa -G --sort=name -r *" +environment = { COLUMNS = "80" } +stdout = { file = "outputs/exts_grid_sort_name_reverse.ansitxt" } +stderr = { empty = true } +status = 0 +tags = [ 'grid', 'sort', 'reverse' ] + +[[cmd]] +name = "‘exa -1 --sort=name -r’ with file arguments sorts by file name in reverse order" +shell = "cd /testcases/file-names-exts; exa -1 --sort=name -r *" +stdout = { file = "outputs/exts_oneline_sort_name_reverse.ansitxt" } +stderr = { empty = true } +status = 0 +tags = [ 'oneline', 'sort', 'reverse' ]