コード例 #1
0
ファイル: application.py プロジェクト: bopopescu/facerec-1
    def _CreatePromptApplication(self, config, multiline):
        """Creates a shell prompt Application."""

        return pt_application.Application(
            layout=layout.CreatePromptLayout(
                config=config,
                extra_input_processors=[Context()],
                get_bottom_status_tokens=self._GetBottomStatusTokens,
                get_bottom_toolbar_tokens=self._GetBottomToolbarTokens,
                get_continuation_tokens=None,
                get_prompt_tokens=None,
                is_password=False,
                lexer=None,
                multiline=filters.Condition(lambda cli: multiline()),
                show_help=filters.Condition(
                    lambda _: self.key_bindings.help_key.toggle),
                wrap_lines=True,
            ),
            buffer=self.default_buffer,
            clipboard=None,
            erase_when_done=False,
            get_title=None,
            key_bindings_registry=self.key_bindings.MakeRegistry(),
            mouse_support=False,
            reverse_vi_search_direction=True,
            style=interactive_style.GetDocumentStyle(),
        )
コード例 #2
0
ファイル: __init__.py プロジェクト: virajs/edgedb
    def build_cli(self):
        history = pt_history.FileHistory(
            os.path.expanduser('~/.edgedbhistory'))

        key_binding_manager = pt_keymanager.KeyBindingManager(
            enable_system_bindings=True,
            enable_search=True,
            enable_abort_and_exit_bindings=True)

        @key_binding_manager.registry.add_binding(pt_keys.Keys.F3)
        def _graphql_toggle(event):
            self.graphql = not self.graphql

        @key_binding_manager.registry.add_binding(pt_keys.Keys.Tab)
        def _tab(event):
            b = cli.current_buffer
            before_cursor = b.document.current_line_before_cursor
            if b.text and (not before_cursor or before_cursor.isspace()):
                b.insert_text('    ')

        layout = pt_shortcuts.create_prompt_layout(
            lexer=pt_lexers.PygmentsLexer(eql_pygments.EdgeQLLexer),
            reserve_space_for_menu=4,
            get_prompt_tokens=self.get_prompt_tokens,
            get_continuation_tokens=self.get_continuation_tokens,
            get_bottom_toolbar_tokens=self.get_toolbar_tokens,
            multiline=True)

        buf = InputBuffer(
            history=history,

            # to make reserve_space_for_menu work:
            complete_while_typing=pt_filters.Always(),

            accept_action=pt_app.AcceptAction.RETURN_DOCUMENT)

        app = pt_app.Application(
            style=self.style,
            layout=layout,
            buffer=buf,
            ignore_case=True,
            key_bindings_registry=key_binding_manager.registry,
            on_exit=pt_app.AbortAction.RAISE_EXCEPTION,
            on_abort=pt_app.AbortAction.RETRY)

        cli = pt_interface.CommandLineInterface(
            application=app,
            eventloop=self.eventloop)

        return cli
コード例 #3
0
    def _CreatePromptApplication(self):
        """Creates a shell prompt Application."""

        # Make sure that complete_while_typing is disabled when
        # enable_history_search is enabled. (First convert to SimpleFilter, to
        # avoid doing bitwise operations on bool objects.)
        complete_while_typing = shortcuts.to_simple_filter(True)
        enable_history_search = shortcuts.to_simple_filter(False)
        multiline = shortcuts.to_simple_filter(False)

        complete_while_typing &= ~enable_history_search

        return application.Application(
            layout=layout.CreatePromptLayout(
                message=self.prompt,
                lexer=None,
                is_password=False,
                reserve_space_for_menu=self.MENU_RESERVE_SPACE,
                multiline=filters.Condition(lambda cli: multiline()),
                get_prompt_tokens=None,
                get_continuation_tokens=None,
                get_bottom_toolbar_tokens=self._GetBottomToolbarTokens,
                display_completions_in_columns=False,
                extra_input_processors=None,
                wrap_lines=True,
                show_help=filters.Condition(
                    lambda _: self.key_bindings.help_key.toggle)),
            buffer=pt_buffer.Buffer(
                enable_history_search=enable_history_search,
                complete_while_typing=complete_while_typing,
                is_multiline=multiline,
                history=pt_history.InMemoryHistory(),
                validator=None,
                completer=shell_completer.ShellCliCompleter(),
                auto_suggest=None,
                accept_action=pt_buffer.AcceptAction.RETURN_DOCUMENT,
                initial_document=document.Document(''),
            ),
            style=shell_style.GetDocumentStyle(),
            clipboard=None,
            key_bindings_registry=self.key_bindings.MakeRegistry(),
            get_title=None,
            mouse_support=False,
            erase_when_done=False,
            on_abort=application.AbortAction.RAISE_EXCEPTION,
            on_exit=application.AbortAction.RAISE_EXCEPTION)
