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))?;