forked from NotAShelf/beer
scripts: add a kitty keyboard protocol probe
Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: If23be9ff848010463a1df59603a063526a6a6964
This commit is contained in:
parent
1ef2efa0a7
commit
bb406cb6e3
1 changed files with 40 additions and 0 deletions
40
scripts/kitty-probe.py
Executable file
40
scripts/kitty-probe.py
Executable file
|
|
@ -0,0 +1,40 @@
|
|||
#!/usr/bin/env python3
|
||||
"""Probe the kitty keyboard protocol by printing the raw bytes each key sends.
|
||||
|
||||
Run it inside a terminal to see what that terminal emits under a chosen set of
|
||||
progressive-enhancement flags:
|
||||
|
||||
python3 scripts/kitty-probe.py [flags]
|
||||
|
||||
`flags` is the decimal flag set to enable (default 1):
|
||||
|
||||
1 disambiguate escape codes
|
||||
2 report event types (press/repeat/release)
|
||||
4 report alternate keys
|
||||
8 report all keys as escape codes
|
||||
16 report associated text
|
||||
|
||||
Combine by adding, e.g. 15 for everything but text, 31 for everything. Press
|
||||
Esc to quit; the previous keyboard mode is restored on exit.
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
import termios
|
||||
import tty
|
||||
|
||||
flags = int(sys.argv[1]) if len(sys.argv) > 1 else 1
|
||||
fd = sys.stdin.fileno()
|
||||
old = termios.tcgetattr(fd)
|
||||
try:
|
||||
tty.setraw(fd)
|
||||
os.write(1, f"\033[>{flags}u".encode()) # push current flags and enable
|
||||
os.write(1, f"flags={flags}; keys print as raw bytes, Esc quits\r\n".encode())
|
||||
while True:
|
||||
b = os.read(fd, 64)
|
||||
os.write(1, (repr(b) + "\r\n").encode())
|
||||
if b == b"\x1b" or b"27u" in b: # Esc in legacy or CSI u form
|
||||
break
|
||||
finally:
|
||||
os.write(1, b"\033[<u") # pop back to the previous mode
|
||||
termios.tcsetattr(fd, termios.TCSADRAIN, old)
|
||||
Loading…
Add table
Add a link
Reference in a new issue