# File lib/rhc/highline_extensions.rb, line 352
    def allocate_widths_for(available)
      available -= (columns-1) * joiner.length + indent.length
      return column_widths.map{ |w| w.max } if available >= column_widths.inject(0){ |sum, w| sum + w.max } || column_widths.inject(0){ |sum, w| sum + w.min } > available

      fair = available / columns
      column_widths.each do |w|
        if w.set > 0
          available -= w.set
          next
        end
        w.set = if w.max <= fair
            available -= w.max
            w.max
          else
            0
          end
      end

      remaining = column_widths.inject(0){ |sum, w| if w.set == 0; sum += w.max; available -= w.min; end; sum }
      fair = available.to_f / remaining.to_f

      column_widths.
        each do |w| 
          if w.set == 0
            available -= (alloc = (w.max * fair).to_i)
            w.set = alloc + w.min
          end
        end.
        each{ |w| if available > 0 && w.set < w.max; w.set += 1; available -= 1; end }.
        map(&:set)
    end