Example #1
0
def load_key_bindings(get_search_state=None,
                      enable_abort_and_exit_bindings=False,
                      enable_system_bindings=False,
                      enable_search=False,
                      enable_open_in_editor=False,
                      enable_extra_page_navigation=False,
                      enable_auto_suggest_bindings=False):
    """
    Create a Registry object that contains the default key bindings.

    :param enable_abort_and_exit_bindings: Filter to enable Ctrl-C and Ctrl-D.
    :param enable_system_bindings: Filter to enable the system bindings (meta-!
            prompt and Control-Z suspension.)
    :param enable_search: Filter to enable the search bindings.
    :param enable_open_in_editor: Filter to enable open-in-editor.
    :param enable_open_in_editor: Filter to enable open-in-editor.
    :param enable_extra_page_navigation: Filter for enabling extra page
        navigation. (Bindings for up/down scrolling through long pages, like in
        Emacs or Vi.)
    :param enable_auto_suggest_bindings: Filter to enable fish-style suggestions.
    """

    assert get_search_state is None or callable(get_search_state)

    # Accept both Filters and booleans as input.
    enable_abort_and_exit_bindings = to_cli_filter(
        enable_abort_and_exit_bindings)
    enable_system_bindings = to_cli_filter(enable_system_bindings)
    enable_search = to_cli_filter(enable_search)
    enable_open_in_editor = to_cli_filter(enable_open_in_editor)
    enable_extra_page_navigation = to_cli_filter(enable_extra_page_navigation)
    enable_auto_suggest_bindings = to_cli_filter(enable_auto_suggest_bindings)

    registry = MergedRegistry([
        # Load basic bindings.
        load_basic_bindings(),
        load_mouse_bindings(),
        ConditionalRegistry(load_abort_and_exit_bindings(),
                            enable_abort_and_exit_bindings),
        ConditionalRegistry(load_basic_system_bindings(),
                            enable_system_bindings),

        # Load emacs bindings.
        load_emacs_bindings(),
        ConditionalRegistry(load_emacs_open_in_editor_bindings(),
                            enable_open_in_editor),
        ConditionalRegistry(
            load_emacs_search_bindings(get_search_state=get_search_state),
            enable_search),
        ConditionalRegistry(load_emacs_system_bindings(),
                            enable_system_bindings),
        ConditionalRegistry(load_extra_emacs_page_navigation_bindings(),
                            enable_extra_page_navigation),

        # Load Vi bindings.
        load_vi_bindings(get_search_state=get_search_state),
        ConditionalRegistry(load_vi_open_in_editor_bindings(),
                            enable_open_in_editor),
        ConditionalRegistry(
            load_vi_search_bindings(get_search_state=get_search_state),
            enable_search),
        ConditionalRegistry(load_vi_system_bindings(), enable_system_bindings),
        ConditionalRegistry(load_extra_vi_page_navigation_bindings(),
                            enable_extra_page_navigation),

        # Suggestion bindings.
        # (This has to come at the end, because the Vi bindings also have an
        # implementation for the "right arrow", but we really want the
        # suggestion binding when a suggestion is available.)
        ConditionalRegistry(load_auto_suggestion_bindings(),
                            enable_auto_suggest_bindings),
    ])

    return registry
