def _confirm(question: str, default: bool = False, **kwargs) -> bool: bindings = KeyBindings() @bindings.add("y") @bindings.add("Y") def _yes(event: KeyPressEvent) -> None: session.default_buffer.text = "y" event.app.exit(result=True) @bindings.add("n") @bindings.add("N") def _no(event: KeyPressEvent) -> None: session.default_buffer.text = "n" event.app.exit(result=False) @bindings.add(Keys.Any) def _any(_: KeyPressEvent) -> None: # Disallow inserting other text. pass if default: default_indicator = "Y/n" bindings.add(Keys.Enter)(_yes) else: default_indicator = "y/N" bindings.add(Keys.Enter)(_no) complete_message = merge_formatted_text([question, f" ({default_indicator}): "]) session: shortcuts.PromptSession[bool] = shortcuts.PromptSession( complete_message, key_bindings=bindings, **kwargs ) return session.prompt(complete_message, key_bindings=bindings, **kwargs)
def build_propmpt(self) -> pt_shortcuts.PromptSession: history = pt_history.FileHistory( os.path.expanduser('~/.edgedbhistory')) bindings = pt_key_binding.KeyBindings() handle = bindings.add @handle('f3') # type: ignore def _mode_toggle(event: Any) -> None: self.context.toggle_query_mode() @handle('f4') # type: ignore def _implicit_toggle(event: Any) -> None: self.context.toggle_implicit() @handle('f5') # type: ignore def _introspect_toggle(event: Any) -> None: self.context.toggle_introspect_types() if self.context.introspect_types: self.ensure_connection() self.introspect_db(self.connection) else: self.context.typenames = None @handle('tab') # type: ignore def _tab(event: Any) -> None: b = prompt.app.current_buffer before_cursor = b.document.current_line_before_cursor if b.text and (not before_cursor or before_cursor.isspace()): b.insert_text(' ') prompt = pt_shortcuts.PromptSession( lexer=pt_lexers.PygmentsLexer(eql_pygments.EdgeQLLexer), include_default_pygments_style=False, completer=pt_complete.DummyCompleter(), reserve_space_for_menu=6, message=self.get_prompt_tokens, prompt_continuation=self.get_continuation_tokens, bottom_toolbar=self.get_toolbar_tokens, multiline=is_multiline, history=history, complete_while_typing=pt_filters.Always(), key_bindings=bindings, style=self.style, editing_mode=pt_enums.EditingMode.VI, search_ignore_case=True, ) return prompt