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(), )
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
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)
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)
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, )