123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332 |
- """
- 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
- @abstractmethod
- def fileno(self) -> int:
- "Return the file descriptor to which we can write for the output."
- @abstractmethod
- 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.)
- """
- @abstractmethod
- def write(self, data: str) -> None:
- "Write text (Terminal escape sequences will be removed/escaped.)"
- @abstractmethod
- def write_raw(self, data: str) -> None:
- "Write text."
- @abstractmethod
- def set_title(self, title: str) -> None:
- "Set terminal title."
- @abstractmethod
- def clear_title(self) -> None:
- "Clear title again. (or restore previous title.)"
- @abstractmethod
- def flush(self) -> None:
- "Write to output stream and flush."
- @abstractmethod
- def erase_screen(self) -> None:
- """
- Erases the screen with the background color and moves the cursor to
- home.
- """
- @abstractmethod
- def enter_alternate_screen(self) -> None:
- "Go to the alternate screen buffer. (For full screen applications)."
- @abstractmethod
- def quit_alternate_screen(self) -> None:
- "Leave the alternate screen buffer."
- @abstractmethod
- def enable_mouse_support(self) -> None:
- "Enable mouse."
- @abstractmethod
- def disable_mouse_support(self) -> None:
- "Disable mouse."
- @abstractmethod
- def erase_end_of_line(self) -> None:
- """
- Erases from the current cursor position to the end of the current line.
- """
- @abstractmethod
- def erase_down(self) -> None:
- """
- Erases the screen from the current line down to the bottom of the
- screen.
- """
- @abstractmethod
- def reset_attributes(self) -> None:
- "Reset color and styling attributes."
- @abstractmethod
- def set_attributes(self, attrs: Attrs, color_depth: ColorDepth) -> None:
- "Set new color and styling attributes."
- @abstractmethod
- def disable_autowrap(self) -> None:
- "Disable auto line wrapping."
- @abstractmethod
- def enable_autowrap(self) -> None:
- "Enable auto line wrapping."
- @abstractmethod
- def cursor_goto(self, row: int = 0, column: int = 0) -> None:
- "Move cursor position."
- @abstractmethod
- def cursor_up(self, amount: int) -> None:
- "Move cursor `amount` place up."
- @abstractmethod
- def cursor_down(self, amount: int) -> None:
- "Move cursor `amount` place down."
- @abstractmethod
- def cursor_forward(self, amount: int) -> None:
- "Move cursor `amount` place forward."
- @abstractmethod
- def cursor_backward(self, amount: int) -> None:
- "Move cursor `amount` place backward."
- @abstractmethod
- def hide_cursor(self) -> None:
- "Hide cursor."
- @abstractmethod
- def show_cursor(self) -> None:
- "Show cursor."
- @abstractmethod
- def set_cursor_shape(self, cursor_shape: CursorShape) -> None:
- "Set cursor shape to block, beam or underline."
- @abstractmethod
- def reset_cursor_shape(self) -> None:
- "Reset cursor shape."
- def ask_for_cpr(self) -> None:
- """
- Asks for a cursor position report (CPR).
- (VT100 only.)
- """
- @property
- 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
- @abstractmethod
- 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
- @abstractmethod
- 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
|