mirror of
https://github.com/Lyxminxx/weatherCLI.git
synced 2026-10-11 20:57:46 +02:00
56 lines
1.3 KiB
Python
56 lines
1.3 KiB
Python
import sys
|
|
import termios
|
|
|
|
from ._config import config
|
|
|
|
|
|
# Initially taken from:
|
|
# http://code.activestate.com/recipes/134892/
|
|
# Thanks to Danny Yoo
|
|
# more infos from:
|
|
# https://gist.github.com/michelbl/efda48b19d3e587685e3441a74457024
|
|
# Thanks to Michel Blancard
|
|
def readchar() -> str:
|
|
"""Reads a single character from the input stream.
|
|
Blocks until a character is available."""
|
|
|
|
fd = sys.stdin.fileno()
|
|
old_settings = termios.tcgetattr(fd)
|
|
term = termios.tcgetattr(fd)
|
|
try:
|
|
term[3] &= ~(termios.ICANON | termios.ECHO | termios.IGNBRK | termios.BRKINT)
|
|
termios.tcsetattr(fd, termios.TCSAFLUSH, term)
|
|
|
|
ch = sys.stdin.read(1)
|
|
finally:
|
|
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
|
|
return ch
|
|
|
|
|
|
def readkey() -> str:
|
|
"""Get a keypress. If an escaped key is pressed, the full sequence is
|
|
read and returned as noted in `_posix_key.py`."""
|
|
|
|
c1 = readchar()
|
|
|
|
if c1 in config.INTERRUPT_KEYS:
|
|
raise KeyboardInterrupt
|
|
|
|
if c1 != "\x1B":
|
|
return c1
|
|
|
|
c2 = readchar()
|
|
if c2 not in "\x4F\x5B":
|
|
return c1 + c2
|
|
|
|
c3 = readchar()
|
|
if c3 not in "\x31\x32\x33\x35\x36":
|
|
return c1 + c2 + c3
|
|
|
|
c4 = readchar()
|
|
if c4 not in "\x30\x31\x33\x34\x35\x37\x38\x39":
|
|
return c1 + c2 + c3 + c4
|
|
|
|
c5 = readchar()
|
|
return c1 + c2 + c3 + c4 + c5
|