##// END OF EJS Templates
Fixed regressions in the pure Python kernel.
epatters -
Show More
@@ -792,9 +792,10 b' class ConsoleWidget(QtGui.QWidget):'
792 # Note: this code is adapted from columnize 0.3.2.
792 # Note: this code is adapted from columnize 0.3.2.
793 # See http://code.google.com/p/pycolumnize/
793 # See http://code.google.com/p/pycolumnize/
794
794
795 # Calculate the number of characters available.
795 width = self._control.viewport().width()
796 width = self._control.viewport().width()
796 char_width = QtGui.QFontMetrics(self.font).width(' ')
797 char_width = QtGui.QFontMetrics(self.font).width(' ')
797 displaywidth = max(5, width / char_width)
798 displaywidth = max(10, (width / char_width) - 1)
798
799
799 # Some degenerate cases.
800 # Some degenerate cases.
800 size = len(items)
801 size = len(items)
@@ -197,10 +197,7 b' class FrontendWidget(HistoryConsoleWidget, BaseFrontendMixin):'
197 cursor = self._get_cursor()
197 cursor = self._get_cursor()
198 if rep['parent_header']['msg_id'] == self._complete_id and \
198 if rep['parent_header']['msg_id'] == self._complete_id and \
199 cursor.position() == self._complete_pos:
199 cursor.position() == self._complete_pos:
200 # The completer tells us what text was actually used for the
200 text = '.'.join(self._get_context())
201 # matching, so we must move that many characters left to apply the
202 # completions.
203 text = rep['content']['matched_text']
204 cursor.movePosition(QtGui.QTextCursor.Left, n=len(text))
201 cursor.movePosition(QtGui.QTextCursor.Left, n=len(text))
205 self._complete_with_items(cursor, rep['content']['matches'])
202 self._complete_with_items(cursor, rep['content']['matches'])
206
203
@@ -311,18 +308,15 b' class FrontendWidget(HistoryConsoleWidget, BaseFrontendMixin):'
311 def _complete(self):
308 def _complete(self):
312 """ Performs completion at the current cursor location.
309 """ Performs completion at the current cursor location.
313 """
310 """
314 # We let the kernel split the input line, so we *always* send an empty
311 context = self._get_context()
315 # text field. Readline-based frontends do get a real text field which
312 if context:
316 # they can use.
313 # Send the completion request to the kernel
317 text = ''
314 self._complete_id = self.kernel_manager.xreq_channel.complete(
318
315 '.'.join(context), # text
319 # Send the completion request to the kernel
316 self._get_input_buffer_cursor_line(), # line
320 self._complete_id = self.kernel_manager.xreq_channel.complete(
317 self._get_input_buffer_cursor_column(), # cursor_pos
321 text, # text
318 self.input_buffer) # block
322 self._get_input_buffer_cursor_line(), # line
319 self._complete_pos = self._get_cursor().position()
323 self._get_input_buffer_cursor_column(), # cursor_pos
324 self.input_buffer) # block
325 self._complete_pos = self._get_cursor().position()
326
320
327 def _get_banner(self):
321 def _get_banner(self):
328 """ Gets a banner to display at the beginning of a session.
322 """ Gets a banner to display at the beginning of a session.
@@ -84,6 +84,19 b' class IPythonWidget(FrontendWidget):'
84 # 'BaseFrontendMixin' abstract interface
84 # 'BaseFrontendMixin' abstract interface
85 #---------------------------------------------------------------------------
85 #---------------------------------------------------------------------------
86
86
87 def _handle_complete_reply(self, rep):
88 """ Reimplemented to support IPython's improved completion machinery.
89 """
90 cursor = self._get_cursor()
91 if rep['parent_header']['msg_id'] == self._complete_id and \
92 cursor.position() == self._complete_pos:
93 # The completer tells us what text was actually used for the
94 # matching, so we must move that many characters left to apply the
95 # completions.
96 text = rep['content']['matched_text']
97 cursor.movePosition(QtGui.QTextCursor.Left, n=len(text))
98 self._complete_with_items(cursor, rep['content']['matches'])
99
87 def _handle_history_reply(self, msg):
100 def _handle_history_reply(self, msg):
88 """ Implemented to handle history replies, which are only supported by
101 """ Implemented to handle history replies, which are only supported by
89 the IPython kernel.
102 the IPython kernel.
@@ -131,6 +144,22 b' class IPythonWidget(FrontendWidget):'
131 # 'FrontendWidget' protected interface
144 # 'FrontendWidget' protected interface
132 #---------------------------------------------------------------------------
145 #---------------------------------------------------------------------------
133
146
147 def _complete(self):
148 """ Reimplemented to support IPython's improved completion machinery.
149 """
150 # We let the kernel split the input line, so we *always* send an empty
151 # text field. Readline-based frontends do get a real text field which
152 # they can use.
153 text = ''
154
155 # Send the completion request to the kernel
156 self._complete_id = self.kernel_manager.xreq_channel.complete(
157 text, # text
158 self._get_input_buffer_cursor_line(), # line
159 self._get_input_buffer_cursor_column(), # cursor_pos
160 self.input_buffer) # block
161 self._complete_pos = self._get_cursor().position()
162
134 def _get_banner(self):
163 def _get_banner(self):
135 """ Reimplemented to return IPython's default banner.
164 """ Reimplemented to return IPython's default banner.
136 """
165 """
@@ -131,7 +131,7 b' class Kernel(HasTraits):'
131 self._abort_queue()
131 self._abort_queue()
132
132
133 def complete_request(self, ident, parent):
133 def complete_request(self, ident, parent):
134 matches = {'matches' : self.complete(parent),
134 matches = {'matches' : self._complete(parent),
135 'status' : 'ok'}
135 'status' : 'ok'}
136 completion_msg = self.session.send(self.reply_socket, 'complete_reply',
136 completion_msg = self.session.send(self.reply_socket, 'complete_reply',
137 matches, parent, ident)
137 matches, parent, ident)
General Comments 0
You need to be logged in to leave comments. Login now