# File lib/rhc/highline_extensions.rb, line 373
    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) do |sum, w|
          if w.set == 0
            sum += w.max
            available -= w.min
          end
          sum
        end
      fair = available.to_f / remaining.to_f

      column_widths.
        each do |w|
          if w.set == 0
            alloc = (w.max * fair).to_i
            overflow = alloc + w.min - w.max
            if overflow > 0
              alloc -= overflow
            end
            available -= alloc
            w.set = alloc + w.min
          end
        end.
        each do |w|
          next unless available > 0
          gap = w.max - w.set
          if gap > 0
            left = [gap,available].min
            available -= left
            w.set += left
          end
        end.map(&:set)
    end