just() {
# use: ll=WIDTH just [ FILE ]
# but you will first want to make sure length of lines does not exceed desired width
if [ -f "$1" ]; then
# a portable-ism for readarray
while read text[ln++]; do :; done < "$1"
else
while read text[ln++]; do :; done
fi
ln=0
for line in "${text[@]}"; do
if [ -z "${text[++ln]//[[:space:]]}" -o ${#line} -ge $ll -o ${#line} -le 1 ]; then
# forgo justification on last line of each paragraph
# as well as any line too long to be printed correctly
printf '%s\n' "$line"
else
# this else is the original justify_line function from the editor :)
(( ll )) || ll=60
w=($line) # words as an array
wc=${#w[@]} # word count
[ $wc -eq 1 ] && echo -n "$line" && return
ch="${line// }" # non-whitespace characters
((wscol=ll-${#ch})) # number of whitespace columns
((spaces=wc>1?wc:1)) # number of spaces
((s=wscol/spaces)) # width of one space after justification
((f=wscol%spaces)) # leftover columns to achieve exact width
((m=wc/(f>1?f:2))) # word dividing the left and right alignment
((am=m>2?m-1:m)) # amended middle, further even out odd spaces
# i is the index of the current word, c its length, S the final spacing and alignment
for ((i=0,c=${#w[0]}; S=i<m?c+s:f?f--, c+s+1:c+s, S=i<am?-S:S, i<wc; c=${#w[++i]})); do
fmt="${fmt}%${S}s"
arg="${arg} ${w[i]}"
done