1""" 
    2Default key bindings.:: 
    3 
    4    key_bindings = load_key_bindings() 
    5    app = Application(key_bindings=key_bindings) 
    6""" 
    7 
    8from __future__ import annotations 
    9 
    10from prompt_toolkit.filters import buffer_has_focus 
    11from prompt_toolkit.key_binding.bindings.basic import load_basic_bindings 
    12from prompt_toolkit.key_binding.bindings.cpr import load_cpr_bindings 
    13from prompt_toolkit.key_binding.bindings.emacs import ( 
    14    load_emacs_bindings, 
    15    load_emacs_search_bindings, 
    16    load_emacs_shift_selection_bindings, 
    17) 
    18from prompt_toolkit.key_binding.bindings.mouse import load_mouse_bindings 
    19from prompt_toolkit.key_binding.bindings.vi import ( 
    20    load_vi_bindings, 
    21    load_vi_search_bindings, 
    22) 
    23from prompt_toolkit.key_binding.key_bindings import ( 
    24    ConditionalKeyBindings, 
    25    KeyBindingsBase, 
    26    merge_key_bindings, 
    27) 
    28 
    29__all__ = [ 
    30    "load_key_bindings", 
    31] 
    32 
    33 
    34def load_key_bindings() -> KeyBindingsBase: 
    35    """ 
    36    Create a KeyBindings object that contains the default key bindings. 
    37    """ 
    38    all_bindings = merge_key_bindings( 
    39        [ 
    40            # Load basic bindings. 
    41            load_basic_bindings(), 
    42            # Load emacs bindings. 
    43            load_emacs_bindings(), 
    44            load_emacs_search_bindings(), 
    45            load_emacs_shift_selection_bindings(), 
    46            # Load Vi bindings. 
    47            load_vi_bindings(), 
    48            load_vi_search_bindings(), 
    49        ] 
    50    ) 
    51 
    52    return merge_key_bindings( 
    53        [ 
    54            # Make sure that the above key bindings are only active if the 
    55            # currently focused control is a `BufferControl`. For other controls, we 
    56            # don't want these key bindings to intervene. (This would break "ptterm" 
    57            # for instance, which handles 'Keys.Any' in the user control itself.) 
    58            ConditionalKeyBindings(all_bindings, buffer_has_focus), 
    59            # Active, even when no buffer has been focused. 
    60            load_mouse_bindings(), 
    61            load_cpr_bindings(), 
    62        ] 
    63    )