'Writes a definition list into the buffer.  This is how options
and commands are usually formatted.
:param rows: a list of two item tuples for the terms and values.
:param col_max: the maximum width of the first column.
:param col_spacing: the number of spaces between the first and
second column.'

def write_dl(self, rows, col_max=30, col_spacing=2):

    rows = list(rows)
    widths = measure_table(rows)
    if (len(widths) != 2):
        raise TypeError('Expected    two    columns    for    definition    list')
    first_col = (min(widths[0], col_max) + col_spacing)
    for (first, second) in iter_rows(rows, len(widths)):
        self.write(('%*s%s' % (self.current_indent, '', first)))
        if (not second):
            self.write('\n')
            continue
        if (term_len(first) <= (first_col - col_spacing)):
            self.write(('    ' * (first_col - term_len(first))))
        else:
            self.write('\n')
            self.write(('    ' * (first_col + self.current_indent)))
        text_width = max(((self.width - first_col) - 2), 10)
        lines = iter(wrap_text(second, text_width).splitlines())
        if lines:
            self.write((next(lines) + '\n'))
            for line in lines:
                self.write(('%*s%s\n' % ((first_col + self.current_indent), '', line)))
        else:
            self.write('\n')
