##// END OF EJS Templates
add %config magic for configuring IPython
MinRK -
Show More
@@ -379,6 +379,7 b' class InteractiveShell(SingletonConfigurable, Magic):'
379 379 # This is where traits with a config_key argument are updated
380 380 # from the values on config.
381 381 super(InteractiveShell, self).__init__(config=config)
382 self.configurables = [self]
382 383
383 384 # These are relatively independent and stateless
384 385 self.init_ipython_dir(ipython_dir)
@@ -602,9 +603,11 b' class InteractiveShell(SingletonConfigurable, Magic):'
602 603
603 604 def init_display_formatter(self):
604 605 self.display_formatter = DisplayFormatter(config=self.config)
606 self.configurables.append(self.display_formatter)
605 607
606 608 def init_display_pub(self):
607 609 self.display_pub = self.display_pub_class(config=self.config)
610 self.configurables.append(self.display_pub)
608 611
609 612 def init_displayhook(self):
610 613 # Initialize displayhook, set in/out prompts and printing system
@@ -620,6 +623,7 b' class InteractiveShell(SingletonConfigurable, Magic):'
620 623 ps_out = self.prompt_out,
621 624 pad_left = self.prompts_pad_left
622 625 )
626 self.configurables.append(self.displayhook)
623 627 # This is a context manager that installs/revmoes the displayhook at
624 628 # the appropriate time.
625 629 self.display_trap = DisplayTrap(hook=self.displayhook)
@@ -1435,6 +1439,7 b' class InteractiveShell(SingletonConfigurable, Magic):'
1435 1439 def init_history(self):
1436 1440 """Sets up the command history, and starts regular autosaves."""
1437 1441 self.history_manager = HistoryManager(shell=self, config=self.config)
1442 self.configurables.append(self.history_manager)
1438 1443
1439 1444 #-------------------------------------------------------------------------
1440 1445 # Things related to exception handling and tracebacks (not debugging)
@@ -1856,6 +1861,7 b' class InteractiveShell(SingletonConfigurable, Magic):'
1856 1861 use_readline=self.has_readline,
1857 1862 config=self.config,
1858 1863 )
1864 self.configurables.append(self.Completer)
1859 1865
1860 1866 # Add custom completers to the basic ones built into IPCompleter
1861 1867 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
@@ -2112,6 +2118,7 b' class InteractiveShell(SingletonConfigurable, Magic):'
2112 2118
2113 2119 def init_alias(self):
2114 2120 self.alias_manager = AliasManager(shell=self, config=self.config)
2121 self.configurables.append(self.alias_manager)
2115 2122 self.ns_table['alias'] = self.alias_manager.alias_table,
2116 2123
2117 2124 #-------------------------------------------------------------------------
@@ -2120,9 +2127,12 b' class InteractiveShell(SingletonConfigurable, Magic):'
2120 2127
2121 2128 def init_extension_manager(self):
2122 2129 self.extension_manager = ExtensionManager(shell=self, config=self.config)
2130 self.configurables.append(self.extension_manager)
2123 2131
2124 2132 def init_plugin_manager(self):
2125 2133 self.plugin_manager = PluginManager(config=self.config)
2134 self.configurables.append(self.plugin_manager)
2135
2126 2136
2127 2137 #-------------------------------------------------------------------------
2128 2138 # Things related to payloads
@@ -2130,6 +2140,7 b' class InteractiveShell(SingletonConfigurable, Magic):'
2130 2140
2131 2141 def init_payload(self):
2132 2142 self.payload_manager = PayloadManager(config=self.config)
2143 self.configurables.append(self.payload_manager)
2133 2144
2134 2145 #-------------------------------------------------------------------------
2135 2146 # Things related to the prefilter
@@ -2137,6 +2148,7 b' class InteractiveShell(SingletonConfigurable, Magic):'
2137 2148
2138 2149 def init_prefilter(self):
2139 2150 self.prefilter_manager = PrefilterManager(shell=self, config=self.config)
2151 self.configurables.append(self.prefilter_manager)
2140 2152 # Ultimately this will be refactored in the new interpreter code, but
2141 2153 # for now, we should expose the main prefilter method (there's legacy
2142 2154 # code out there that may rely on this).
@@ -123,6 +123,8 b' class Magic:'
123 123 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
124 124 'Automagic is ON, % prefix NOT needed for magic functions.']
125 125
126
127 configurables = None
126 128 #......................................................................
127 129 # some utility functions
128 130
@@ -132,6 +134,8 b' class Magic:'
132 134 if profile is None:
133 135 self.magic_prun = self.profile_missing_notice
134 136 self.shell = shell
137 if self.configurables is None:
138 self.configurables = []
135 139
136 140 # namespace for holding state we may need
137 141 self._magic_state = Bunch()
@@ -3607,4 +3611,92 b' Defaulting color scheme to \'NoColor\'"""'
3607 3611 with open(new_fname, 'w') as f:
3608 3612 current.write(nb, f, new_format)
3609 3613
3614 def magic_config(self, s):
3615 """configure IPython
3616
3617 %config Class.trait=value
3618 or
3619 %config Class
3620
3621 This magic exposes most of the IPython config system. Any
3622 Configurable class should be able to be configured with the simple
3623 line:
3624
3625 %config Class.trait=value
3626
3627 Where `value` will be resolved in the user's namespace, if it is an
3628 expression or variable name.
3629
3630 Examples
3631 --------
3632
3633 To see what classes are availabe for config, pass no arguments:
3634 In [1]: %config
3635 Available objects for config:
3636 TerminalInteractiveShell
3637 HistoryManager
3638 PrefilterManager
3639 AliasManager
3640 IPCompleter
3641 DisplayFormatter
3642 DisplayPublisher
3643 DisplayHook
3644 ExtensionManager
3645 PluginManager
3646 PayloadManager
3647
3648 # To view what is configurable on a given class, just pass the class name
3649 In [2]: %config IPCompleter
3650 IPCompleter options
3651 -----------------
3652 IPCompleter.greedy=<CBool>
3653 Current: False
3654 Activate greedy completion
3655 This will enable completion on elements of lists, results of function calls,
3656 etc., but can be unsafe because the code is actually evaluated on TAB.
3657
3658 # but the real use is in setting values:
3659 In [3]: %config IPCompleter.greedy = True
3660
3661 # and these values are read from the user_ns if they are variables:
3662 In [4]: feeling_greedy=False
3663
3664 In [5]: %config IPCompleter.greedy = feeling_greedy
3665
3666 """
3667 from IPython.config.loader import Config
3668 classnames = [ c.__class__.__name__ for c in self.configurables ]
3669 line = s.strip()
3670 if not line:
3671 # print available configurable names
3672 print "Available objects for config:"
3673 for name in classnames:
3674 print " ", name
3675 return
3676 elif line in classnames:
3677 # `%config TerminalInteractiveShell` will print trait info for
3678 # TerminalInteractiveShell
3679 c = self.configurables[classnames.index(line)]
3680 cls = c.__class__
3681 help = cls.class_get_help(c)
3682 # strip leading '--' from cl-args:
3683 help = re.sub(r'^\-\-', '', help, flags=re.MULTILINE)
3684 print help
3685 return
3686 elif '=' not in line:
3687 raise UsageError("Invalid config statement: %r, should be Class.trait = value" % line)
3688
3689
3690 # otherwise, assume we are setting configurables.
3691 # leave quotes on args when splitting, because we want
3692 # unquoted args to eval in user_ns
3693 cfg = Config()
3694 exec "cfg."+line in locals(), self.user_ns
3695
3696 for configurable in self.configurables:
3697 try:
3698 configurable.update_config(cfg)
3699 except Exception as e:
3700 error(e)
3701
3610 3702 # end Magic
@@ -257,6 +257,8 b' def import_pylab(user_ns, backend, import_all=True, shell=None):'
257 257
258 258 cfg = InlineBackendConfig.instance(config=shell.config)
259 259 cfg.shell = shell
260 if cfg not in shell.configurables:
261 shell.configurables.append(cfg)
260 262
261 263 if backend == backends['inline']:
262 264 from IPython.zmq.pylab.backend_inline import flush_figures
General Comments 0
You need to be logged in to leave comments. Login now