mirror of
https://github.com/Llewellynvdm/exa.git
synced 2024-12-30 19:39:09 +00:00
Added icons mode w/ prepending (icons themselves do not appear yet)
This commit is contained in:
parent
67f2fcc748
commit
57e8802977
@ -35,7 +35,7 @@ use fs::feature::git::GitCache;
|
|||||||
use options::{Options, Vars};
|
use options::{Options, Vars};
|
||||||
pub use options::vars;
|
pub use options::vars;
|
||||||
pub use options::Misfire;
|
pub use options::Misfire;
|
||||||
use output::{escape, lines, grid, grid_details, details, View, Mode};
|
use output::{escape, icons, lines, grid, grid_details, details, View, Mode};
|
||||||
|
|
||||||
mod fs;
|
mod fs;
|
||||||
mod info;
|
mod info;
|
||||||
@ -221,6 +221,11 @@ impl<'args, 'w, W: Write + 'w> Exa<'args, 'w, W> {
|
|||||||
let View { ref mode, ref colours, ref style } = self.options.view;
|
let View { ref mode, ref colours, ref style } = self.options.view;
|
||||||
|
|
||||||
match *mode {
|
match *mode {
|
||||||
|
Mode::Icons(ref opts) => {
|
||||||
|
println!("ICONS MODE");
|
||||||
|
let r = icons::Render { files, colours, style, opts };
|
||||||
|
r.render(self.writer)
|
||||||
|
}
|
||||||
Mode::Lines => {
|
Mode::Lines => {
|
||||||
let r = lines::Render { files, colours, style };
|
let r = lines::Render { files, colours, style };
|
||||||
r.render(self.writer)
|
r.render(self.writer)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use output::{View, Mode, grid, details};
|
use output::{View, Mode, grid, details, icons};
|
||||||
use output::grid_details::{self, RowThreshold};
|
use output::grid_details::{self, RowThreshold};
|
||||||
use output::table::{TimeTypes, Environment, SizeFormat, Columns, Options as TableOptions};
|
use output::table::{TimeTypes, Environment, SizeFormat, Columns, Options as TableOptions};
|
||||||
use output::time::TimeFormat;
|
use output::time::TimeFormat;
|
||||||
@ -63,6 +63,13 @@ impl Mode {
|
|||||||
|
|
||||||
Ok(Mode::Details(details))
|
Ok(Mode::Details(details))
|
||||||
}
|
}
|
||||||
|
else if matches.has(&flags::ICONS)? {
|
||||||
|
let grid = icons::Options {
|
||||||
|
across: matches.has(&flags::ACROSS)?,
|
||||||
|
console_width: width,
|
||||||
|
};
|
||||||
|
Ok(Mode::Icons(grid))
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
let grid = grid::Options {
|
let grid = grid::Options {
|
||||||
across: matches.has(&flags::ACROSS)?,
|
across: matches.has(&flags::ACROSS)?,
|
||||||
|
64
src/output/icons.rs
Normal file
64
src/output/icons.rs
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
use std::io::{Write, Result as IOResult};
|
||||||
|
|
||||||
|
use term_grid as tg;
|
||||||
|
|
||||||
|
use fs::File;
|
||||||
|
use style::Colours;
|
||||||
|
use output::file_name::FileStyle;
|
||||||
|
|
||||||
|
|
||||||
|
#[derive(PartialEq, Debug, Copy, Clone)]
|
||||||
|
pub struct Options {
|
||||||
|
pub across: bool,
|
||||||
|
pub console_width: usize,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Options {
|
||||||
|
pub fn direction(&self) -> tg::Direction {
|
||||||
|
if self.across { tg::Direction::LeftToRight }
|
||||||
|
else { tg::Direction::TopToBottom }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
pub struct Render<'a> {
|
||||||
|
pub files: Vec<File<'a>>,
|
||||||
|
pub colours: &'a Colours,
|
||||||
|
pub style: &'a FileStyle,
|
||||||
|
pub opts: &'a Options,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> Render<'a> {
|
||||||
|
pub fn render<W: Write>(&self, w: &mut W) -> IOResult<()> {
|
||||||
|
let mut grid = tg::Grid::new(tg::GridOptions {
|
||||||
|
direction: self.opts.direction(),
|
||||||
|
filling: tg::Filling::Spaces(2),
|
||||||
|
});
|
||||||
|
|
||||||
|
grid.reserve(self.files.len());
|
||||||
|
|
||||||
|
for file in self.files.iter() {
|
||||||
|
let filename = self.style.for_file(file, self.colours).paint();
|
||||||
|
let width = filename.width();
|
||||||
|
|
||||||
|
grid.add(tg::Cell {
|
||||||
|
contents: format!("<>{}", filename.strings().to_string()),
|
||||||
|
width: *width,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Some(display) = grid.fit_into_width(self.opts.console_width) {
|
||||||
|
write!(w, "{}", display)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// File names too long for a grid - drop down to just listing them!
|
||||||
|
// This isn’t *quite* the same as the lines view, which also
|
||||||
|
// displays full link paths.
|
||||||
|
for file in self.files.iter() {
|
||||||
|
let name_cell = self.style.for_file(file, self.colours).paint();
|
||||||
|
writeln!(w, "{}", name_cell.strings())?;
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -8,6 +8,7 @@ pub mod details;
|
|||||||
pub mod file_name;
|
pub mod file_name;
|
||||||
pub mod grid_details;
|
pub mod grid_details;
|
||||||
pub mod grid;
|
pub mod grid;
|
||||||
|
pub mod icons;
|
||||||
pub mod lines;
|
pub mod lines;
|
||||||
pub mod render;
|
pub mod render;
|
||||||
pub mod table;
|
pub mod table;
|
||||||
@ -33,5 +34,6 @@ pub enum Mode {
|
|||||||
Grid(grid::Options),
|
Grid(grid::Options),
|
||||||
Details(details::Options),
|
Details(details::Options),
|
||||||
GridDetails(grid_details::Options),
|
GridDetails(grid_details::Options),
|
||||||
|
Icons(icons::Options),
|
||||||
Lines,
|
Lines,
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user