Этого нет в репертуаре интерфейса мыши 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
.