Browse Source

Wire up the colour-scale option

Ben S 9 years ago
parent
commit
0ffb331976
4 changed files with 23 additions and 16 deletions
  1. 1 0
      README.md
  2. 3 1
      src/options/help.rs
  3. 10 8
      src/options/mod.rs
  4. 9 7
      src/options/view.rs

+ 1 - 0
README.md

@@ -23,6 +23,7 @@ exa’s options are similar, but not exactly the same, as `ls`.
 - **-T**, **--tree**: recurse into subdirectories in a tree view
 - **-x**, **--across**: sort multi-column view entries across
 - **--color**, **--colour**: when to colourise the output
+- **--color-scale**, **--colour-scale**: colour file sizes according to their magnitude
 
 ### Filtering Options
 

+ 3 - 1
src/options/help.rs

@@ -7,7 +7,9 @@ DISPLAY OPTIONS
   -R, --recurse      recurse into directories
   -T, --tree         recurse into subdirectories in a tree view
   -x, --across       sort multi-column view entries across
-  --color, --colour  when to colourise the output
+
+  --color=WHEN,  --colour=WHEN   when to colourise the output (always, auto, never)
+  --color-scale, --colour-scale  colour file sizes according to their magnitude
 
 FILTERING AND SORTING OPTIONS
   -a, --all                  show dot-files

+ 10 - 8
src/options/mod.rs

@@ -49,14 +49,16 @@ impl Options {
         opts.optflag("?", "help",      "show list of command-line options");
 
         // Display options
-        opts.optflag("1", "oneline",   "display one entry per line");
-        opts.optflag("G", "grid",      "display entries in a grid view (default)");
-        opts.optflag("l", "long",      "display extended details and attributes");
-        opts.optflag("R", "recurse",   "recurse into directories");
-        opts.optflag("T", "tree",      "recurse into subdirectories in a tree view");
-        opts.optflag("x", "across",    "sort multi-column view entries across");
-        opts.optopt ("",  "color",     "when to show anything in colours", "WHEN");
-        opts.optopt ("",  "colour",    "when to show anything in colours (alternate spelling)", "WHEN");
+        opts.optflag("1", "oneline",      "display one entry per line");
+        opts.optflag("G", "grid",         "display entries in a grid view (default)");
+        opts.optflag("l", "long",         "display extended details and attributes");
+        opts.optflag("R", "recurse",      "recurse into directories");
+        opts.optflag("T", "tree",         "recurse into subdirectories in a tree view");
+        opts.optflag("x", "across",       "sort multi-column view entries across");
+        opts.optopt ("",  "color",        "when to show anything in colours", "WHEN");
+        opts.optopt ("",  "colour",       "when to show anything in colours (alternate spelling)", "WHEN");
+        opts.optflag("",  "color-scale",  "use a colour scale when displaying file sizes (alternate spelling)");
+        opts.optflag("",  "colour-scale", "use a colour scale when displaying file sizes");
 
         // Filtering and sorting options
         opts.optflag("",  "group-directories-first", "list directories before other files");

+ 9 - 7
src/options/view.rs

@@ -25,6 +25,10 @@ impl View {
     pub fn deduce(matches: &getopts::Matches, filter: FileFilter, dir_action: DirAction) -> Result<View, Misfire> {
         use options::misfire::Misfire::*;
 
+        let colour_scale = || {
+            matches.opt_present("color-scale") || matches.opt_present("colour-scale")
+        };
+
         let long = || {
             if matches.opt_present("across") && !matches.opt_present("grid") {
                 Err(Useless("across", true, "long"))
@@ -34,13 +38,12 @@ impl View {
             }
             else {
                 let term_colours = try!(TerminalColours::deduce(matches));
-                let scale        = true;
                 let colours = match term_colours {
-                    TerminalColours::Always    => Colours::colourful(scale),
+                    TerminalColours::Always    => Colours::colourful(colour_scale()),
                     TerminalColours::Never     => Colours::plain(),
                     TerminalColours::Automatic => {
                         if dimensions().is_some() {
-                            Colours::colourful(scale)
+                            Colours::colourful(colour_scale())
                         }
                         else {
                             Colours::plain()
@@ -85,13 +88,12 @@ impl View {
         let other_options_scan = || {
             let term_colours = try!(TerminalColours::deduce(matches));
             let term_width   = try!(TerminalWidth::deduce());
-            let scale        = true;
 
             if let Some(&width) = term_width.as_ref() {
                 let colours = match term_colours {
-                    TerminalColours::Always    => Colours::colourful(scale),
+                    TerminalColours::Always    => Colours::colourful(colour_scale()),
                     TerminalColours::Never     => Colours::plain(),
-                    TerminalColours::Automatic => Colours::colourful(scale),
+                    TerminalColours::Automatic => Colours::colourful(colour_scale()),
                 };
 
                 if matches.opt_present("oneline") {
@@ -134,7 +136,7 @@ impl View {
                 // fallback to the lines view.
 
                 let colours = match term_colours {
-                    TerminalColours::Always    => Colours::colourful(scale),
+                    TerminalColours::Always    => Colours::colourful(colour_scale()),
                     TerminalColours::Never     => Colours::plain(),
                     TerminalColours::Automatic => Colours::plain(),
                 };