Show More
@@ -244,22 +244,39 b' cl_args = (' | |||||
244 | action='store_true', dest='Global.force_interact', default=NoConfigDefault, |
|
244 | action='store_true', dest='Global.force_interact', default=NoConfigDefault, | |
245 | help="If running code from the command line, become interactive afterwards.") |
|
245 | help="If running code from the command line, become interactive afterwards.") | |
246 | ), |
|
246 | ), | |
|
247 | ||||
|
248 | # Options to start with GUI control enabled from the beginning | |||
|
249 | (('--gui',), dict( | |||
|
250 | type=str, dest='Global.gui', default=NoConfigDefault, | |||
|
251 | help="Enable GUI event loop integration ('qt', 'wx', 'gtk').", | |||
|
252 | metavar='gui-mode') | |||
|
253 | ), | |||
|
254 | ||||
|
255 | (('--pylab',), dict( | |||
|
256 | type=str, dest='Global.pylab', default=NoConfigDefault, | |||
|
257 | nargs='?', const='auto', metavar='gui-mode', | |||
|
258 | help="Pre-load matplotlib and numpy for interactive use. "+ | |||
|
259 | "If no value is given, the gui backend is matplotlib's, else use "+ | |||
|
260 | "one of: ['tk', 'qt', 'wx', 'gtk'].") | |||
|
261 | ), | |||
|
262 | ||||
|
263 | # Legacy GUI options. Leave them in for backwards compatibility, but the | |||
|
264 | # 'thread' names are really a misnomer now. | |||
247 | (('--wthread','-wthread'), dict( |
|
265 | (('--wthread','-wthread'), dict( | |
248 | action='store_true', dest='Global.wthread', default=NoConfigDefault, |
|
266 | action='store_true', dest='Global.wthread', default=NoConfigDefault, | |
249 |
help="Enable wxPython event loop integration |
|
267 | help="Enable wxPython event loop integration "+ | |
|
268 | "(DEPRECATED, use --gui wx)") | |||
250 | ), |
|
269 | ), | |
251 | (('--q4thread','--qthread','-q4thread','-qthread'), dict( |
|
270 | (('--q4thread','--qthread','-q4thread','-qthread'), dict( | |
252 | action='store_true', dest='Global.q4thread', default=NoConfigDefault, |
|
271 | action='store_true', dest='Global.q4thread', default=NoConfigDefault, | |
253 |
help="Enable Qt4 event loop integration. Qt3 is no longer supported." |
|
272 | help="Enable Qt4 event loop integration. Qt3 is no longer supported. "+ | |
|
273 | "(DEPRECATED, use --gui qt)") | |||
254 | ), |
|
274 | ), | |
255 | (('--gthread','-gthread'), dict( |
|
275 | (('--gthread','-gthread'), dict( | |
256 | action='store_true', dest='Global.gthread', default=NoConfigDefault, |
|
276 | action='store_true', dest='Global.gthread', default=NoConfigDefault, | |
257 |
help="Enable GTK event loop integration." |
|
277 | help="Enable GTK event loop integration. "+ | |
|
278 | "(DEPRECATED, use --gui gtk)") | |||
258 | ), |
|
279 | ), | |
259 | (('--pylab',), dict( |
|
|||
260 | action='store_true', dest='Global.pylab', default=NoConfigDefault, |
|
|||
261 | help="Pre-load matplotlib and numpy for interactive use.") |
|
|||
262 | ) |
|
|||
263 | ) |
|
280 | ) | |
264 |
|
281 | |||
265 |
|
282 | |||
@@ -298,6 +315,7 b' class IPythonApp(Application):' | |||||
298 | super(IPythonApp, self).create_default_config() |
|
315 | super(IPythonApp, self).create_default_config() | |
299 | # Eliminate multiple lookups |
|
316 | # Eliminate multiple lookups | |
300 | Global = self.default_config.Global |
|
317 | Global = self.default_config.Global | |
|
318 | ||||
301 | # Set all default values |
|
319 | # Set all default values | |
302 | Global.display_banner = True |
|
320 | Global.display_banner = True | |
303 |
|
321 | |||
@@ -312,13 +330,18 b' class IPythonApp(Application):' | |||||
312 | Global.interact = True |
|
330 | Global.interact = True | |
313 |
|
331 | |||
314 | # No GUI integration by default |
|
332 | # No GUI integration by default | |
315 |
Global. |
|
333 | Global.gui = False | |
316 | Global.q4thread = False |
|
|||
317 | Global.gthread = False |
|
|||
318 |
|
||||
319 | # Pylab off by default |
|
334 | # Pylab off by default | |
320 | Global.pylab = False |
|
335 | Global.pylab = False | |
321 |
|
336 | |||
|
337 | # Deprecated versions of gui support that used threading, we support | |||
|
338 | # them just for bacwards compatibility as an alternate spelling for | |||
|
339 | # '--gui X' | |||
|
340 | Global.qthread = False | |||
|
341 | Global.q4thread = False | |||
|
342 | Global.wthread = False | |||
|
343 | Global.gthread = False | |||
|
344 | ||||
322 | def create_command_line_config(self): |
|
345 | def create_command_line_config(self): | |
323 | """Create and return a command line config loader.""" |
|
346 | """Create and return a command line config loader.""" | |
324 | return IPythonAppCLConfigLoader( |
|
347 | return IPythonAppCLConfigLoader( | |
@@ -415,32 +438,41 b' class IPythonApp(Application):' | |||||
415 | Global = self.master_config.Global |
|
438 | Global = self.master_config.Global | |
416 |
|
439 | |||
417 | # Select which gui to use |
|
440 | # Select which gui to use | |
418 |
if Global. |
|
441 | if Global.gui: | |
|
442 | gui = Global.gui | |||
|
443 | # The following are deprecated, but there's likely to be a lot of use | |||
|
444 | # of this form out there, so we might as well support it for now. But | |||
|
445 | # the --gui option above takes precedence. | |||
|
446 | elif Global.wthread: | |||
419 | gui = inputhook.GUI_WX |
|
447 | gui = inputhook.GUI_WX | |
420 |
elif Global.q |
|
448 | elif Global.qthread: | |
421 | gui = inputhook.GUI_QT |
|
449 | gui = inputhook.GUI_QT | |
422 | elif Global.gthread: |
|
450 | elif Global.gthread: | |
423 | gui = inputhook.GUI_GTK |
|
451 | gui = inputhook.GUI_GTK | |
424 | else: |
|
452 | else: | |
425 | gui = None |
|
453 | gui = None | |
426 |
|
454 | |||
|
455 | # Using --pylab will also require gui activation, though which toolkit | |||
|
456 | # to use may be chosen automatically based on mpl configuration. | |||
427 | if Global.pylab: |
|
457 | if Global.pylab: | |
428 | activate = self.shell.enable_pylab |
|
458 | activate = self.shell.enable_pylab | |
|
459 | if Global.pylab == 'auto': | |||
|
460 | gui = None | |||
|
461 | else: | |||
|
462 | gui = Global.pylab | |||
429 | else: |
|
463 | else: | |
430 | # Enable only GUI integration, no pylab |
|
464 | # Enable only GUI integration, no pylab | |
431 | activate = inputhook.enable_gui |
|
465 | activate = inputhook.enable_gui | |
432 |
|
466 | |||
433 | if gui or Global.pylab: |
|
467 | if gui or Global.pylab: | |
434 | try: |
|
468 | try: | |
435 |
|
|
469 | self.log.info("Enabling GUI event loop integration, " | |
436 | % (gui, Global.pylab) |
|
470 | "toolkit=%s, pylab=%s" % (gui, Global.pylab) ) | |
437 | self.log.info(m) |
|
|||
438 | activate(gui) |
|
471 | activate(gui) | |
439 | except: |
|
472 | except: | |
440 | self.log.warn("Error in enabling GUI event loop integration:") |
|
473 | self.log.warn("Error in enabling GUI event loop integration:") | |
441 | self.shell.showtraceback() |
|
474 | self.shell.showtraceback() | |
442 |
|
475 | |||
443 |
|
||||
444 | def _load_extensions(self): |
|
476 | def _load_extensions(self): | |
445 | """Load all IPython extensions in Global.extensions. |
|
477 | """Load all IPython extensions in Global.extensions. | |
446 |
|
478 |
@@ -827,7 +827,7 b' class InteractiveShell(Component, Magic):' | |||||
827 | # An auxiliary namespace that checks what parts of the user_ns were |
|
827 | # An auxiliary namespace that checks what parts of the user_ns were | |
828 | # loaded at startup, so we can list later only variables defined in |
|
828 | # loaded at startup, so we can list later only variables defined in | |
829 | # actual interactive use. Since it is always a subset of user_ns, it |
|
829 | # actual interactive use. Since it is always a subset of user_ns, it | |
830 |
# doesn't need to be se |
|
830 | # doesn't need to be separately tracked in the ns_table. | |
831 | self.user_config_ns = {} |
|
831 | self.user_config_ns = {} | |
832 |
|
832 | |||
833 | # A namespace to keep track of internal data structures to prevent |
|
833 | # A namespace to keep track of internal data structures to prevent | |
@@ -2451,13 +2451,36 b' class InteractiveShell(Component, Magic):' | |||||
2451 | #------------------------------------------------------------------------- |
|
2451 | #------------------------------------------------------------------------- | |
2452 |
|
2452 | |||
2453 | def enable_pylab(self, gui=None): |
|
2453 | def enable_pylab(self, gui=None): | |
|
2454 | """Activate pylab support at runtime. | |||
|
2455 | ||||
|
2456 | This turns on support for matplotlib, preloads into the interactive | |||
|
2457 | namespace all of numpy and pylab, and configures IPython to correcdtly | |||
|
2458 | interact with the GUI event loop. The GUI backend to be used can be | |||
|
2459 | optionally selected with the optional :param:`gui` argument. | |||
|
2460 | ||||
|
2461 | Parameters | |||
|
2462 | ---------- | |||
|
2463 | gui : optional, string | |||
|
2464 | ||||
|
2465 | If given, dictates the choice of matplotlib GUI backend to use | |||
|
2466 | (should be one of IPython's supported backends, 'tk', 'qt', 'wx' or | |||
|
2467 | 'gtk'), otherwise we use the default chosen by matplotlib (as | |||
|
2468 | dictated by the matplotlib build-time options plus the user's | |||
|
2469 | matplotlibrc configuration file). | |||
2454 |
|
|
2470 | """ | |
2455 | """ |
|
2471 | # We want to prevent the loading of pylab to pollute the user's | |
2456 | gui = pylab_activate(self.user_ns, gui) |
|
2472 | # namespace as shown by the %who* magics, so we execute the activation | |
|
2473 | # code in an empty namespace, and we update *both* user_ns and | |||
|
2474 | # user_config_ns with this information. | |||
|
2475 | ns = {} | |||
|
2476 | gui = pylab_activate(ns, gui) | |||
|
2477 | self.user_ns.update(ns) | |||
|
2478 | self.user_config_ns.update(ns) | |||
|
2479 | # Now we must activate the gui pylab wants to use, and fix %run to take | |||
|
2480 | # plot updates into account | |||
2457 | enable_gui(gui) |
|
2481 | enable_gui(gui) | |
2458 | self.magic_run = self._pylab_magic_run |
|
2482 | self.magic_run = self._pylab_magic_run | |
2459 |
|
2483 | |||
2460 |
|
||||
2461 | #------------------------------------------------------------------------- |
|
2484 | #------------------------------------------------------------------------- | |
2462 | # Things related to IPython exiting |
|
2485 | # Things related to IPython exiting | |
2463 | #------------------------------------------------------------------------- |
|
2486 | #------------------------------------------------------------------------- |
@@ -845,16 +845,11 b' class AutoHandler(PrefilterHandler):' | |||||
845 | pre = line_info.pre |
|
845 | pre = line_info.pre | |
846 | continue_prompt = line_info.continue_prompt |
|
846 | continue_prompt = line_info.continue_prompt | |
847 | obj = line_info.ofind(self)['obj'] |
|
847 | obj = line_info.ofind(self)['obj'] | |
848 |
|
||||
849 | #print 'pre <%s> ifun <%s> rest <%s>' % (pre,ifun,the_rest) # dbg |
|
848 | #print 'pre <%s> ifun <%s> rest <%s>' % (pre,ifun,the_rest) # dbg | |
850 |
|
849 | |||
851 | # This should only be active for single-line input! |
|
850 | # This should only be active for single-line input! | |
852 | if continue_prompt: |
|
851 | if continue_prompt: | |
853 | # XXX - Ugly hack! We are breaking on multiline input and I'm out |
|
|||
854 | # of time tonight to disentangle the component hirerarchy issue |
|
|||
855 | # here... Fix this more cleanly later. |
|
|||
856 | self.shell.log(line,line,continue_prompt) |
|
852 | self.shell.log(line,line,continue_prompt) | |
857 |
|
||||
858 | return line |
|
853 | return line | |
859 |
|
854 | |||
860 | force_auto = isinstance(obj, IPyAutocall) |
|
855 | force_auto = isinstance(obj, IPyAutocall) |
General Comments 0
You need to be logged in to leave comments.
Login now