Example #2
0
    def __init__(self, registry=None,
                 enable_vi_mode=None,  # (`enable_vi_mode` is deprecated.)
                 get_search_state=None,
                 enable_abort_and_exit_bindings=False,
                 enable_system_bindings=False, enable_search=False,
                 enable_open_in_editor=False, enable_extra_page_navigation=False,
                 enable_auto_suggest_bindings=False,
                 enable_all=True):

        assert registry is None or isinstance(registry, Registry)
        assert get_search_state is None or callable(get_search_state)

        # Create registry.
        self.registry = registry or Registry()

        # Accept both Filters and booleans as input.
        enable_abort_and_exit_bindings = to_cli_filter(enable_abort_and_exit_bindings)
        enable_system_bindings = to_cli_filter(enable_system_bindings)
        enable_search = to_cli_filter(enable_search)
        enable_open_in_editor = to_cli_filter(enable_open_in_editor)
        enable_extra_page_navigation = to_cli_filter(enable_extra_page_navigation)
        enable_auto_suggest_bindings = to_cli_filter(enable_auto_suggest_bindings)
        enable_all = to_cli_filter(enable_all)

        # Load basic bindings.
        load_basic_bindings(self.registry, enable_all)
        load_mouse_bindings(self.registry, enable_all)

        load_abort_and_exit_bindings(
            self.registry, enable_abort_and_exit_bindings & enable_all)

        load_basic_system_bindings(self.registry,
            enable_system_bindings & enable_all)

        # Load emacs bindings.
        load_emacs_bindings(self.registry, enable_all)

        load_emacs_open_in_editor_bindings(
            self.registry, enable_open_in_editor & enable_all)

        load_emacs_search_bindings(
            self.registry,
            filter=enable_search & enable_all,
            get_search_state=get_search_state)

        load_emacs_system_bindings(
            self.registry, enable_system_bindings & enable_all)

        load_extra_emacs_page_navigation_bindings(
            self.registry,
            enable_extra_page_navigation & enable_all)

        # Load Vi bindings.
        load_vi_bindings(
            self.registry, enable_visual_key=~enable_open_in_editor,
            filter=enable_all,
            get_search_state=get_search_state)

        load_vi_open_in_editor_bindings(
            self.registry,
            enable_open_in_editor & enable_all)

        load_vi_search_bindings(
            self.registry,
            filter=enable_search & enable_all,
            get_search_state=get_search_state)

        load_vi_system_bindings(
            self.registry,
            enable_system_bindings & enable_all)

        load_extra_vi_page_navigation_bindings(
            self.registry,
            enable_extra_page_navigation & enable_all)

        # Suggestion bindings.
        # (This has to come at the end, because the Vi bindings also have an
        # implementation for the "right arrow", but we really want the
        # suggestion binding when a suggestion is available.)
        load_auto_suggestion_bindings(
            self.registry,
            enable_auto_suggest_bindings & enable_all)
    def __init__(self,
                 registry=None,
                 enable_vi_mode=False,
                 get_vi_state=None,
                 get_search_state=None,
                 enable_abort_and_exit_bindings=False,
                 enable_system_bindings=False,
                 enable_search=False,
                 enable_open_in_editor=False,
                 enable_extra_page_navigation=False,
                 enable_auto_suggest_bindings=False,
                 enable_all=True):

        assert registry is None or isinstance(registry, Registry)
        assert get_vi_state is None or callable(get_vi_state)
        assert get_search_state is None or callable(get_search_state)

        # Create registry.
        self.registry = registry or Registry()

        # Vi state. (Object to keep track of in which Vi mode we are.)
        if get_vi_state is None:
            vi_state = ViState(
            )  # Stateful. Should be defined outside the function below.

            def get_vi_state(cli):
                return vi_state

        self.get_vi_state = get_vi_state

        # Accept both Filters and booleans as input.
        enable_vi_mode = to_cli_filter(enable_vi_mode)
        enable_abort_and_exit_bindings = to_cli_filter(
            enable_abort_and_exit_bindings)
        enable_system_bindings = to_cli_filter(enable_system_bindings)
        enable_search = to_cli_filter(enable_search)
        enable_open_in_editor = to_cli_filter(enable_open_in_editor)
        enable_extra_page_navigation = to_cli_filter(
            enable_extra_page_navigation)
        enable_auto_suggest_bindings = to_cli_filter(
            enable_auto_suggest_bindings)
        enable_all = to_cli_filter(enable_all)

        # Emacs mode filter is the opposite of Vi mode.
        enable_emacs_mode = ~enable_vi_mode

        # Load basic bindings.
        load_basic_bindings(self.registry, enable_all)

        load_abort_and_exit_bindings(
            self.registry, enable_abort_and_exit_bindings & enable_all)

        load_basic_system_bindings(self.registry,
                                   enable_system_bindings & enable_all)

        # Load emacs bindings.
        load_emacs_bindings(self.registry, enable_emacs_mode & enable_all)

        load_emacs_open_in_editor_bindings(
            self.registry,
            enable_emacs_mode & enable_open_in_editor & enable_all)

        load_emacs_search_bindings(self.registry,
                                   filter=enable_emacs_mode & enable_search
                                   & enable_all,
                                   get_search_state=get_search_state)

        load_emacs_system_bindings(
            self.registry,
            enable_emacs_mode & enable_system_bindings & enable_all)

        load_extra_emacs_page_navigation_bindings(
            self.registry,
            enable_emacs_mode & enable_extra_page_navigation & enable_all)

        # Load Vi bindings.
        load_vi_bindings(self.registry,
                         self.get_vi_state,
                         enable_visual_key=~enable_open_in_editor,
                         filter=enable_vi_mode & enable_all,
                         get_search_state=get_search_state)

        load_vi_open_in_editor_bindings(
            self.registry, self.get_vi_state,
            enable_vi_mode & enable_open_in_editor & enable_all)

        load_vi_search_bindings(self.registry,
                                self.get_vi_state,
                                filter=enable_vi_mode & enable_search
                                & enable_all,
                                get_search_state=get_search_state)

        load_vi_system_bindings(
            self.registry, self.get_vi_state,
            enable_vi_mode & enable_system_bindings & enable_all)

        load_extra_vi_page_navigation_bindings(
            self.registry,
            enable_vi_mode & enable_extra_page_navigation & enable_all)

        # Suggestion bindings.
        # (This has to come at the end, because the Vi bindings also have an
        # implementation for the "right arrow", but we really want the
        # suggestion binding when a suggestion is available.)
        load_auto_suggestion_bindings(
            self.registry, enable_auto_suggest_bindings & enable_all)
