aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/tools/python3/Lib/tty.py
diff options
context:
space:
mode:
authorthegeorg <thegeorg@yandex-team.com>2024-02-19 02:38:52 +0300
committerthegeorg <thegeorg@yandex-team.com>2024-02-19 02:50:43 +0300
commitd96fa07134c06472bfee6718b5cfd1679196fc99 (patch)
tree31ec344fa9d3ff8dc038692516b6438dfbdb8a2d /contrib/tools/python3/Lib/tty.py
parent452cf9e068aef7110e35e654c5d47eb80111ef89 (diff)
downloadydb-d96fa07134c06472bfee6718b5cfd1679196fc99.tar.gz
Sync contrib/tools/python3 layout with upstream
* Move src/ subdir contents to the top of the layout * Rename self-written lib -> lib2 to avoid CaseFolding warning from the VCS * Regenerate contrib/libs/python proxy-headers accordingly 4ccc62ac1511abcf0fed14ccade38e984e088f1e
Diffstat (limited to 'contrib/tools/python3/Lib/tty.py')
-rw-r--r--contrib/tools/python3/Lib/tty.py73
1 files changed, 73 insertions, 0 deletions
diff --git a/contrib/tools/python3/Lib/tty.py b/contrib/tools/python3/Lib/tty.py
new file mode 100644
index 00000000000..5a49e040042
--- /dev/null
+++ b/contrib/tools/python3/Lib/tty.py
@@ -0,0 +1,73 @@
+"""Terminal utilities."""
+
+# Author: Steen Lumholt.
+
+from termios import *
+
+__all__ = ["cfmakeraw", "cfmakecbreak", "setraw", "setcbreak"]
+
+# Indices for termios list.
+IFLAG = 0
+OFLAG = 1
+CFLAG = 2
+LFLAG = 3
+ISPEED = 4
+OSPEED = 5
+CC = 6
+
+def cfmakeraw(mode):
+ """Make termios mode raw."""
+ # Clear all POSIX.1-2017 input mode flags.
+ # See chapter 11 "General Terminal Interface"
+ # of POSIX.1-2017 Base Definitions.
+ mode[IFLAG] &= ~(IGNBRK | BRKINT | IGNPAR | PARMRK | INPCK | ISTRIP |
+ INLCR | IGNCR | ICRNL | IXON | IXANY | IXOFF)
+
+ # Do not post-process output.
+ mode[OFLAG] &= ~OPOST
+
+ # Disable parity generation and detection; clear character size mask;
+ # let character size be 8 bits.
+ mode[CFLAG] &= ~(PARENB | CSIZE)
+ mode[CFLAG] |= CS8
+
+ # Clear all POSIX.1-2017 local mode flags.
+ mode[LFLAG] &= ~(ECHO | ECHOE | ECHOK | ECHONL | ICANON |
+ IEXTEN | ISIG | NOFLSH | TOSTOP)
+
+ # POSIX.1-2017, 11.1.7 Non-Canonical Mode Input Processing,
+ # Case B: MIN>0, TIME=0
+ # A pending read shall block until MIN (here 1) bytes are received,
+ # or a signal is received.
+ mode[CC] = list(mode[CC])
+ mode[CC][VMIN] = 1
+ mode[CC][VTIME] = 0
+
+def cfmakecbreak(mode):
+ """Make termios mode cbreak."""
+ # Do not echo characters; disable canonical input.
+ mode[LFLAG] &= ~(ECHO | ICANON)
+
+ # POSIX.1-2017, 11.1.7 Non-Canonical Mode Input Processing,
+ # Case B: MIN>0, TIME=0
+ # A pending read shall block until MIN (here 1) bytes are received,
+ # or a signal is received.
+ mode[CC] = list(mode[CC])
+ mode[CC][VMIN] = 1
+ mode[CC][VTIME] = 0
+
+def setraw(fd, when=TCSAFLUSH):
+ """Put terminal into raw mode."""
+ mode = tcgetattr(fd)
+ new = list(mode)
+ cfmakeraw(new)
+ tcsetattr(fd, when, new)
+ return mode
+
+def setcbreak(fd, when=TCSAFLUSH):
+ """Put terminal into cbreak mode."""
+ mode = tcgetattr(fd)
+ new = list(mode)
+ cfmakecbreak(new)
+ tcsetattr(fd, when, new)
+ return mode