如何捕获终端发送的转义序列?

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 [开始记录] A​​lt+b [停止记录] a 使用我的终端生成字节:['0x1b', '0x62']