|
|
@@ -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))
|