如何在curses中启用鼠标移动事件?
我找到了Mouse movement events in NCurses,Xterm Control Sequences和ncurses_mouse_movement,但是我不明白如何在python-curses中启用鼠标移动事件。我认为这与TERM = xterm-1003有关,但我不知道如何在python-curses中进行设置。
这是我启用任何鼠标事件所要做的:
curses.mousemask(curses.REPORT_MOUSE_POSITION | curses.ALL_MOUSE_EVENTS)
答案 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进行调整。