diff --git a/Lib/cmd.py b/Lib/cmd.py
index 6d9efff..bd4e3cb 100644
--- a/Lib/cmd.py
+++ b/Lib/cmd.py
@@ -319,10 +319,61 @@
             print header
             if self.ruler:
                 print self.ruler * len(header)
-            (cmds_per_line,junk)=divmod(maxcol,cmdlen)
-            col=cmds_per_line
-            for cmd in cmds:
-                if col==0: print
-                print (("%-"+`cmdlen`+"s") % cmd),
-                col = (col+1) % cmds_per_line
-            print "\n"
+            self.columnize(cmds, maxcol-1)
+            print
+
+    def columnize(self, list, displaywidth=80):
+        """Display a list of strings as a compact set of columns.
+
+        Each column is only as wide as necessary.
+        Columns are separated by two spaces (one was not legible enough).
+        """
+        if not list:
+            print "<empty>"
+            return
+        nonstrings = [i for i in range(len(list))
+                        if not isinstance(list[i], str)]
+        if nonstrings:
+            raise TypeError, ("list[i] not a string for i in %s" %
+                              ", ".join(map(str, nonstrings)))
+        size = len(list)
+        if size == 1:
+            print list[0]
+            return
+        # Try every row count from 1 upwards
+        for nrows in range(1, len(list)):
+            ncols = (size+nrows-1) // nrows
+            colwidths = []
+            totwidth = -2
+            for col in range(ncols):
+                colwidth = 0
+                for row in range(nrows):
+                    i = row + nrows*col
+                    if i >= size:
+                        break
+                    x = list[i]
+                    colwidth = max(colwidth, len(x))
+                colwidths.append(colwidth)
+                totwidth += colwidth + 2
+                if totwidth > displaywidth:
+                    break
+            if totwidth <= displaywidth:
+                break
+        else:
+            nrows = len(list)
+            ncols = 1
+            colwidths = [0]
+        for row in range(nrows):
+            texts = []
+            for col in range(ncols):
+                i = row + nrows*col
+                if i >= size:
+                    x = ""
+                else:
+                    x = list[i]
+                texts.append(x)
+            while texts and not texts[-1]:
+                del texts[-1]
+            for col in range(len(texts)):
+                texts[col] = texts[col].ljust(colwidths[col])
+            print "  ".join(texts)
