Show More
@@ -576,15 +576,15 b' class ConsoleWidget(QtGui.QPlainTextEdit):' | |||
|
576 | 576 | if self.gui_completion: |
|
577 | 577 | self._completion_widget.show_items(cursor, items) |
|
578 | 578 | else: |
|
579 | text = self.format_as_columns(items) | |
|
579 | text = self._format_as_columns(items) | |
|
580 | 580 | self._append_plain_text_keeping_prompt(text) |
|
581 | 581 | |
|
582 | def format_as_columns(self, items, separator=' '): | |
|
582 | def _format_as_columns(self, items, separator=' '): | |
|
583 | 583 | """ Transform a list of strings into a single string with columns. |
|
584 | 584 | |
|
585 | 585 | Parameters |
|
586 | 586 | ---------- |
|
587 |
items : sequence |
|
|
587 | items : sequence of strings | |
|
588 | 588 | The strings to process. |
|
589 | 589 | |
|
590 | 590 | separator : str, optional [default is two spaces] |
@@ -600,10 +600,10 b' class ConsoleWidget(QtGui.QPlainTextEdit):' | |||
|
600 | 600 | font_metrics = QtGui.QFontMetrics(self.font) |
|
601 | 601 | displaywidth = max(5, (self.width() / font_metrics.width(' ')) - 1) |
|
602 | 602 | |
|
603 | # Some degenerate cases | |
|
603 | # Some degenerate cases. | |
|
604 | 604 | size = len(items) |
|
605 | 605 | if size == 0: |
|
606 |
return |
|
|
606 | return '\n' | |
|
607 | 607 | elif size == 1: |
|
608 | 608 | return '%s\n' % str(items[0]) |
|
609 | 609 | |
@@ -643,7 +643,7 b' class ConsoleWidget(QtGui.QPlainTextEdit):' | |||
|
643 | 643 | del texts[-1] |
|
644 | 644 | for col in range(len(texts)): |
|
645 | 645 | texts[col] = texts[col].ljust(colwidths[col]) |
|
646 |
string += |
|
|
646 | string += '%s\n' % str(separator.join(texts)) | |
|
647 | 647 | return string |
|
648 | 648 | |
|
649 | 649 | def _get_block_plain_text(self, block): |
@@ -10,7 +10,7 b' class IPythonWidget(FrontendWidget):' | |||
|
10 | 10 | """ A FrontendWidget for an IPython kernel. |
|
11 | 11 | """ |
|
12 | 12 | |
|
13 | # The default stylesheet for prompts, colors, etc. | |
|
13 | # The default stylesheet: black text on a white background. | |
|
14 | 14 | default_stylesheet = """ |
|
15 | 15 | .error { color: red; } |
|
16 | 16 | .in-prompt { color: navy; } |
@@ -19,6 +19,17 b' class IPythonWidget(FrontendWidget):' | |||
|
19 | 19 | .out-prompt-number { font-weight: bold; } |
|
20 | 20 | """ |
|
21 | 21 | |
|
22 | # A dark stylesheet: white text on a black background. | |
|
23 | dark_stylesheet = """ | |
|
24 | QPlainTextEdit { background-color: black; color: white } | |
|
25 | QFrame { border: 1px solid grey; } | |
|
26 | .error { color: red; } | |
|
27 | .in-prompt { color: lime; } | |
|
28 | .in-prompt-number { color: lime; font-weight: bold; } | |
|
29 | .out-prompt { color: red; } | |
|
30 | .out-prompt-number { color: red; font-weight: bold; } | |
|
31 | """ | |
|
32 | ||
|
22 | 33 | #--------------------------------------------------------------------------- |
|
23 | 34 | # 'QObject' interface |
|
24 | 35 | #--------------------------------------------------------------------------- |
@@ -27,34 +38,10 b' class IPythonWidget(FrontendWidget):' | |||
|
27 | 38 | super(IPythonWidget, self).__init__(parent) |
|
28 | 39 | |
|
29 | 40 | # Initialize protected variables. |
|
30 | self._magic_overrides = {} | |
|
31 | 41 | self._prompt_count = 0 |
|
32 | 42 | |
|
33 | 43 | # Set a default stylesheet. |
|
34 |
self.set_style_sheet( |
|
|
35 | ||
|
36 | #--------------------------------------------------------------------------- | |
|
37 | # 'ConsoleWidget' abstract interface | |
|
38 | #--------------------------------------------------------------------------- | |
|
39 | ||
|
40 | def _execute(self, source, hidden): | |
|
41 | """ Reimplemented to override magic commands. | |
|
42 | """ | |
|
43 | magic_source = source.strip() | |
|
44 | if magic_source.startswith('%'): | |
|
45 | magic_source = magic_source[1:] | |
|
46 | magic, sep, arguments = magic_source.partition(' ') | |
|
47 | if not magic: | |
|
48 | magic = magic_source | |
|
49 | ||
|
50 | callback = self._magic_overrides.get(magic) | |
|
51 | if callback: | |
|
52 | output = callback(arguments) | |
|
53 | if output: | |
|
54 | self.appendPlainText(output) | |
|
55 | self._show_interpreter_prompt() | |
|
56 | else: | |
|
57 | super(IPythonWidget, self)._execute(source, hidden) | |
|
44 | self.reset_style_sheet() | |
|
58 | 45 | |
|
59 | 46 | #--------------------------------------------------------------------------- |
|
60 | 47 | # 'FrontendWidget' interface |
@@ -119,26 +106,15 b' class IPythonWidget(FrontendWidget):' | |||
|
119 | 106 | # 'IPythonWidget' interface |
|
120 | 107 | #--------------------------------------------------------------------------- |
|
121 | 108 | |
|
122 | def set_magic_override(self, magic, callback): | |
|
123 | """ Overrides an IPython magic command. This magic will be intercepted | |
|
124 | by the frontend rather than passed on to the kernel and 'callback' | |
|
125 | will be called with a single argument: a string of argument(s) for | |
|
126 | the magic. The callback can (optionally) return text to print to the | |
|
127 | console. | |
|
109 | def reset_style_sheet(self): | |
|
110 | """ Sets the style sheet to the default style sheet. | |
|
128 | 111 | """ |
|
129 | self._magic_overrides[magic] = callback | |
|
130 | ||
|
131 | def remove_magic_override(self, magic): | |
|
132 | """ Removes the override for the specified magic, if there is one. | |
|
133 | """ | |
|
134 | try: | |
|
135 | del self._magic_overrides[magic] | |
|
136 | except KeyError: | |
|
137 | pass | |
|
112 | self.set_style_sheet(self.default_stylesheet) | |
|
138 | 113 | |
|
139 | 114 | def set_style_sheet(self, stylesheet): |
|
140 | 115 | """ Sets the style sheet. |
|
141 | 116 | """ |
|
117 | self.setStyleSheet(stylesheet) | |
|
142 | 118 | self.document().setDefaultStyleSheet(stylesheet) |
|
143 | 119 | |
|
144 | 120 |
@@ -66,7 +66,7 b" def get_tokens_unprocessed(self, text, stack=('root',)):" | |||
|
66 | 66 | RegexLexer.get_tokens_unprocessed = get_tokens_unprocessed |
|
67 | 67 | |
|
68 | 68 | |
|
69 | class BlockUserData(QtGui.QTextBlockUserData): | |
|
69 | class PygmentsBlockUserData(QtGui.QTextBlockUserData): | |
|
70 | 70 | """ Storage for the user data associated with each line. |
|
71 | 71 | """ |
|
72 | 72 | |
@@ -81,7 +81,7 b' class BlockUserData(QtGui.QTextBlockUserData):' | |||
|
81 | 81 | attrs = ['syntax_stack'] |
|
82 | 82 | kwds = ', '.join([ '%s=%r' % (attr, getattr(self, attr)) |
|
83 | 83 | for attr in attrs ]) |
|
84 | return 'BlockUserData(%s)' % kwds | |
|
84 | return 'PygmentsBlockUserData(%s)' % kwds | |
|
85 | 85 | |
|
86 | 86 | |
|
87 | 87 | class PygmentsHighlighter(QtGui.QSyntaxHighlighter): |
@@ -117,7 +117,8 b' class PygmentsHighlighter(QtGui.QSyntaxHighlighter):' | |||
|
117 | 117 | index += l |
|
118 | 118 | |
|
119 | 119 | if hasattr(self._lexer, '_saved_state_stack'): |
|
120 | data = BlockUserData(syntax_stack=self._lexer._saved_state_stack) | |
|
120 | data = PygmentsBlockUserData( | |
|
121 | syntax_stack=self._lexer._saved_state_stack) | |
|
121 | 122 | self.currentBlock().setUserData(data) |
|
122 | 123 | # Clean up for the next go-round. |
|
123 | 124 | del self._lexer._saved_state_stack |
@@ -174,6 +175,8 b' class PygmentsHighlighter(QtGui.QSyntaxHighlighter):' | |||
|
174 | 175 | return result |
|
175 | 176 | |
|
176 | 177 | def _get_color(self, color): |
|
178 | """ Returns a QColor built from a Pygments color string. | |
|
179 | """ | |
|
177 | 180 | qcolor = QtGui.QColor() |
|
178 | 181 | qcolor.setRgb(int(color[:2], base=16), |
|
179 | 182 | int(color[2:4], base=16), |
General Comments 0
You need to be logged in to leave comments.
Login now