diff --git a/stdlib/termios.pyi b/stdlib/termios.pyi index bf8d7bee2473..776396cce407 100644 --- a/stdlib/termios.pyi +++ b/stdlib/termios.pyi @@ -3,10 +3,12 @@ from _typeshed import FileDescriptorLike from typing import Any from typing_extensions import TypeAlias -if sys.platform != "win32": - # Must be a list of length 7, containing 6 ints and a list of NCCS 1-character bytes or ints. - _Attr: TypeAlias = list[int | list[bytes | int]] +# Must be a list of length 7, containing 6 ints and a list of NCCS 1-character bytes or ints. +_Attr: TypeAlias = list[int | list[bytes | int]] | list[int | list[bytes]] | list[int | list[int]] +# Same as _Attr for return types; we use Any to avoid a union. +_AttrReturn: TypeAlias = list[Any] +if sys.platform != "win32": B0: int B1000000: int B110: int @@ -252,7 +254,7 @@ if sys.platform != "win32": XCASE: int XTABS: int - def tcgetattr(__fd: FileDescriptorLike) -> list[Any]: ... # Returns _Attr; we use Any to avoid a union in the return type + def tcgetattr(__fd: FileDescriptorLike) -> _AttrReturn: ... def tcsetattr(__fd: FileDescriptorLike, __when: int, __attributes: _Attr) -> None: ... def tcsendbreak(__fd: FileDescriptorLike, __duration: int) -> None: ... def tcdrain(__fd: FileDescriptorLike) -> None: ... diff --git a/stdlib/tty.pyi b/stdlib/tty.pyi index 5a63dbf2dc53..add0d57a8d4b 100644 --- a/stdlib/tty.pyi +++ b/stdlib/tty.pyi @@ -1,5 +1,6 @@ import sys -from typing import IO, Any +import termios +from typing import IO from typing_extensions import TypeAlias if sys.platform != "win32": @@ -7,6 +8,10 @@ if sys.platform != "win32": if sys.version_info >= (3, 12): __all__ += ["cfmakeraw", "cfmakecbreak"] + _ModeSetterReturn: TypeAlias = termios._AttrReturn + else: + _ModeSetterReturn: TypeAlias = None + _FD: TypeAlias = int | IO[str] # XXX: Undocumented integer constants @@ -17,12 +22,9 @@ if sys.platform != "win32": ISPEED: int OSPEED: int CC: int - def setraw(fd: _FD, when: int = 2) -> None: ... - def setcbreak(fd: _FD, when: int = 2) -> None: ... + def setraw(fd: _FD, when: int = 2) -> _ModeSetterReturn: ... + def setcbreak(fd: _FD, when: int = 2) -> _ModeSetterReturn: ... if sys.version_info >= (3, 12): - # It is: `list[int, int, int, int, int, int, list[str]] - _Mode: TypeAlias = list[Any] - - def cfmakeraw(mode: _Mode) -> None: ... - def cfmakecbreak(mode: _Mode) -> None: ... + def cfmakeraw(mode: termios._Attr) -> None: ... + def cfmakecbreak(mode: termios._Attr) -> None: ...