mirror of
https://github.com/Llewellynvdm/exa.git
synced 2024-11-22 20:15:11 +00:00
\t and \s+$
This commit is contained in:
parent
075fe802b4
commit
d86fc4286b
@ -9,7 +9,7 @@ use std::process::exit;
|
|||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
configure_logger();
|
configure_logger();
|
||||||
|
|
||||||
let args: Vec<OsString> = args_os().skip(1).collect();
|
let args: Vec<OsString> = args_os().skip(1).collect();
|
||||||
match Exa::new(args.iter(), &mut stdout()) {
|
match Exa::new(args.iter(), &mut stdout()) {
|
||||||
Ok(mut exa) => {
|
Ok(mut exa) => {
|
||||||
@ -46,12 +46,12 @@ fn main() {
|
|||||||
pub fn configure_logger() {
|
pub fn configure_logger() {
|
||||||
extern crate env_logger;
|
extern crate env_logger;
|
||||||
extern crate log;
|
extern crate log;
|
||||||
|
|
||||||
let present = match var_os("EXA_DEBUG") {
|
let present = match var_os("EXA_DEBUG") {
|
||||||
Some(debug) => debug.len() > 0,
|
Some(debug) => debug.len() > 0,
|
||||||
None => false,
|
None => false,
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut logs = env_logger::LogBuilder::new();
|
let mut logs = env_logger::LogBuilder::new();
|
||||||
if present {
|
if present {
|
||||||
logs.filter(None, log::LogLevelFilter::Debug);
|
logs.filter(None, log::LogLevelFilter::Debug);
|
||||||
@ -59,7 +59,7 @@ pub fn configure_logger() {
|
|||||||
else {
|
else {
|
||||||
logs.filter(None, log::LogLevelFilter::Off);
|
logs.filter(None, log::LogLevelFilter::Off);
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Err(e) = logs.init() {
|
if let Err(e) = logs.init() {
|
||||||
writeln!(stderr(), "Failed to initialise logger: {}", e).unwrap();
|
writeln!(stderr(), "Failed to initialise logger: {}", e).unwrap();
|
||||||
}
|
}
|
||||||
|
@ -38,7 +38,7 @@ impl Dir {
|
|||||||
/// ourselves after the files have been read.
|
/// ourselves after the files have been read.
|
||||||
pub fn read_dir(path: PathBuf, git: bool) -> IOResult<Dir> {
|
pub fn read_dir(path: PathBuf, git: bool) -> IOResult<Dir> {
|
||||||
info!("Reading directory {:?}", &path);
|
info!("Reading directory {:?}", &path);
|
||||||
|
|
||||||
let contents: Vec<PathBuf> = try!(fs::read_dir(&path)?
|
let contents: Vec<PathBuf> = try!(fs::read_dir(&path)?
|
||||||
.map(|result| result.map(|entry| entry.path()))
|
.map(|result| result.map(|entry| entry.path()))
|
||||||
.collect());
|
.collect());
|
||||||
|
@ -16,7 +16,7 @@ impl Git {
|
|||||||
/// the files' statuses if one is found.
|
/// the files' statuses if one is found.
|
||||||
pub fn scan(path: &Path) -> Result<Git, git2::Error> {
|
pub fn scan(path: &Path) -> Result<Git, git2::Error> {
|
||||||
info!("Scanning for Git repository under {:?}", path);
|
info!("Scanning for Git repository under {:?}", path);
|
||||||
|
|
||||||
let repo = git2::Repository::discover(path)?;
|
let repo = git2::Repository::discover(path)?;
|
||||||
let workdir = match repo.workdir() {
|
let workdir = match repo.workdir() {
|
||||||
Some(w) => w,
|
Some(w) => w,
|
||||||
@ -24,8 +24,8 @@ impl Git {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let statuses = repo.statuses(None)?.iter()
|
let statuses = repo.statuses(None)?.iter()
|
||||||
.map(|e| (workdir.join(Path::new(e.path().unwrap())), e.status()))
|
.map(|e| (workdir.join(Path::new(e.path().unwrap())), e.status()))
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
Ok(Git { statuses: statuses })
|
Ok(Git { statuses: statuses })
|
||||||
}
|
}
|
||||||
|
@ -64,7 +64,7 @@ impl<'dir> File<'dir> {
|
|||||||
let parent_dir = parent_dir.into();
|
let parent_dir = parent_dir.into();
|
||||||
let name = filename.into().unwrap_or_else(|| File::filename(&path));
|
let name = filename.into().unwrap_or_else(|| File::filename(&path));
|
||||||
let ext = File::ext(&path);
|
let ext = File::ext(&path);
|
||||||
|
|
||||||
debug!("Statting file {:?}", &path);
|
debug!("Statting file {:?}", &path);
|
||||||
let metadata = fs::symlink_metadata(&path)?;
|
let metadata = fs::symlink_metadata(&path)?;
|
||||||
|
|
||||||
|
@ -101,10 +101,10 @@ impl SortField {
|
|||||||
// smaller, because that’s usually what the user expects to happen. Users will
|
// smaller, because that’s usually what the user expects to happen. Users will
|
||||||
// name their files with numbers expecting them to be treated like numbers,
|
// name their files with numbers expecting them to be treated like numbers,
|
||||||
// rather than lists of numeric characters.
|
// rather than lists of numeric characters.
|
||||||
//
|
//
|
||||||
// In the same way, users will name their files with letters expecting the
|
// In the same way, users will name their files with letters expecting the
|
||||||
// order of the letters to matter, rather than each letter’s character’s ASCII
|
// order of the letters to matter, rather than each letter’s character’s ASCII
|
||||||
// value. So exa breaks from tradition and ignores case while sorting:
|
// value. So exa breaks from tradition and ignores case while sorting:
|
||||||
// “apps” first, then “Documents”.
|
// “apps” first, then “Documents”.
|
||||||
//
|
//
|
||||||
// You can get the old behaviour back by sorting with `--sort=Name`.
|
// You can get the old behaviour back by sorting with `--sort=Name`.
|
||||||
|
@ -15,27 +15,27 @@ impl f::Blocks {
|
|||||||
|
|
||||||
|
|
||||||
pub trait Colours {
|
pub trait Colours {
|
||||||
fn block_count(&self) -> Style;
|
fn block_count(&self) -> Style;
|
||||||
fn no_blocks(&self) -> Style;
|
fn no_blocks(&self) -> Style;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
pub mod test {
|
pub mod test {
|
||||||
use ansi_term::Style;
|
use ansi_term::Style;
|
||||||
use ansi_term::Colour::*;
|
use ansi_term::Colour::*;
|
||||||
|
|
||||||
use super::Colours;
|
use super::Colours;
|
||||||
use output::cell::TextCell;
|
use output::cell::TextCell;
|
||||||
use fs::fields as f;
|
use fs::fields as f;
|
||||||
|
|
||||||
|
|
||||||
struct TestColours;
|
struct TestColours;
|
||||||
|
|
||||||
impl Colours for TestColours {
|
impl Colours for TestColours {
|
||||||
fn block_count(&self) -> Style { Red.blink() }
|
fn block_count(&self) -> Style { Red.blink() }
|
||||||
fn no_blocks(&self) -> Style { Green.italic() }
|
fn no_blocks(&self) -> Style { Green.italic() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -43,14 +43,14 @@ pub trait Colours {
|
|||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
pub mod test {
|
pub mod test {
|
||||||
use super::Colours;
|
use super::Colours;
|
||||||
use output::cell::{TextCell, DisplayWidth};
|
use output::cell::{TextCell, DisplayWidth};
|
||||||
use fs::fields as f;
|
use fs::fields as f;
|
||||||
|
|
||||||
use ansi_term::Colour::*;
|
use ansi_term::Colour::*;
|
||||||
use ansi_term::Style;
|
use ansi_term::Style;
|
||||||
|
|
||||||
|
|
||||||
struct TestColours;
|
struct TestColours;
|
||||||
|
|
||||||
impl Colours for TestColours {
|
impl Colours for TestColours {
|
||||||
@ -60,7 +60,7 @@ pub mod test {
|
|||||||
fn deleted(&self) -> Style { Fixed(93).normal() }
|
fn deleted(&self) -> Style { Fixed(93).normal() }
|
||||||
fn renamed(&self) -> Style { Fixed(94).normal() }
|
fn renamed(&self) -> Style { Fixed(94).normal() }
|
||||||
fn type_change(&self) -> Style { Fixed(95).normal() }
|
fn type_change(&self) -> Style { Fixed(95).normal() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -30,15 +30,15 @@ impl f::Group {
|
|||||||
|
|
||||||
|
|
||||||
pub trait Colours {
|
pub trait Colours {
|
||||||
fn yours(&self) -> Style;
|
fn yours(&self) -> Style;
|
||||||
fn not_yours(&self) -> Style;
|
fn not_yours(&self) -> Style;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
#[allow(unused_results)]
|
#[allow(unused_results)]
|
||||||
pub mod test {
|
pub mod test {
|
||||||
use super::Colours;
|
use super::Colours;
|
||||||
use fs::fields as f;
|
use fs::fields as f;
|
||||||
use output::cell::TextCell;
|
use output::cell::TextCell;
|
||||||
|
|
||||||
@ -47,13 +47,13 @@ pub mod test {
|
|||||||
use users::os::unix::GroupExt;
|
use users::os::unix::GroupExt;
|
||||||
use ansi_term::Colour::*;
|
use ansi_term::Colour::*;
|
||||||
use ansi_term::Style;
|
use ansi_term::Style;
|
||||||
|
|
||||||
|
|
||||||
struct TestColours;
|
struct TestColours;
|
||||||
|
|
||||||
impl Colours for TestColours {
|
impl Colours for TestColours {
|
||||||
fn yours(&self) -> Style { Fixed(80).normal() }
|
fn yours(&self) -> Style { Fixed(80).normal() }
|
||||||
fn not_yours(&self) -> Style { Fixed(81).normal() }
|
fn not_yours(&self) -> Style { Fixed(81).normal() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,27 +16,27 @@ impl f::Links {
|
|||||||
|
|
||||||
|
|
||||||
pub trait Colours {
|
pub trait Colours {
|
||||||
fn normal(&self) -> Style;
|
fn normal(&self) -> Style;
|
||||||
fn multi_link_file(&self) -> Style;
|
fn multi_link_file(&self) -> Style;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
pub mod test {
|
pub mod test {
|
||||||
use super::Colours;
|
use super::Colours;
|
||||||
use output::cell::{TextCell, DisplayWidth};
|
use output::cell::{TextCell, DisplayWidth};
|
||||||
use fs::fields as f;
|
use fs::fields as f;
|
||||||
|
|
||||||
use ansi_term::Colour::*;
|
use ansi_term::Colour::*;
|
||||||
use ansi_term::Style;
|
use ansi_term::Style;
|
||||||
use locale;
|
use locale;
|
||||||
|
|
||||||
|
|
||||||
struct TestColours;
|
struct TestColours;
|
||||||
|
|
||||||
impl Colours for TestColours {
|
impl Colours for TestColours {
|
||||||
fn normal(&self) -> Style { Blue.normal() }
|
fn normal(&self) -> Style { Blue.normal() }
|
||||||
fn multi_link_file(&self) -> Style { Blue.on(Red) }
|
fn multi_link_file(&self) -> Style { Blue.on(Red) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -78,25 +78,25 @@ impl f::Permissions {
|
|||||||
|
|
||||||
|
|
||||||
pub trait Colours {
|
pub trait Colours {
|
||||||
fn dash(&self) -> Style;
|
fn dash(&self) -> Style;
|
||||||
|
|
||||||
fn user_read(&self) -> Style;
|
|
||||||
fn user_write(&self) -> Style;
|
|
||||||
fn user_execute_file(&self) -> Style;
|
|
||||||
fn user_execute_other(&self) -> Style;
|
|
||||||
|
|
||||||
fn group_read(&self) -> Style;
|
fn user_read(&self) -> Style;
|
||||||
fn group_write(&self) -> Style;
|
fn user_write(&self) -> Style;
|
||||||
fn group_execute(&self) -> Style;
|
fn user_execute_file(&self) -> Style;
|
||||||
|
fn user_execute_other(&self) -> Style;
|
||||||
|
|
||||||
fn other_read(&self) -> Style;
|
fn group_read(&self) -> Style;
|
||||||
fn other_write(&self) -> Style;
|
fn group_write(&self) -> Style;
|
||||||
fn other_execute(&self) -> Style;
|
fn group_execute(&self) -> Style;
|
||||||
|
|
||||||
fn special_user_file(&self) -> Style;
|
fn other_read(&self) -> Style;
|
||||||
fn special_other(&self) -> Style;
|
fn other_write(&self) -> Style;
|
||||||
|
fn other_execute(&self) -> Style;
|
||||||
|
|
||||||
fn attribute(&self) -> Style;
|
fn special_user_file(&self) -> Style;
|
||||||
|
fn special_other(&self) -> Style;
|
||||||
|
|
||||||
|
fn attribute(&self) -> Style;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -109,25 +109,25 @@ pub mod test {
|
|||||||
|
|
||||||
use ansi_term::Colour::*;
|
use ansi_term::Colour::*;
|
||||||
use ansi_term::Style;
|
use ansi_term::Style;
|
||||||
|
|
||||||
|
|
||||||
struct TestColours;
|
struct TestColours;
|
||||||
|
|
||||||
impl Colours for TestColours {
|
impl Colours for TestColours {
|
||||||
fn dash(&self) -> Style { Fixed(11).normal() }
|
fn dash(&self) -> Style { Fixed(11).normal() }
|
||||||
fn user_read(&self) -> Style { Fixed(101).normal() }
|
fn user_read(&self) -> Style { Fixed(101).normal() }
|
||||||
fn user_write(&self) -> Style { Fixed(102).normal() }
|
fn user_write(&self) -> Style { Fixed(102).normal() }
|
||||||
fn user_execute_file(&self) -> Style { Fixed(103).normal() }
|
fn user_execute_file(&self) -> Style { Fixed(103).normal() }
|
||||||
fn user_execute_other(&self) -> Style { Fixed(113).normal() }
|
fn user_execute_other(&self) -> Style { Fixed(113).normal() }
|
||||||
fn group_read(&self) -> Style { Fixed(104).normal() }
|
fn group_read(&self) -> Style { Fixed(104).normal() }
|
||||||
fn group_write(&self) -> Style { Fixed(105).normal() }
|
fn group_write(&self) -> Style { Fixed(105).normal() }
|
||||||
fn group_execute(&self) -> Style { Fixed(106).normal() }
|
fn group_execute(&self) -> Style { Fixed(106).normal() }
|
||||||
fn other_read(&self) -> Style { Fixed(107).normal() }
|
fn other_read(&self) -> Style { Fixed(107).normal() }
|
||||||
fn other_write(&self) -> Style { Fixed(108).normal() }
|
fn other_write(&self) -> Style { Fixed(108).normal() }
|
||||||
fn other_execute(&self) -> Style { Fixed(109).normal() }
|
fn other_execute(&self) -> Style { Fixed(109).normal() }
|
||||||
fn special_user_file(&self) -> Style { Fixed(110).normal() }
|
fn special_user_file(&self) -> Style { Fixed(110).normal() }
|
||||||
fn special_other(&self) -> Style { Fixed(111).normal() }
|
fn special_other(&self) -> Style { Fixed(111).normal() }
|
||||||
fn attribute(&self) -> Style { Fixed(112).normal() }
|
fn attribute(&self) -> Style { Fixed(112).normal() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -69,19 +69,19 @@ impl f::DeviceIDs {
|
|||||||
|
|
||||||
|
|
||||||
pub trait Colours {
|
pub trait Colours {
|
||||||
fn size(&self, size: u64) -> Style;
|
fn size(&self, size: u64) -> Style;
|
||||||
fn unit(&self) -> Style;
|
fn unit(&self) -> Style;
|
||||||
fn no_size(&self) -> Style;
|
fn no_size(&self) -> Style;
|
||||||
|
|
||||||
fn major(&self) -> Style;
|
fn major(&self) -> Style;
|
||||||
fn comma(&self) -> Style;
|
fn comma(&self) -> Style;
|
||||||
fn minor(&self) -> Style;
|
fn minor(&self) -> Style;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
pub mod test {
|
pub mod test {
|
||||||
use super::Colours;
|
use super::Colours;
|
||||||
use output::cell::{TextCell, DisplayWidth};
|
use output::cell::{TextCell, DisplayWidth};
|
||||||
use output::table::SizeFormat;
|
use output::table::SizeFormat;
|
||||||
use fs::fields as f;
|
use fs::fields as f;
|
||||||
@ -89,18 +89,18 @@ pub mod test {
|
|||||||
use locale::Numeric as NumericLocale;
|
use locale::Numeric as NumericLocale;
|
||||||
use ansi_term::Colour::*;
|
use ansi_term::Colour::*;
|
||||||
use ansi_term::Style;
|
use ansi_term::Style;
|
||||||
|
|
||||||
|
|
||||||
struct TestColours;
|
struct TestColours;
|
||||||
|
|
||||||
impl Colours for TestColours {
|
impl Colours for TestColours {
|
||||||
fn size(&self, _size: u64) -> Style { Fixed(66).normal() }
|
fn size(&self, _size: u64) -> Style { Fixed(66).normal() }
|
||||||
fn unit(&self) -> Style { Fixed(77).bold() }
|
fn unit(&self) -> Style { Fixed(77).bold() }
|
||||||
fn no_size(&self) -> Style { Black.italic() }
|
fn no_size(&self) -> Style { Black.italic() }
|
||||||
|
|
||||||
fn major(&self) -> Style { Blue.on(Red) }
|
fn major(&self) -> Style { Blue.on(Red) }
|
||||||
fn comma(&self) -> Style { Green.italic() }
|
fn comma(&self) -> Style { Green.italic() }
|
||||||
fn minor(&self) -> Style { Cyan.on(Yellow) }
|
fn minor(&self) -> Style { Cyan.on(Yellow) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -21,15 +21,15 @@ impl f::User {
|
|||||||
|
|
||||||
|
|
||||||
pub trait Colours {
|
pub trait Colours {
|
||||||
fn you(&self) -> Style;
|
fn you(&self) -> Style;
|
||||||
fn someone_else(&self) -> Style;
|
fn someone_else(&self) -> Style;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
#[allow(unused_results)]
|
#[allow(unused_results)]
|
||||||
pub mod test {
|
pub mod test {
|
||||||
use super::Colours;
|
use super::Colours;
|
||||||
use fs::fields as f;
|
use fs::fields as f;
|
||||||
use output::cell::TextCell;
|
use output::cell::TextCell;
|
||||||
|
|
||||||
@ -37,15 +37,15 @@ pub mod test {
|
|||||||
use users::mock::MockUsers;
|
use users::mock::MockUsers;
|
||||||
use ansi_term::Colour::*;
|
use ansi_term::Colour::*;
|
||||||
use ansi_term::Style;
|
use ansi_term::Style;
|
||||||
|
|
||||||
|
|
||||||
struct TestColours;
|
struct TestColours;
|
||||||
|
|
||||||
impl Colours for TestColours {
|
impl Colours for TestColours {
|
||||||
fn you(&self) -> Style { Red.bold() }
|
fn you(&self) -> Style { Red.bold() }
|
||||||
fn someone_else(&self) -> Style { Blue.underline() }
|
fn someone_else(&self) -> Style { Blue.underline() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn named() {
|
fn named() {
|
||||||
|
Loading…
Reference in New Issue
Block a user