Как обнаружить события изменения размера экрана, поступающие от ncurses в QNX? - PullRequest
0 голосов
/ 13 февраля 2019

Не могу настроить получение событий об изменении размера терминала с помощью ncurses QNX Momentics.Я использую Putyy в качестве терминала, и данные передаются через COM-порт.

У меня вопрос, как реализовать прием изменений экрана при использовании удаленного терминала?

FILE* fcons = fopen("/dev/ser1", "r+");
SCREEN* term = newterm("xterm-r5", fcons, fcons);
int y = 0, x = 0;
//if(y < 24 || x < 80)
//  resizeterm(24, 80);
flushinp();
main_scr = newwin(24, 80, 0, 0);
head_scr = subwin(main_scr, 3, 80, 0, 0);
prompt_scr = subwin(main_scr, 1, 9, 3, 2);
cursor_scr = newwin(1, 60, 3, 6);
output_scr = subwin(main_scr, 18, 76, 5, 2);
keypad(cursor_scr, TRUE);

int f = mousemask(ALL_MOUSE_EVENTS, NULL);

chtype temp_ch = 0;
while(KEY_RESIZE == temp_ch)
   temp_ch = wgetch(cursor_scr);
return 0;

1 Ответ

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

Простое соединение с последовательным портом, как это, не отправит SIGWINCH.В других конфигурациях, например, telnet, это делается в результате NAWS (переговоры о размере окна - я не видит дубликат ).Ваше приложение может опросить это, выполнив то, что делает программа resize, плюс еще немного, например,

  • сохранить позицию курсора
  • переместить курсор в очень дальний правый нижний угол
  • спросить терминал, где на самом деле находится курсор
  • дождаться ответа, чтобы получить фактический размер экрана
  • установить размер экрана терминала с помощью системного вызова
  • восстановить позицию курсора
  • отправить SIGWINCH себе

В отличие от resize,это будет сделано внутри вашей программы, поэтому придется сохранять / восстанавливать позицию курсора (чтобы не путать ncurses).Помните, что ncurses установил для терминала raw mode , поэтому часть инициализации не понадобится.

...