##// END OF EJS Templates
Replaced external module for formatting columns with adapted code.
epatters -
Show More
@@ -5,7 +5,6 b' import sys'
5 5 from PyQt4 import QtCore, QtGui
6 6
7 7 # Local imports
8 from IPython.external.columnize import columnize
9 8 from ansi_code_processor import QtAnsiCodeProcessor
10 9 from completion_widget import CompletionWidget
11 10
@@ -580,7 +579,7 b' class ConsoleWidget(QtGui.QPlainTextEdit):'
580 579 text = self.format_as_columns(items)
581 580 self._append_plain_text_keeping_prompt(text)
582 581
583 def format_as_columns(self, items, separator=' ', vertical=True):
582 def format_as_columns(self, items, separator=' '):
584 583 """ Transform a list of strings into a single string with columns.
585 584
586 585 Parameters
@@ -591,19 +590,61 b' class ConsoleWidget(QtGui.QPlainTextEdit):'
591 590 separator : str, optional [default is two spaces]
592 591 The string that separates columns.
593 592
594 vertical: bool, optional [default True]
595 If set, consecutive items will be arranged from top to bottom, then
596 from left to right. Otherwise, consecutive items will be aranged
597 from left to right, then from top to bottom.
598
599 593 Returns
600 594 -------
601 595 The formatted string.
602 596 """
597 # Note: this code is adapted from columnize 0.3.2.
598 # See http://code.google.com/p/pycolumnize/
599
603 600 font_metrics = QtGui.QFontMetrics(self.font)
604 width = self.width() / font_metrics.width(' ')
605 return columnize(items, displaywidth=width,
606 colsep=separator, arrange_vertical=vertical)
601 displaywidth = max(5, (self.width() / font_metrics.width(' ')) - 1)
602
603 # Some degenerate cases
604 size = len(items)
605 if size == 0:
606 return "\n"
607 elif size == 1:
608 return '%s\n' % str(items[0])
609
610 # Try every row count from 1 upwards
611 array_index = lambda nrows, row, col: nrows*col + row
612 for nrows in range(1, size):
613 ncols = (size + nrows - 1) // nrows
614 colwidths = []
615 totwidth = -len(separator)
616 for col in range(ncols):
617 # Get max column width for this column
618 colwidth = 0
619 for row in range(nrows):
620 i = array_index(nrows, row, col)
621 if i >= size: break
622 x = items[i]
623 colwidth = max(colwidth, len(x))
624 colwidths.append(colwidth)
625 totwidth += colwidth + len(separator)
626 if totwidth > displaywidth:
627 break
628 if totwidth <= displaywidth:
629 break
630
631 # The smallest number of rows computed and the max widths for each
632 # column has been obtained. Now we just have to format each of the rows.
633 string = ''
634 for row in range(nrows):
635 texts = []
636 for col in range(ncols):
637 i = row + nrows*col
638 if i >= size:
639 texts.append('')
640 else:
641 texts.append(items[i])
642 while texts and not texts[-1]:
643 del texts[-1]
644 for col in range(len(texts)):
645 texts[col] = texts[col].ljust(colwidths[col])
646 string += "%s\n" % str(separator.join(texts))
647 return string
607 648
608 649 def _get_block_plain_text(self, block):
609 650 """ Given a QTextBlock, return its unformatted text.
1 NO CONTENT: file was removed
General Comments 0
You need to be logged in to leave comments. Login now