大型终端的 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 模仿器不).
我在 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 模仿器不).