大型终端的 ncurses 鼠标支持(python)

Mouse support with ncurses (for python) for large terminals

我在 docker 容器中使用 python3 和 ncurses (curses)。 问题是鼠标事件没有准确地报告 x 在具有超过 222 单元格宽度的终端中的位置。乍一看,这是一个明显的限制,因为据我所知,位置是以单个字节发送的。

然而 Midnight Commander accurately handles large terminals. After some digging i could not find how to properly handle mouse with curses (this example does not work properly). Everything i tried with curses failed to work with large terminals. It seems that midnight commander is using gpm,但我找不到在 python 中使用它的任何方法。

q1:如何在 python3 中直接处理大型终端中的鼠标,最好使用 curses?

q2:以午夜指挥官为例,直接在stdout中打印转义序列,鼠标会正常工作吗?

问题 3:是否有任何其他终端 gui 库可以为 python 正确处理鼠标?

这不是 python 接口对 curses 的直接限制,而是底层 curses 库、终端描述和终端的一个特性:

  • 对于 ncurses,这是 extended mouse 功能,它是带有 ABI 6 的 ncurses 中的标准功能(自 2005 年起可用,ncurses 6 in 2015 中的标准),请注意某些发行版仍然提供 ABI 5.
  • 终端描述必须使用 ncurses 认为暗示支持 SGR 1006 的功能,当然
  • 终端本身必须支持该功能(请参阅 January 2018 的 ncurses 数据库中的注释,指出一些 xterm 模仿器).