コード例 #4
0
def CreatePromptApplication(
        message='',
        multiline=False,
        wrap_lines=True,
        is_password=False,
        complete_while_typing=True,
        enable_history_search=False,
        lexer=None,
        enable_system_bindings=False,
        enable_open_in_editor=False,
        validator=None,
        completer=None,
        reserve_space_for_menu=5,
        auto_suggest=None,
        style=None,
        history=None,
        clipboard=None,
        get_prompt_tokens=None,
        get_continuation_tokens=None,
        get_bottom_toolbar_tokens=None,
        display_completions_in_columns=False,
        get_title=None,
        mouse_support=False,
        extra_input_processors=None,
        key_bindings_registry=None,
        on_abort=application.AbortAction.RAISE_EXCEPTION,
        on_exit=application.AbortAction.RAISE_EXCEPTION,
        accept_action=pt_buffer.AcceptAction.RETURN_DOCUMENT,
        erase_when_done=False,
        default='',
        get_help_tokens=None):
    """Create the shell prompt Application."""
    if key_bindings_registry is None:
        key_bindings_registry = manager.KeyBindingManager.for_prompt(
            enable_system_bindings=enable_system_bindings,
            enable_open_in_editor=enable_open_in_editor).registry

    # Make sure that complete_while_typing is disabled when enable_history_search
    # is enabled. (First convert to SimpleFilter, to avoid doing bitwise
    # operations on bool objects.)
    complete_while_typing = shortcuts.to_simple_filter(complete_while_typing)
    enable_history_search = shortcuts.to_simple_filter(enable_history_search)
    multiline = shortcuts.to_simple_filter(multiline)

    complete_while_typing &= ~enable_history_search

    # Create application
    return application.Application(
        layout=layout.CreatePromptLayout(
            message=message,
            lexer=lexer,
            is_password=is_password,
            reserve_space_for_menu=(reserve_space_for_menu
                                    if completer is not None else 0),
            multiline=filters.Condition(lambda cli: multiline()),
            get_prompt_tokens=get_prompt_tokens,
            get_continuation_tokens=get_continuation_tokens,
            get_bottom_toolbar_tokens=get_bottom_toolbar_tokens,
            display_completions_in_columns=display_completions_in_columns,
            extra_input_processors=extra_input_processors,
            wrap_lines=wrap_lines,
            get_help_tokens=get_help_tokens,
            show_help=filters.Condition(lambda _: SHOW_HELP_WINDOW)),
        buffer=pt_buffer.Buffer(
            enable_history_search=enable_history_search,
            complete_while_typing=complete_while_typing,
            is_multiline=multiline,
            history=(history or pt_history.InMemoryHistory()),
            validator=validator,
            completer=completer,
            auto_suggest=auto_suggest,
            accept_action=accept_action,
            initial_document=document.Document(default),
        ),
        style=style,
        clipboard=clipboard,
        key_bindings_registry=key_bindings_registry,
        get_title=get_title,
        mouse_support=mouse_support,
        erase_when_done=erase_when_done,
        on_abort=on_abort,
        on_exit=on_exit)
コード例 #5
0
  def __init__(
      self,
      switchboard_inst: switchboard_base.SwitchboardBase,
      device_log_file_name: str,
      configuration: console_config.ConsoleConfiguration,
      console_input: Optional[prompt_toolkit_input.Input] = None,
      console_output: Optional[output.Output] = None) -> None:
    """Initializes a prompt_toolkit console application.

    Args:
      switchboard_inst: Switchboard capability instance.
      device_log_file_name: The device log file to read (stream) logs from.
      configuration: Console configuration.
      console_input: Console input. Defaults to stdin.
      console_output: Console output. Defaults to stdout.
    """
    self._device_log_file_name = device_log_file_name
    self._window_line_transforms = configuration.window_line_transforms
    self._line_to_window_id = configuration.line_to_window_id
    self._log_file = None  # Set by run().

    body_frames = []
    self._window_id_to_text_area = collections.OrderedDict()
    for window in configuration.windows:
      text_area, enclosing_frame = _make_ui_window(window, switchboard_inst)
      self._window_id_to_text_area[window.window_id] = text_area
      body_frames.append(enclosing_frame)

    self._menu_exit_item = widgets.MenuItem("Exit", handler=_do_exit)
    if body_frames:
      self._default_focused_element = body_frames[0]
    else:
      self._default_focused_element = self._menu_exit_item
    help_window_visibility = _HelpWindowVisibility(
        focus_element_on_hide=self._default_focused_element)
    close_help_button = widgets.Button(
        text="Ok",
        handler=help_window_visibility.hide)
    help_window_visibility.focus_element_on_show = close_help_button
    help_float_dialog = containers.Float(
        containers.ConditionalContainer(
            content=widgets.Dialog(
                title="Console help",
                body=widgets.TextArea(
                    text=_HELP_TEXT,
                    focusable=True,
                    read_only=True,
                    scrollbar=True,
                    width=_HELP_TEXT_WIDTH,
                ),
                buttons=[close_help_button],
            ),
            filter=filters.Condition(help_window_visibility.is_visible),
        ),
    )

    root_container = widgets.MenuContainer(
        body=containers.FloatContainer(
            content=containers.HSplit(body_frames),
            floats=[help_float_dialog],
        ),
        menu_items=[
            self._menu_exit_item,
            widgets.MenuItem("Help", handler=help_window_visibility.show),
        ],
    )

    button_list = switchboard_inst.button_list
    button_names = button_list[0].valid_buttons() if button_list else []
    if button_names:
      button_menu_items = [
          _make_button_menu_item(button_name, switchboard_inst, root_container)
          for button_name in button_names
      ]
      self._button_dropdown = widgets.MenuItem(
          "Buttons", children=button_menu_items)
      root_container.menu_items.append(self._button_dropdown)
    else:
      self._button_dropdown = None

    # Global key bindings.
    bindings = key_binding.KeyBindings()
    bindings.add("tab")(focus.focus_next)
    bindings.add("s-tab")(focus.focus_previous)

    style = styles.Style.from_dict({
        "menu-bar": "bg:#aaaaaa #888888",
    })

    self._application = application.Application(
        layout=layout.Layout(
            container=root_container,
            focused_element=self._default_focused_element,
        ),
        style=style,
        full_screen=True,
        key_bindings=bindings,
        editing_mode=enums.EditingMode.VI,
        input=console_input,
        output=console_output,
    )