pass
-def _find_clib():
+def _find_clib() -> str:
trylibs = ["ncursesw", "ncurses", "curses"]
for lib in trylibs:
class KeymapTranslator(InputTranslator):
- def __init__(self, keymap, verbose=0, invalid_cls=None, character_cls=None):
+ def __init__(self, keymap, verbose=False, invalid_cls=None, character_cls=None):
self.verbose = verbose
from .keymap import compile_keymap, parse_keys
else:
return None
- def empty(self):
+ def empty(self) -> bool:
return not self.results
return ret, s
-def parse_keys(key):
+def parse_keys(key: str) -> list[str]:
s = 0
r = []
while s < len(key):
fd = sys.stdin.fileno()
old = termios.tcgetattr(fd)
tty.setcbreak(fd)
- getchar = lambda: sys.stdin.read(1)
has_tty = True
+
+ def getchar() -> str:
+ return sys.stdin.read(1)
+
except (ImportError, AttributeError, io.UnsupportedOperation):
- getchar = lambda: sys.stdin.readline()[:-1][:1]
+ def getchar() -> str:
+ return sys.stdin.readline()[:-1][:1]
try:
try:
from .types import Callback, Completer, KeySpec, CommandName
+MoreLinesCallable = Callable[[str], bool]
+
+
__all__ = [
"add_history",
"clear_history",
# Instance fields
config: ReadlineConfig
- more_lines: Callable[[str], bool] | None = None
+ more_lines: MoreLinesCallable | None = None
def __post_init__(self) -> None:
super().__post_init__()
reader.ps1 = str(prompt)
return reader.readline(startup_hook=self.startup_hook)
- def multiline_input(self, more_lines, ps1, ps2):
+ def multiline_input(self, more_lines: MoreLinesCallable, ps1: str, ps2: str) -> tuple[str, bool]:
"""Read an input on possibly multiple lines, asking for more
lines as long as 'more_lines(unicodetext)' returns an object whose
boolean value is true.
from .utils import wlen
+TYPE_CHECKING = False
+
# types
-if False:
- from typing import IO
+if TYPE_CHECKING:
+ from typing import IO, Literal, overload
+else:
+ overload = lambda func: None
class InvalidTerminal(RuntimeError):
curses.setupterm(term or None, self.output_fd)
self.term = term
- def _my_getstr(cap, optional=0):
+ @overload
+ def _my_getstr(cap: str, optional: Literal[False] = False) -> bytes: ...
+
+ @overload
+ def _my_getstr(cap: str, optional: bool) -> bytes | None: ...
+
+ def _my_getstr(cap: str, optional: bool = False) -> bytes | None:
r = curses.tigetstr(cap)
if not optional and r is None:
raise InvalidTerminal(
elif dy < 0:
self.__write_code(self._cuu, -dy)
- def __move_x_hpa(self, x):
+ def __move_x_hpa(self, x: int) -> None:
if x != self.__posxy[0]:
self.__write_code(self._hpa, x)
- def __move_x_cub1_cuf1(self, x):
+ def __move_x_cub1_cuf1(self, x: int) -> None:
dx = x - self.__posxy[0]
if dx > 0:
self.__write_code(self._cuf1 * dx)
elif dx < 0:
self.__write_code(self._cub1 * (-dx))
- def __move_x_cub_cuf(self, x):
+ def __move_x_cub_cuf(self, x: int) -> None:
dx = x - self.__posxy[0]
if dx > 0:
self.__write_code(self._cuf, dx)