Return a new dictionnary of configs updated with given parameters.

    You may use ``on`` and ``names`` arguments to select config or filter out
    some configs from returned dict.

    Arguments:
        configs (dict): Dictionnary of configurations to update.
        parameters (dict): Dictionnary of parameters to apply on selected
            configurations.

    Keyword Arguments:
        on (list): List of configuration names to select for update. If empty,
            all given configurations will be updated.
        names (list): List of configuration names to keep. If not empty, only
            those configurations will be in returned dict. Else every
            configs from original dict will be present.

    Returns:
        dict: Dict of configurations with updated parameters.

def codemirror_settings_update(configs, parameters, on=None, names=None):
    """
    Return a new dictionnary of configs updated with given parameters.

    You may use ``on`` and ``names`` arguments to select config or filter out
    some configs from returned dict.

    Arguments:
        configs (dict): Dictionnary of configurations to update.
        parameters (dict): Dictionnary of parameters to apply on selected
            configurations.

    Keyword Arguments:
        on (list): List of configuration names to select for update. If empty,
            all given configurations will be updated.
        names (list): List of configuration names to keep. If not empty, only
            those configurations will be in returned dict. Else every
            configs from original dict will be present.

    Returns:
        dict: Dict of configurations with updated parameters.
    """
    # Deep copy of given config
    output = copy.deepcopy(configs)

    # Optionnaly filtering config from given names
    if names:
        output = {k: output[k] for k in names}

    # Select every config if selectors is empty
    if not on:
        on = output.keys()

    for k in on:
        output[k].update(parameters)

    return output