如何启用诅咒中的鼠标移动事件

时间:2019-05-24 22:28:31

标签: python python-curses

如何在curses中启用鼠标移动事件?

我找到了Mouse movement events in NCursesXterm Control Sequencesncurses_mouse_movement,但是我不明白如何在python-curses中启用鼠标移动事件。我认为这与TERM = xterm-1003有关,但我不知道如何在python-curses中进行设置。

这是我启用任何鼠标事件所要做的:

curses.mousemask(curses.REPORT_MOUSE_POSITION | curses.ALL_MOUSE_EVENTS)

2 个答案:

答案 0 :(得分:0)

我终于使它起作用了。在Ubuntu上,只需设置//Email if(email == ""){ erremail.innerHTML = "Email can't be empty"; result = false; }else if(!emailRegex.test(email)) { erremail.innerHTML = "Invalid e-mail format"; result = false; }else{ erremail.innerHTML = ""; } 就可以了,但是在OSX上,我必须按照以下说明编辑terminfo文件:

Which $TERM to use to have both 256 colors and mouse move events in python curses?

但是在我的系统上,格式是不同的,所以我添加了一行:

TERM=screen-256color

到我的terminfo。为了测试它,我使用了此Python代码(注意XM=\E[?1003%?%p1%{1}%=%th%el%;,是非常必要的,否则鼠标事件会导致screen.keypad(1)返回转义键代码)。

getch

答案 1 :(得分:0)

我知道这是一个非常老的问题,OP可能不再需要它了,但是我将其留给所有在谷歌搜索和抓挠小时后偶然发现此问题的人:

import curses

def main(win:curses.window):
    win.clear()
    win.nodelay(True)
    curses.mousemask(curses.REPORT_MOUSE_POSITION)
    print('\033[?1003h') # enable mouse tracking with the XTERM API
    # https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-Mouse-Tracking

    while True:
        ch=win.getch()
        if ch==curses.KEY_MOUSE:
            win.clear()
            win.addstr(0,0,str(curses.getmouse()[1:3]))
            win.refresh()

curses.wrapper(main)

这里最重要的一行是print('\033[?1003h'),它使鼠标位置报告给程序,而mousemask使curses能够解释来自终端的输入。请注意,print必须在调用mousemask()之后出现。

在具有iTerm2的macOS 10.14.6上进行了测试。没有对terminfo进行调整。