A modern replacement for ‘ls’.
Go to file
Corey Ford 6e19563879 Improve matching of Git status entries to files
The challenge is that the paths returned from libgit2's status listing
are from the perspective of the Git repository and thus effectively
relative to the working tree root, while the other paths we're
manipulating are (potentially) relative to our current working
directory. So, if those two aren't identical (if running from outside
the working tree, or from a subdirectory), the paths won't match up.

A reasonably reliable way around this is to resolve both types of paths
to absolute paths before comparing them. This fixes #15 at a basic
level, anyway.

What still doesn't work: referring to the working tree or one of its
descendants via a symlink. For that, we'd probably need to fully resolve
symlinks in the file path.

(The unwrap_or()'s are messy and will probably just result in missing
status information, but then, what information could you hope to get
without having both a current working directory and a Git working tree?)
2015-02-22 14:44:54 -08:00
src Improve matching of Git status entries to files 2015-02-22 14:44:54 -08:00
.gitignore Upgrade to latest ansi_term 2014-11-26 07:36:09 +00:00
.travis.yml Leverage new Travis support for Rust 2014-11-23 23:50:26 +00:00
Cargo.lock FIX bitflags depedency 2015-02-21 17:59:38 -05:00
Cargo.toml FIX bitflags depedency 2015-02-21 17:59:38 -05:00
LICENCE Update LICENCE 2014-07-02 22:07:09 +01:00
README.md Add sort-by-date options 2015-02-22 00:40:46 +00:00
screenshot.png Use brighter colours in screenshot 2014-12-18 07:16:27 +00:00

exa Build status

exa is a replacement for ls written in Rust.

Screenshot

Screenshot of exa

Options

  • -1, --oneline: display one entry per line
  • -a, --all: show dot files
  • -b, --binary: use binary (power of two) file sizes
  • -B, --bytes: list file sizes in bytes, without prefixes
  • -d, --list-dirs: list directories as regular files
  • -g, --group: show group as well as user
  • -h, --header: show a header row
  • -H, --links: show number of hard links column
  • -i, --inode: show inode number column
  • -l, --long: display extended details and attributes
  • -r, --reverse: reverse sort order
  • -R, --recurse: recurse into subdirectories
  • -s, --sort=(field): field to sort by
  • -S, --blocks: show number of file system blocks
  • -t, --time: which timestamp to show for a file
  • -T, --tree: recurse into subdirectories in a tree view
  • -x, --across: sort multi-column view entries across

You can sort by name, size, ext, inode, modified, created, accessed, or none.

Installation

exa is written in Rust. You'll have to use the nightly -- I try to keep it up to date with the latest version when possible. Once you have it set up, a simple cargo build will pull in all the dependencies and compile exa.

exa depends on libgit2 for certain features. If you're unable to compile libgit2, you can opt out of Git support by passing --no-default-features to Cargo.