aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/prompt-toolkit/py2/prompt_toolkit/key_binding/bindings/utils.py
blob: b3fa299d7c7b54fb84bae61d14535e51b1814a61 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from __future__ import unicode_literals
from prompt_toolkit.filters import CLIFilter, Always

__all__ = (
    'create_handle_decorator',
)

def create_handle_decorator(registry, filter=Always()):
    """
    Create a key handle decorator, which is compatible with `Registry.handle`, 
    but will chain the given filter to every key binding. 

    :param filter: `CLIFilter` 
    """
    assert isinstance(filter, CLIFilter)

    def handle(*keys, **kw):
        # Chain the given filter to the filter of this specific binding.
        if 'filter' in kw:
            kw['filter'] = kw['filter'] & filter
        else:
            kw['filter'] = filter

        return registry.add_binding(*keys, **kw) 
    return handle