'configure IPython
%config Class[.trait=value]
This magic exposes most of the IPython config system. Any
Configurable class should be able to be configured with the simple
line::
%config Class.trait=value
Where `value` will be resolved in the user\'s namespace, if it is an
expression or variable name.
Examples
To see what classes are available for config, pass no arguments::
In [1]: %config
Available objects for config:
TerminalInteractiveShell
HistoryManager
PrefilterManager
AliasManager
IPCompleter
DisplayFormatter
To view what is configurable on a given class, just pass the class
name::
In [2]: %config IPCompleter
IPCompleter options
IPCompleter.omit__names=<Enum>
Current: 2
Choices: (0, 1, 2)
Instruct the completer to omit private method names
Specifically, when completing on ``object.<tab>``.
When 2 [default]: all names that start with \'_\' will be excluded.
When 1: all \'magic\' names (``__foo__``) will be excluded.
When 0: nothing will be excluded.
IPCompleter.merge_completions=<CBool>
Current: True
Whether to merge completion results into a single list
If False, only the completion results from the first non-empty
completer will be returned.
IPCompleter.limit_to__all__=<CBool>
Current: False
Instruct the completer to use __all__ for the completion
Specifically, when completing on ``object.<tab>``.
When True: only those names in obj.__all__ will be included.
When False [default]: the __all__ attribute is ignored
IPCompleter.greedy=<CBool>
Current: False
Activate greedy completion
This will enable completion on elements of lists, results of
function calls, etc., but can be unsafe because the code is
actually evaluated on TAB.
but the real use is in setting values::
In [3]: %config IPCompleter.greedy = True
and these values are read from the user_ns if they are variables::
In [4]: feeling_greedy=False
In [5]: %config IPCompleter.greedy = feeling_greedy'

@line_magic
def config(self, s):

    from traitlets.config.loader import Config
    configurables = sorted(set([c for c in self.shell.configurables if c.__class__.class_traits(config=True)]), key=(lambda x: x.__class__.__name__))
    classnames = [c.__class__.__name__ for c in configurables]
    line = s.strip()
    if (not line):
        print 'Available    objects    for    config:'
        for name in classnames:
            print ('                ', name)
        return
    elif (line in classnames):
        c = configurables[classnames.index(line)]
        cls = c.__class__
        help = cls.class_get_help(c)
        help = re.sub(re.compile('^--', re.MULTILINE), '', help)
        print help
        return
    elif reg.match(line):
        (cls, attr) = line.split('.')
        return getattr(configurables[classnames.index(cls)], attr)
    elif ('=' not in line):
        msg = 'Invalid    config    statement:    %r,    should    be    `Class.trait    =    value`.'
        ll = line.lower()
        for classname in classnames:
            if (ll == classname.lower()):
                msg = (msg + ('\nDid    you    mean    %s    (note    the    case)?' % classname))
                break
        raise UsageError((msg % line))
    cfg = Config()
    exec ('cfg.' + line) in locals(), self.shell.user_ns
    for configurable in configurables:
        try:
            configurable.update_config(cfg)
        except Exception as e:
            error(e)
