##// END OF EJS Templates
Generate "All magics..." menu live...
Matthias BUSSONNIER -
Show More
@@ -4,6 +4,7 b' from __future__ import print_function'
4 from collections import namedtuple
4 from collections import namedtuple
5 import sys
5 import sys
6 import time
6 import time
7 import uuid
7
8
8 # System library imports
9 # System library imports
9 from pygments.lexers import PythonLexer
10 from pygments.lexers import PythonLexer
@@ -137,6 +138,7 b' class FrontendWidget(HistoryConsoleWidget, BaseFrontendMixin):'
137 self._input_splitter = self._input_splitter_class(input_mode='cell')
138 self._input_splitter = self._input_splitter_class(input_mode='cell')
138 self._kernel_manager = None
139 self._kernel_manager = None
139 self._request_info = {}
140 self._request_info = {}
141 self._callback_dict=dict([])
140
142
141 # Configure the ConsoleWidget.
143 # Configure the ConsoleWidget.
142 self.tab_width = 4
144 self.tab_width = 4
@@ -311,6 +313,42 b' class FrontendWidget(HistoryConsoleWidget, BaseFrontendMixin):'
311 cursor.movePosition(QtGui.QTextCursor.Left, n=len(text))
313 cursor.movePosition(QtGui.QTextCursor.Left, n=len(text))
312 self._complete_with_items(cursor, rep['content']['matches'])
314 self._complete_with_items(cursor, rep['content']['matches'])
313
315
316 def _silent_exec_callback(self,expr,callback):
317 """ silently execute a function in the kernel and send the reply to the callback
318
319 expr should be a valid string to be executed by the kernel.
320
321 callback a function accepting one argument (str)
322
323 the callback is called with the 'repr()' of the result as first argument.
324 to get the object, do 'eval()' on the passed value.
325 """
326
327 # generate uuid, which would be used as a indication of wether or not
328 # the unique request originate from here (can use msg id ?)
329 local_uuid = str(uuid.uuid1())
330 msg_id = self.kernel_manager.shell_channel.execute('',
331 silent=True,
332 user_expressions={ local_uuid:expr,
333 }
334 )
335 self._callback_dict[local_uuid]=callback
336 self._request_info['execute'] = self._ExecutionRequest(msg_id, 'silent_exec_callback')
337
338 def _handle_exec_callback(self,msg):
339 """ Called when _silent_exec_callback message comme back from the kernel.
340
341 Strip the message comming back from the kernel and send it to the
342 corresponding callback function.
343 """
344 cnt=msg['content']
345 ue=cnt['user_expressions']
346 for i in ue.keys():
347 if i in self._callback_dict.keys():
348 f= self._callback_dict[i]
349 f(ue[i])
350 self._callback_dict.pop(i)
351
314 def _handle_execute_reply(self, msg):
352 def _handle_execute_reply(self, msg):
315 """ Handles replies for code execution.
353 """ Handles replies for code execution.
316 """
354 """
@@ -342,6 +380,9 b' class FrontendWidget(HistoryConsoleWidget, BaseFrontendMixin):'
342
380
343 self._show_interpreter_prompt_for_reply(msg)
381 self._show_interpreter_prompt_for_reply(msg)
344 self.executed.emit(msg)
382 self.executed.emit(msg)
383 elif info and info.id == msg['parent_header']['msg_id'] and \
384 info.kind == 'silent_exec_callback' and not self._hidden:
385 self._handle_exec_callback(msg)
345 else:
386 else:
346 super(FrontendWidget, self)._handle_execute_reply(msg)
387 super(FrontendWidget, self)._handle_execute_reply(msg)
347
388
@@ -544,10 +544,35 b' class MainWindow(QtGui.QMainWindow):'
544
544
545 self.kernel_menu.addSeparator()
545 self.kernel_menu.addSeparator()
546
546
547 def update_all_magic_menu(self):
548 # first define a callback which will get the list of all magic and put it in the menu.
549 def populate_all_magic_menu(val=None):
550 alm_magic_menu = self.magic_menu.addMenu("&All Magics...")
551 def make_dynamic_magic(i):
552 def inner_dynamic_magic():
553 self.active_frontend.execute(i)
554 inner_dynamic_magic.__name__ = "dynamics_magic_s"
555 return inner_dynamic_magic
556
557 for magic in eval(val):
558 pmagic = '%s%s'%('%',magic)
559 xaction = QtGui.QAction(pmagic,
560 self,
561 triggered=make_dynamic_magic(pmagic)
562 )
563 alm_magic_menu.addAction(xaction)
564 self.active_frontend._silent_exec_callback('get_ipython().lsmagic()',populate_all_magic_menu)
565
547 def init_magic_menu(self):
566 def init_magic_menu(self):
548 self.magic_menu = self.menuBar().addMenu("&Magic")
567 self.magic_menu = self.menuBar().addMenu("&Magic")
549 self.all_magic_menu = self.magic_menu.addMenu("&All Magics")
568 self.all_magic_menu = self.magic_menu.addMenu("&All Magics")
550
569
570 self.pop = QtGui.QAction("&Populate All Magic Menu",
571 self,
572 statusTip="Clear all varible from workspace",
573 triggered=self.update_all_magic_menu)
574 self.add_menu_action(self.magic_menu, self.pop)
575
551 self.reset_action = QtGui.QAction("&Reset",
576 self.reset_action = QtGui.QAction("&Reset",
552 self,
577 self,
553 statusTip="Clear all varible from workspace",
578 statusTip="Clear all varible from workspace",
General Comments 0
You need to be logged in to leave comments. Login now