我正在用ncurses編碼用戶界面。 我有一個問題,當我的終端寬度或高度超過222個字符/行,鼠標座標返回-33的值,所以當我點擊以超過222個字符mouse_x = -33 當我點擊超出222行mouse_y = - 33Ncurses錯誤鼠標座標超出222寬度或高度終端
是否有可能告訴ncurses否停止超過222個字符/行的鼠標事件? 在vim中,當您將:vs分隔欄移動超過222個字符時,也會發生此錯誤,它會返回到x = 0。
也許這個bug已經修復了?
1 #include <ncurses.h>
2
3 void treat_mouse(MEVENT* event);
4
5 int main(void)
6 {
7 bool run;
8 int key;
9 MEVENT event;
10
11 run = true;
12 initscr();
13 noecho();
14 keypad(stdscr, TRUE);
15 mousemask(BUTTON1_PRESSED, NULL);
16 while (run == true)
17 {
18 key = getch();
19 switch (key)
20 {
21 case 'q':
22 run = false;
23 break;
24 case KEY_MOUSE:
25 treat_mouse(&event);
26 break;
27 default:
28 break;
29 }
30 }
31 endwin();
32 return 0;
33 }
34
35 void treat_mouse(MEVENT* event)
36 {
37 if (getmouse(event) == OK)
38 mvwprintw(stdscr, 0, 0, "click: x = %d, y = %d\n", event->x, event->y);
39 }
。
。
========================編輯===================== ==
。
。
好的,我找到了。
我已經下載了這裏的ncurses代碼源http://ftp.gnu.org/pub/gnu/ncurses/
,我已經採取了這一鏈接ncurses的5.9.tar.gz 04-APR-2011 19:12 2.7M
我已搜查getch()。
getch()致電wgetch()。
wgetch()致電_nc_wgetch()。
_nc_wgetch()致電_mouse_inline()。
_mouse_inline()是結構屏幕一個函數指針誰打電話_nc_mouse_inline()或no_mouse_inline()誰是一個空函數(當沒有鼠標,我認爲)。
你可以看到_nc_mouse_inline()功能ncurses的5.9/ncurses的/基/ lib_mouse.c
她使用無符號的字符來演算鼠標座標,看到這樣的痘痘例如:
821 static bool
822 _nc_mouse_inline(SCREEN *sp)
823 /* mouse report received in the keyboard stream -- parse its info */
824 {
.
.
.
832 unsigned char kbuf[4];
.
.
.
970 eventp->x = (kbuf[1] - ' ') - 1;
971 eventp->y = (kbuf[2] - ' ') - 1;
.
.
.
984 return (result);
985 }
終於我會做任何事情。
這是xterm鼠標協議的限制。有一個擴展(SGR 1006),但關於它在ncurses中支持的最新消息只是:https://lists.gnu.org/archive/html/bug-ncurses/2013-01/msg00014.html – ninjalj