Example #4
0
    def __init__(self, registry=None, enable_vi_mode=False, get_vi_state=None,
                 get_search_state=None,
                 enable_abort_and_exit_bindings=False,
                 enable_system_bindings=False, enable_search=False,
                 enable_open_in_editor=False, enable_extra_page_navigation=False,
                 enable_auto_suggest_bindings=False,
                 enable_all=True):

        assert registry is None or isinstance(registry, Registry)
        assert get_vi_state is None or callable(get_vi_state)
        assert get_search_state is None or callable(get_search_state)

        # Create registry.
        self.registry = registry or Registry()

        # Vi state. (Object to keep track of in which Vi mode we are.)
        if get_vi_state is None:
            vi_state = ViState()  # Stateful. Should be defined outside the function below.

            def get_vi_state(cli):
                return vi_state

        self.get_vi_state = get_vi_state

        # Accept both Filters and booleans as input.
        enable_vi_mode = to_cli_filter(enable_vi_mode)
        enable_abort_and_exit_bindings = to_cli_filter(enable_abort_and_exit_bindings)
        enable_system_bindings = to_cli_filter(enable_system_bindings)
        enable_search = to_cli_filter(enable_search)
        enable_open_in_editor = to_cli_filter(enable_open_in_editor)
        enable_extra_page_navigation = to_cli_filter(enable_extra_page_navigation)
        enable_auto_suggest_bindings = to_cli_filter(enable_auto_suggest_bindings)
        enable_all = to_cli_filter(enable_all)

        # Emacs mode filter is the opposite of Vi mode.
        enable_emacs_mode = ~enable_vi_mode

        # Load basic bindings.
        load_basic_bindings(self.registry, enable_all)

        load_abort_and_exit_bindings(
            self.registry, enable_abort_and_exit_bindings & enable_all)

        load_basic_system_bindings(self.registry,
            enable_system_bindings & enable_all)

        # Load emacs bindings.
        load_emacs_bindings(self.registry, enable_emacs_mode & enable_all)

        load_emacs_open_in_editor_bindings(
            self.registry, enable_emacs_mode & enable_open_in_editor & enable_all)

        load_emacs_search_bindings(
            self.registry,
            filter=enable_emacs_mode & enable_search & enable_all,
            get_search_state=get_search_state)

        load_emacs_system_bindings(
            self.registry, enable_emacs_mode & enable_system_bindings & enable_all)

        load_extra_emacs_page_navigation_bindings(
            self.registry,
            enable_emacs_mode & enable_extra_page_navigation & enable_all)

        # Load Vi bindings.
        load_vi_bindings(
            self.registry, self.get_vi_state, enable_visual_key=~enable_open_in_editor,
            filter=enable_vi_mode & enable_all,
            get_search_state=get_search_state)

        load_vi_open_in_editor_bindings(
            self.registry, self.get_vi_state,
            enable_vi_mode & enable_open_in_editor & enable_all)

        load_vi_search_bindings(
            self.registry, self.get_vi_state,
            filter=enable_vi_mode & enable_search & enable_all,
            get_search_state=get_search_state)

        load_vi_system_bindings(
            self.registry, self.get_vi_state,
            enable_vi_mode & enable_system_bindings & enable_all)

        load_extra_vi_page_navigation_bindings(
            self.registry,
            enable_vi_mode & enable_extra_page_navigation & enable_all)

        # Suggestion bindings.
        # (This has to come at the end, because the Vi bindings also have an
        # implementation for the "right arrow", but we really want the
        # suggestion binding when a suggestion is available.)
        load_auto_suggestion_bindings(
            self.registry,
            enable_auto_suggest_bindings & enable_all)
