Я могу echo -e "\e[?1003h"
и наблюдать, как мой терминал поглощает события движения мыши, как конфеты, но проклятиям они, похоже, совсем не нужны. я посмотрел на
События движения мыши в NCurses
но похоже, что эта проблема была решена путем изменения env TERM, что мне не поможет, потому что мой терминал действительно реагирует на события перемещения мыши, однако ncurses нет. Вот что я пробовал (этот код почти полностью взят из другого вопроса):
#include <ncurses.h>
#include <assert.h>
int main(){
int ch, count=0;
mmask_t old;
initscr ();
noecho ();
cbreak ();
mousemask (ALL_MOUSE_EVENTS | REPORT_MOUSE_POSITION, &old);
keypad (stdscr, TRUE);
printf("\033[?1003h");
while ((ch = getch ()) != 'q')
{
count++;
if (ch == KEY_MOUSE)
{
MEVENT event;
assert (getmouse (&event) == OK);
mvprintw (0, 0, "Mouse Event!\n");
}
mvprintw (1, 1, "Event number %4d",count);
refresh();
}
endwin();
}
Дополнительная информация и предупреждение:
Эта программа на самом деле способна обнаруживать движение мыши ПОСЛЕ выполнения. Это можно отменить командой echo -e "\e[?1000h"
printf()
буферизуется строкой: библиотека C кэширует данные внутри, пока не появится новая строка. Чтобы исправить, используйтеprintf("\033[?1003h"); fflush(stdout);
. Точно так же добавьтеprintf("\033[?1000h"); fflush(stdout);
передendwin();
, чтобы восстановить поведение по умолчанию при выходе из программы. - person Nominal Animal   schedule 04.12.2018