code: def colformat(strings, num_sep_spaces=1, terminal_width=None):
      
      if terminal_width is None:
          terminal_width = get_terminal_size().columns
  
      if not strings:
          return
  
      num_items = len(strings)
      max_len = max([len(strip_ansi_escapes(s)) for s in strings])
  
      num_columns = min(
          int((terminal_width + num_sep_spaces) / (max_len + num_sep_spaces)),
          num_items)
      num_columns = max(1, num_columns)
  
      num_lines = int(math.ceil(float(num_items) / num_columns))
      num_columns = int(math.ceil(float(num_items) / num_lines))
  
      num_elements_last_column = num_items % num_lines
      if num_elements_last_column == 0:
          num_elements_last_column = num_lines
  
      lines = []
      for i in range(num_lines):
          line_size = num_columns
          if i >= num_elements_last_column:
              line_size -= 1
          lines.append([None] * line_size)
  
      for i, line in enumerate(lines):
          line_size = len(line)
          for j in range(line_size):
              k = i + num_lines * j
              item = strings[k]
              if j % line_size != line_size - 1:
                  item_len = len(strip_ansi_escapes(item))
                  item = item + ' ' * (max_len - item_len)
              line[j] = item
  
      sep = ' ' * num_sep_spaces
      for line in lines:
          yield sep.join(line)
docs: Format a list of strings like ls does multi-column output.