def load_key_bindings(
        get_search_state=None,
        enable_abort_and_exit_bindings=False,
        enable_system_bindings=False,
        enable_search=False,
        enable_open_in_editor=False,
        enable_extra_page_navigation=False,
        enable_auto_suggest_bindings=False):
    """
    Create a Registry object that contains the default key bindings.

    :param enable_abort_and_exit_bindings: Filter to enable Ctrl-C and Ctrl-D.
    :param enable_system_bindings: Filter to enable the system bindings (meta-!
            prompt and Control-Z suspension.)
    :param enable_search: Filter to enable the search bindings.
    :param enable_open_in_editor: Filter to enable open-in-editor.
    :param enable_open_in_editor: Filter to enable open-in-editor.
    :param enable_extra_page_navigation: Filter for enabling extra page
        navigation. (Bindings for up/down scrolling through long pages, like in
        Emacs or Vi.)
    :param enable_auto_suggest_bindings: Filter to enable fish-style suggestions.
    """

    assert get_search_state is None or callable(get_search_state)

    # Accept both Filters and booleans as input.
    enable_abort_and_exit_bindings = to_cli_filter(enable_abort_and_exit_bindings)
    enable_system_bindings = to_cli_filter(enable_system_bindings)
    enable_search = to_cli_filter(enable_search)
    enable_open_in_editor = to_cli_filter(enable_open_in_editor)
    enable_extra_page_navigation = to_cli_filter(enable_extra_page_navigation)
    enable_auto_suggest_bindings = to_cli_filter(enable_auto_suggest_bindings)

    registry = MergedRegistry([
        # Load basic bindings.
        load_basic_bindings(),
        load_mouse_bindings(),

        ConditionalRegistry(load_abort_and_exit_bindings(),
                            enable_abort_and_exit_bindings),

        ConditionalRegistry(load_basic_system_bindings(),
                            enable_system_bindings),

        # Load emacs bindings.
        load_emacs_bindings(),

        ConditionalRegistry(load_emacs_open_in_editor_bindings(),
                            enable_open_in_editor),

        ConditionalRegistry(load_emacs_search_bindings(get_search_state=get_search_state),
                            enable_search),

        ConditionalRegistry(load_emacs_system_bindings(),
                            enable_system_bindings),

        ConditionalRegistry(load_extra_emacs_page_navigation_bindings(),
                            enable_extra_page_navigation),

        # Load Vi bindings.
        load_vi_bindings(get_search_state=get_search_state),

        ConditionalRegistry(load_vi_open_in_editor_bindings(),
                            enable_open_in_editor),

        ConditionalRegistry(load_vi_search_bindings(get_search_state=get_search_state),
                            enable_search),

        ConditionalRegistry(load_vi_system_bindings(),
                            enable_system_bindings),

        ConditionalRegistry(load_extra_vi_page_navigation_bindings(),
                            enable_extra_page_navigation),

        # Suggestion bindings.
        # (This has to come at the end, because the Vi bindings also have an
        # implementation for the "right arrow", but we really want the
        # suggestion binding when a suggestion is available.)
        ConditionalRegistry(load_auto_suggestion_bindings(),
                            enable_auto_suggest_bindings),
    ])

    return registry
