mirror of
https://github.com/Lyxminxx/weatherCLI.git
synced 2026-10-11 20:57:46 +02:00
Initial commit
This commit is contained in:
commit
3394196287
2164 files changed
+358958
No files matched your search
@@ -0,0 +1,41 @@
|
||||
import msvcrt
|
||||
|
||||
from ._config import config
|
||||
|
||||
|
||||
def readchar() -> str:
|
||||
"""Reads a single utf8-character from the input stream.
|
||||
Blocks until a character is available."""
|
||||
|
||||
# read a single wide character from the input
|
||||
return msvcrt.getwch()
|
||||
|
||||
|
||||
def readkey() -> str:
|
||||
"""Reads the next keypress. If an escaped key is pressed, the full
|
||||
sequence is read and returned as noted in `_win_key.py`."""
|
||||
|
||||
# read first character
|
||||
ch = readchar()
|
||||
|
||||
# keys like CTRL+C should cause a interrupt
|
||||
if ch in config.INTERRUPT_KEYS:
|
||||
raise KeyboardInterrupt
|
||||
|
||||
# parse special multi character keys (see key module)
|
||||
# https://learn.microsoft.com/cpp/c-runtime-library/reference/getch-getwch#remarks
|
||||
if ch in "\x00\xe0":
|
||||
# read the second half
|
||||
# we always return the 0x00 prefix, this avoids duplications in the key module
|
||||
ch = "\x00" + readchar()
|
||||
|
||||
# parse unicode surrogates
|
||||
# https://docs.python.org/3/c-api/unicode.html#c.Py_UNICODE_IS_SURROGATE
|
||||
if "\uD800" <= ch <= "\uDFFF":
|
||||
ch += readchar()
|
||||
|
||||
# combine the characters into a single utf-16 encoded string.
|
||||
# this prevents the character from being treated as a surrogate pair again.
|
||||
ch = ch.encode("utf-16", errors="surrogatepass").decode("utf-16")
|
||||
|
||||
return ch
|
||||
Reference in new issue
Block a user