ncurses определяют, когда мышь покидает окно - PullRequest
0 голосов
/ 01 февраля 2019

Когда я исследую взаимодействие мыши с ncurses, я вижу много вариантов, но не вижу способа определить, когда мышь покинула окно программы.Это окно эмулятора терминала, а не окно ncurses.

1 Ответ

0 голосов
/ 01 февраля 2019

Этого нет в репертуаре интерфейса мыши ncurses, но для некоторых терминалов вы можете настроить их на отправку управляющих последовательностей xterm для выхода и входа в окно, которые ваша программаможет считывать либо побайтово, используя getch, либо используя define_key, чтобы связать ответы как "функциональную клавишу".

Последовательности управления XTerm списки в разделе FocusIn / FocusOut :

FocusIn / FocusOut можно комбинировать с любыми событиями мыши, поскольку он использует другой протокол.Если установлено, xterm отправляет CSI I, когда терминал получает фокус, и CSI O когда он теряет фокус.

Это включается, например, с помощью

CSI ? Pm h
          DEC Private Mode Set (DECSET).
...
            Ps = 1 0 0 4  -> Send FocusIn/FocusOut events, xterm.

,

printf("\033[?1004h");
fflush(stdout);

(некоторые другие терминалы реализуют это, но так какони не документируют свое поведение, вам придется поэкспериментировать, чтобы выяснить, относится ли это к терминалу, который вы используете).

В ncurses вы можете связать ответы с define_key, например,

#define KEY_FOCUS_IN     1001
#define KEY_FOCUS_OUT    1002

define_key("\033[I", KEY_FOCUS_IN);
define_key("\033[O", KEY_FOCUS_OUT);

и (если включено keypad), определить эти значения в вашей программе как возвращаемое значение из getch.

...