Example #6
0
    def __init__(self, registry=None,
                 enable_vi_mode=None,  # (`enable_vi_mode` is deprecated.)
                 get_search_state=None,
                 enable_abort_and_exit_bindings=False,
                 enable_system_bindings=False, enable_search=False,
                 enable_open_in_editor=False, enable_extra_page_navigation=False,
                 enable_auto_suggest_bindings=False,
                 enable_all=True):

        assert registry is None or isinstance(registry, Registry)
        assert get_search_state is None or callable(get_search_state)

        # Emacs/Vi mode.
        if enable_vi_mode is None:
            enable_vi_mode = InEditingMode(EditingMode.VI)
            enable_emacs_mode = InEditingMode(EditingMode.EMACS)
        else:
            # When `enable_vi_mode` is given, use this to determine whether Vi
            # or Emacs bindings are active, rather than using
            # CommandLineInterface.editing_mode.
            enable_vi_mode = to_cli_filter(enable_vi_mode)
            enable_emacs_mode = ~enable_vi_mode

        # Create registry.
        self.registry = registry or Registry()

        # Accept both Filters and booleans as input.
        enable_abort_and_exit_bindings = to_cli_filter(enable_abort_and_exit_bindings)
        enable_system_bindings = to_cli_filter(enable_system_bindings)
        enable_search = to_cli_filter(enable_search)
        enable_open_in_editor = to_cli_filter(enable_open_in_editor)
        enable_extra_page_navigation = to_cli_filter(enable_extra_page_navigation)
        enable_auto_suggest_bindings = to_cli_filter(enable_auto_suggest_bindings)
        enable_all = to_cli_filter(enable_all)

        # Load basic bindings.
        load_basic_bindings(self.registry, enable_all)

        load_abort_and_exit_bindings(
            self.registry, enable_abort_and_exit_bindings & enable_all)

        load_basic_system_bindings(self.registry,
            enable_system_bindings & enable_all)

        # Load emacs bindings.
        load_emacs_bindings(self.registry, enable_emacs_mode & enable_all)

        load_emacs_open_in_editor_bindings(
            self.registry, enable_emacs_mode & enable_open_in_editor & enable_all)

        load_emacs_search_bindings(
            self.registry,
            filter=enable_emacs_mode & enable_search & enable_all,
            get_search_state=get_search_state)

        load_emacs_system_bindings(
            self.registry, enable_emacs_mode & enable_system_bindings & enable_all)

        load_extra_emacs_page_navigation_bindings(
            self.registry,
            enable_emacs_mode & enable_extra_page_navigation & enable_all)

        # Load Vi bindings.
        load_vi_bindings(
            self.registry, enable_visual_key=~enable_open_in_editor,
            filter=enable_vi_mode & enable_all,
            get_search_state=get_search_state)

        load_vi_open_in_editor_bindings(
            self.registry,
            enable_vi_mode & enable_open_in_editor & enable_all)

        load_vi_search_bindings(
            self.registry,
            filter=enable_vi_mode & enable_search & enable_all,
            get_search_state=get_search_state)

        load_vi_system_bindings(
            self.registry,
            enable_vi_mode & enable_system_bindings & enable_all)

        load_extra_vi_page_navigation_bindings(
            self.registry,
            enable_vi_mode & enable_extra_page_navigation & enable_all)

        # Suggestion bindings.
        # (This has to come at the end, because the Vi bindings also have an
        # implementation for the "right arrow", but we really want the
        # suggestion binding when a suggestion is available.)
        load_auto_suggestion_bindings(
            self.registry,
            enable_auto_suggest_bindings & enable_all)
