Explorar el Código

refactor: TerminalWidth::deduce to -w/--width

TerminalWidth::deduce to respect -w/--width option
Sandro-Alessio Gierens hace 2 años
padre
commit
df0aaa8a26
Se han modificado 1 ficheros con 19 adiciones y 3 borrados
  1. 19 3
      src/options/view.rs

+ 19 - 3
src/options/view.rs

@@ -11,7 +11,7 @@ use crate::output::time::TimeFormat;
 impl View {
     pub fn deduce<V: Vars>(matches: &MatchedFlags<'_>, vars: &V) -> Result<Self, OptionsError> {
         let mode = Mode::deduce(matches, vars)?;
-        let width = TerminalWidth::deduce(vars)?;
+        let width = TerminalWidth::deduce(matches, vars)?;
         let file_style = FileStyle::deduce(matches, vars)?;
         let deref_links = matches.has(&flags::DEREF_LINKS)?;
         Ok(Self { mode, width, file_style, deref_links })
@@ -145,10 +145,26 @@ impl details::Options {
 
 
 impl TerminalWidth {
-    fn deduce<V: Vars>(vars: &V) -> Result<Self, OptionsError> {
+    fn deduce<V: Vars>(matches: &MatchedFlags<'_>, vars: &V) -> Result<Self, OptionsError> {
         use crate::options::vars;
 
-        if let Some(columns) = vars.get(vars::COLUMNS).and_then(|s| s.into_string().ok()) {
+        if let Some(width) = matches.get(&flags::WIDTH)? {
+            let arg_str = width.to_string_lossy();
+            match arg_str.parse() {
+                Ok(w) => {
+                    if w >= 1 {
+                        Ok(Self::Set(w))
+                    } else {
+                        Ok(Self::Automatic)
+                    }
+                }
+                Err(e) => {
+                    let source = NumberSource::Arg(&flags::WIDTH);
+                    Err(OptionsError::FailedParse(arg_str.to_string(), source, e))
+                }
+            }
+        }
+        else if let Some(columns) = vars.get(vars::COLUMNS).and_then(|s| s.into_string().ok()) {
             match columns.parse() {
                 Ok(width) => {
                     Ok(Self::Set(width))