如何捕获终端发送的转义序列?
How to capture escape sequences sent by terminal?
如何捕获终端应用程序(例如 Konsole)发送的转义序列?例如,如果您点击 PgDown,发送到虚拟控制台的是什么?
我想将发送到虚拟控制台的字节流(比如当我点击 "Ctrl+C" 它产生的转义序列时)记录到一个文件中,然后我可以用 hexdump 读取。
我做了一个小 python 脚本来完成这个技巧:
#!/bin/env python
import curses
from pprint import pprint
buf = ''
def main(stdscr):
global buf
curses.noecho()
curses.raw()
curses.cbreak()
stdscr.keypad(False)
stop = stdscr.getkey()
c = stdscr.getkey()
buf = ''
while c != stop:
buf += c
c = stdscr.getkey()
def run():
curses.wrapper(main)
pprint(buf)
tmp = buf.encode('latin1')
pprint([hex(x) for x in tmp])
pprint([bin(x) for x in tmp])
run()
...清除屏幕,然后键入一个键(例如a),然后键入任何内容,然后键入与第一个停止键相同的键。然后,它将显示接收到的所有字节(例如:a [开始记录]
Alt+b [停止记录] a 使用我的终端生成字节:['0x1b', '0x62']
如何捕获终端应用程序(例如 Konsole)发送的转义序列?例如,如果您点击 PgDown,发送到虚拟控制台的是什么?
我想将发送到虚拟控制台的字节流(比如当我点击 "Ctrl+C" 它产生的转义序列时)记录到一个文件中,然后我可以用 hexdump 读取。
我做了一个小 python 脚本来完成这个技巧:
#!/bin/env python
import curses
from pprint import pprint
buf = ''
def main(stdscr):
global buf
curses.noecho()
curses.raw()
curses.cbreak()
stdscr.keypad(False)
stop = stdscr.getkey()
c = stdscr.getkey()
buf = ''
while c != stop:
buf += c
c = stdscr.getkey()
def run():
curses.wrapper(main)
pprint(buf)
tmp = buf.encode('latin1')
pprint([hex(x) for x in tmp])
pprint([bin(x) for x in tmp])
run()
...清除屏幕,然后键入一个键(例如a),然后键入任何内容,然后键入与第一个停止键相同的键。然后,它将显示接收到的所有字节(例如:a [开始记录]
Alt+b [停止记录] a 使用我的终端生成字节:['0x1b', '0x62']