Example #7
0
    def __init__(
            self,
            registry=None,
            enable_vi_mode=None,  # (`enable_vi_mode` is deprecated.)
            get_search_state=None,
            enable_abort_and_exit_bindings=False,
            enable_system_bindings=False,
            enable_search=False,
            enable_open_in_editor=False,
            enable_extra_page_navigation=False,
            enable_auto_suggest_bindings=False,
            enable_all=True):

        assert registry is None or isinstance(registry, Registry)
        assert get_search_state is None or callable(get_search_state)

        # Create registry.
        self.registry = registry or Registry()

        # Accept both Filters and booleans as input.
        enable_abort_and_exit_bindings = to_cli_filter(
            enable_abort_and_exit_bindings)
        enable_system_bindings = to_cli_filter(enable_system_bindings)
        enable_search = to_cli_filter(enable_search)
        enable_open_in_editor = to_cli_filter(enable_open_in_editor)
        enable_extra_page_navigation = to_cli_filter(
            enable_extra_page_navigation)
        enable_auto_suggest_bindings = to_cli_filter(
            enable_auto_suggest_bindings)
        enable_all = to_cli_filter(enable_all)

        # Load basic bindings.
        load_basic_bindings(self.registry, enable_all)
        load_mouse_bindings(self.registry, enable_all)

        load_abort_and_exit_bindings(
            self.registry, enable_abort_and_exit_bindings & enable_all)

        load_basic_system_bindings(self.registry,
                                   enable_system_bindings & enable_all)

        # Load emacs bindings.
        load_emacs_bindings(self.registry, enable_all)

        load_emacs_open_in_editor_bindings(self.registry,
                                           enable_open_in_editor & enable_all)

        load_emacs_search_bindings(self.registry,
                                   filter=enable_search & enable_all,
                                   get_search_state=get_search_state)

        load_emacs_system_bindings(self.registry,
                                   enable_system_bindings & enable_all)

        load_extra_emacs_page_navigation_bindings(
            self.registry, enable_extra_page_navigation & enable_all)

        # Load Vi bindings.
        load_vi_bindings(self.registry,
                         enable_visual_key=~enable_open_in_editor,
                         filter=enable_all,
                         get_search_state=get_search_state)

        load_vi_open_in_editor_bindings(self.registry,
                                        enable_open_in_editor & enable_all)

        load_vi_search_bindings(self.registry,
                                filter=enable_search & enable_all,
                                get_search_state=get_search_state)

        load_vi_system_bindings(self.registry,
                                enable_system_bindings & enable_all)

        load_extra_vi_page_navigation_bindings(
            self.registry, enable_extra_page_navigation & enable_all)

        # Suggestion bindings.
        # (This has to come at the end, because the Vi bindings also have an
        # implementation for the "right arrow", but we really want the
        # suggestion binding when a suggestion is available.)
        load_auto_suggestion_bindings(
            self.registry, enable_auto_suggest_bindings & enable_all)