From 2708360fb5e19caf7123c730bd1a26fd0c4c4d87 Mon Sep 17 00:00:00 2001 From: whonore Date: Fri, 23 Oct 2020 12:47:13 -0400 Subject: [PATCH 1/3] Apply sort order to line and grid outputs. Fix #404 --- src/main.rs | 6 ++++-- src/output/grid.rs | 5 ++++- src/output/lines.rs | 5 ++++- 3 files changed, 12 insertions(+), 4 deletions(-) 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))?; From c8ed69368e7e0b54986c898be1ef153b2fff75a0 Mon Sep 17 00:00:00 2001 From: whonore Date: Fri, 23 Oct 2020 15:08:12 -0400 Subject: [PATCH 2/3] Add tests --- .../exts_grid_sort_name_reverse.ansitxt | 6 +++++ .../exts_oneline_sort_name_reverse.ansitxt | 26 +++++++++++++++++++ xtests/sorting.toml | 19 ++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 xtests/outputs/exts_grid_sort_name_reverse.ansitxt create mode 100644 xtests/outputs/exts_oneline_sort_name_reverse.ansitxt 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..cb8b9a7 --- /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..2143261 --- /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..e8d9a59 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 -Gr --sort=name *’ sorts by file name in reverse order" +shell = "exa -Gr --sort=name /testcases/file-names-exts/*" +environment = { COLUMNS = "80" } +stdout = { file = "outputs/exts_grid_sort_name_reverse.ansitxt" } +stderr = { empty = true } +status = 0 +tags = [ 'grid', 'sort', 'reverse' ] + +[[cmd]] +name = "‘exa -1r --sort=name *’ sorts by file name in reverse order" +shell = "exa -1r --sort=name /testcases/file-name-exts/*" +stdout = { file = "outputs/exts_oneline_sort_name_reverse.ansitxt" } +stderr = { empty = true } +status = 0 +tags = [ 'oneline', 'sort', 'reverse' ] From cfa00bf4b26d478f6935543f30227974b4ee6e36 Mon Sep 17 00:00:00 2001 From: whonore Date: Fri, 15 Jan 2021 16:25:50 -0500 Subject: [PATCH 3/3] Fix new tests --- xtests/outputs/exts_grid_sort_name_reverse.ansitxt | 2 +- xtests/outputs/exts_oneline_sort_name_reverse.ansitxt | 2 +- xtests/sorting.toml | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/xtests/outputs/exts_grid_sort_name_reverse.ansitxt b/xtests/outputs/exts_grid_sort_name_reverse.ansitxt index cb8b9a7..93f07de 100644 --- a/xtests/outputs/exts_grid_sort_name_reverse.ansitxt +++ b/xtests/outputs/exts_grid_sort_name_reverse.ansitxt @@ -1,6 +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 +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 index 2143261..f335667 100644 --- a/xtests/outputs/exts_oneline_sort_name_reverse.ansitxt +++ b/xtests/outputs/exts_oneline_sort_name_reverse.ansitxt @@ -19,7 +19,7 @@ compressed.tar.gz compressed.deb compiled.o -compiled.js +compiled.js compiled.coffee compiled.class backup~ diff --git a/xtests/sorting.toml b/xtests/sorting.toml index e8d9a59..b81bde3 100644 --- a/xtests/sorting.toml +++ b/xtests/sorting.toml @@ -140,8 +140,8 @@ tags = [ 'oneline', 'sort', 'dates' ] # sorting with arguments specified [[cmd]] -name = "‘exa -Gr --sort=name *’ sorts by file name in reverse order" -shell = "exa -Gr --sort=name /testcases/file-names-exts/*" +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 } @@ -149,8 +149,8 @@ status = 0 tags = [ 'grid', 'sort', 'reverse' ] [[cmd]] -name = "‘exa -1r --sort=name *’ sorts by file name in reverse order" -shell = "exa -1r --sort=name /testcases/file-name-exts/*" +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