【问题标题】:Mouse support with ncurses (for python) for large terminals用于大型终端的 ncurses(用于 python)的鼠标支持
【发布时间】:2018-06-14 07:07:30
【问题描述】:

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

但是Midnight Commander 可以准确处理大型终端。经过一番挖掘,我找不到如何正确处理带有诅咒的鼠标(这个example 不能正常工作)。我用诅咒尝试的一切都无法在大型终端上运行。似乎午夜指挥官正在使用gpm,但我找不到任何在 python 中使用它的方法。

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

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

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

【问题讨论】:

    标签: python-3.x terminal ncurses tty python-curses


    【解决方案1】:

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

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

    【讨论】:

    • 现在这一切都说得通了,我认为 python curses 使用了旧版本的 ncurses。将 SGR 1006 转义序列强制到标准输出中确实可以在终端中启用扩展鼠标支持。
    猜你喜欢
    • 2010-12-21
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 2015-08-24
    • 2013-11-07
    • 1970-01-01
    • 2016-05-21
    相关资源
    最近更新 更多