1

I have create a help section that have the following display

-m         This is a very very very very very very very very very very
very very very very very very very very very very long sentence

I would like to have

-m         This is a very very very very very very very very very very
           very very very very very very very very very very long 
           sentence.

Specify that I want to have 2 columns?

Jeff Schaller
  • 66,199
  • 35
  • 114
  • 250
user123456
  • 4,758
  • 11
  • 52
  • 78

3 Answers3

1

This is not exactly what you required, but an easy workaround if you do not have the parameter name and the description in the same line. With fmt the indentation of the second line is kept:

$ FOO="-m\n\tThis is a very very very very very very very very very very very very very very very very very very very very long sentence"

$ echo -e $FOO
-m
    This is a very very very very very very very very very very very very very very very very very very very very long sentence

$ echo -e $FOO | fmt 
-m
    This is a very very very very very very very very very very very
    very very very very very very very very very long sentence
Jaleks
  • 2,499
  • 1
  • 17
  • 34
1

Here's a function I put together that you could use to print help-related items, one at a time. I used the example of -m and the long help string from the question. The function hard-codes a width of 10 for the first column, then computes the remaining space for column 2.

#!/bin/bash

function printhelp() (
  c1width=10
  cols=$(tput cols)
  c2width=$((cols - c1width - 1))
  readarray -t lines < <(printf '%s' "$2" | fmt -w $c2width)
  for((line=0; line < ${#lines[*]}; line++))
  do
    if [ $line -eq 0 ]
    then
      col1="$1"
    else
      col1=" "
    fi
    printf "%-${c1width}s %-${c2width}s\n" "$col1" "${lines[line]}"
  done
)

optf='-m'
optd='This is a very very very very very very very very very very very very very very very very very very very very long sentence'
printhelp "$optf" "$optd"

Sample output on a 50-column screen:

-m         This is a very very very very very
           very very very very very very very
           very very very very very very very
           very long sentence

and on an 80-column screen:

-m         This is a very very very very very very very very very very very
           very very very very very very very very very long sentence

and on a 130-column screen:

-m         This is a very very very very very very very very very very very very very very very very very very very very
           long sentence

and on a 150-column screen:

-m         This is a very very very very very very very very very very very very very very very very very very very very long sentence
Jeff Schaller
  • 66,199
  • 35
  • 114
  • 250
0

This solution is also valid for zsh

FLAG="-m VARIABLE"
DESCRIPTION="This is a very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very long sentence"
DISTANCE_FLAG=3

WIDTH1=$(echo "$FLAG" | wc -c ) 
WIDTH2=$(($(tput cols)-$DISTANCE_FLAG -$WIDTH1 ))

paste <(echo $FLAG ) <(echo $DESCRIPTION | fold -sw $(( $(tput cols) -     $DISTANCE_FLAG -$WIDTH1     )) )| pr -t -e$(($DISTANCE_FLAG+$WIDTH1))
user123456
  • 4,758
  • 11
  • 52
  • 78