Spaces:
Sleeping
Sleeping
""" | |
Interface for an output. | |
""" | |
from __future__ import annotations | |
from abc import ABCMeta, abstractmethod | |
from typing import TextIO | |
from prompt_toolkit.cursor_shapes import CursorShape | |
from prompt_toolkit.data_structures import Size | |
from prompt_toolkit.styles import Attrs | |
from .color_depth import ColorDepth | |
__all__ = [ | |
"Output", | |
"DummyOutput", | |
] | |
class Output(metaclass=ABCMeta): | |
""" | |
Base class defining the output interface for a | |
:class:`~prompt_toolkit.renderer.Renderer`. | |
Actual implementations are | |
:class:`~prompt_toolkit.output.vt100.Vt100_Output` and | |
:class:`~prompt_toolkit.output.win32.Win32Output`. | |
""" | |
stdout: TextIO | None = None | |
def fileno(self) -> int: | |
"Return the file descriptor to which we can write for the output." | |
def encoding(self) -> str: | |
""" | |
Return the encoding for this output, e.g. 'utf-8'. | |
(This is used mainly to know which characters are supported by the | |
output the data, so that the UI can provide alternatives, when | |
required.) | |
""" | |
def write(self, data: str) -> None: | |
"Write text (Terminal escape sequences will be removed/escaped.)" | |
def write_raw(self, data: str) -> None: | |
"Write text." | |
def set_title(self, title: str) -> None: | |
"Set terminal title." | |
def clear_title(self) -> None: | |
"Clear title again. (or restore previous title.)" | |
def flush(self) -> None: | |
"Write to output stream and flush." | |
def erase_screen(self) -> None: | |
""" | |
Erases the screen with the background color and moves the cursor to | |
home. | |
""" | |
def enter_alternate_screen(self) -> None: | |
"Go to the alternate screen buffer. (For full screen applications)." | |
def quit_alternate_screen(self) -> None: | |
"Leave the alternate screen buffer." | |
def enable_mouse_support(self) -> None: | |
"Enable mouse." | |
def disable_mouse_support(self) -> None: | |
"Disable mouse." | |
def erase_end_of_line(self) -> None: | |
""" | |
Erases from the current cursor position to the end of the current line. | |
""" | |
def erase_down(self) -> None: | |
""" | |
Erases the screen from the current line down to the bottom of the | |
screen. | |
""" | |
def reset_attributes(self) -> None: | |
"Reset color and styling attributes." | |
def set_attributes(self, attrs: Attrs, color_depth: ColorDepth) -> None: | |
"Set new color and styling attributes." | |
def disable_autowrap(self) -> None: | |
"Disable auto line wrapping." | |
def enable_autowrap(self) -> None: | |
"Enable auto line wrapping." | |
def cursor_goto(self, row: int = 0, column: int = 0) -> None: | |
"Move cursor position." | |
def cursor_up(self, amount: int) -> None: | |
"Move cursor `amount` place up." | |
def cursor_down(self, amount: int) -> None: | |
"Move cursor `amount` place down." | |
def cursor_forward(self, amount: int) -> None: | |
"Move cursor `amount` place forward." | |
def cursor_backward(self, amount: int) -> None: | |
"Move cursor `amount` place backward." | |
def hide_cursor(self) -> None: | |
"Hide cursor." | |
def show_cursor(self) -> None: | |
"Show cursor." | |
def set_cursor_shape(self, cursor_shape: CursorShape) -> None: | |
"Set cursor shape to block, beam or underline." | |
def reset_cursor_shape(self) -> None: | |
"Reset cursor shape." | |
def ask_for_cpr(self) -> None: | |
""" | |
Asks for a cursor position report (CPR). | |
(VT100 only.) | |
""" | |
def responds_to_cpr(self) -> bool: | |
""" | |
`True` if the `Application` can expect to receive a CPR response after | |
calling `ask_for_cpr` (this will come back through the corresponding | |
`Input`). | |
This is used to determine the amount of available rows we have below | |
the cursor position. In the first place, we have this so that the drop | |
down autocompletion menus are sized according to the available space. | |
On Windows, we don't need this, there we have | |
`get_rows_below_cursor_position`. | |
""" | |
return False | |
def get_size(self) -> Size: | |
"Return the size of the output window." | |
def bell(self) -> None: | |
"Sound bell." | |
def enable_bracketed_paste(self) -> None: | |
"For vt100 only." | |
def disable_bracketed_paste(self) -> None: | |
"For vt100 only." | |
def reset_cursor_key_mode(self) -> None: | |
""" | |
For vt100 only. | |
Put the terminal in normal cursor mode (instead of application mode). | |
See: https://vt100.net/docs/vt100-ug/chapter3.html | |
""" | |
def scroll_buffer_to_prompt(self) -> None: | |
"For Win32 only." | |
def get_rows_below_cursor_position(self) -> int: | |
"For Windows only." | |
raise NotImplementedError | |
def get_default_color_depth(self) -> ColorDepth: | |
""" | |
Get default color depth for this output. | |
This value will be used if no color depth was explicitly passed to the | |
`Application`. | |
.. note:: | |
If the `$PROMPT_TOOLKIT_COLOR_DEPTH` environment variable has been | |
set, then `outputs.defaults.create_output` will pass this value to | |
the implementation as the default_color_depth, which is returned | |
here. (This is not used when the output corresponds to a | |
prompt_toolkit SSH/Telnet session.) | |
""" | |
class DummyOutput(Output): | |
""" | |
For testing. An output class that doesn't render anything. | |
""" | |
def fileno(self) -> int: | |
"There is no sensible default for fileno()." | |
raise NotImplementedError | |
def encoding(self) -> str: | |
return "utf-8" | |
def write(self, data: str) -> None: | |
pass | |
def write_raw(self, data: str) -> None: | |
pass | |
def set_title(self, title: str) -> None: | |
pass | |
def clear_title(self) -> None: | |
pass | |
def flush(self) -> None: | |
pass | |
def erase_screen(self) -> None: | |
pass | |
def enter_alternate_screen(self) -> None: | |
pass | |
def quit_alternate_screen(self) -> None: | |
pass | |
def enable_mouse_support(self) -> None: | |
pass | |
def disable_mouse_support(self) -> None: | |
pass | |
def erase_end_of_line(self) -> None: | |
pass | |
def erase_down(self) -> None: | |
pass | |
def reset_attributes(self) -> None: | |
pass | |
def set_attributes(self, attrs: Attrs, color_depth: ColorDepth) -> None: | |
pass | |
def disable_autowrap(self) -> None: | |
pass | |
def enable_autowrap(self) -> None: | |
pass | |
def cursor_goto(self, row: int = 0, column: int = 0) -> None: | |
pass | |
def cursor_up(self, amount: int) -> None: | |
pass | |
def cursor_down(self, amount: int) -> None: | |
pass | |
def cursor_forward(self, amount: int) -> None: | |
pass | |
def cursor_backward(self, amount: int) -> None: | |
pass | |
def hide_cursor(self) -> None: | |
pass | |
def show_cursor(self) -> None: | |
pass | |
def set_cursor_shape(self, cursor_shape: CursorShape) -> None: | |
pass | |
def reset_cursor_shape(self) -> None: | |
pass | |
def ask_for_cpr(self) -> None: | |
pass | |
def bell(self) -> None: | |
pass | |
def enable_bracketed_paste(self) -> None: | |
pass | |
def disable_bracketed_paste(self) -> None: | |
pass | |
def scroll_buffer_to_prompt(self) -> None: | |
pass | |
def get_size(self) -> Size: | |
return Size(rows=40, columns=80) | |
def get_rows_below_cursor_position(self) -> int: | |
return 40 | |
def get_default_color_depth(self) -> ColorDepth: | |
return ColorDepth.DEPTH_1_BIT | |