Terminal 如何在QNX中检测来自ncurses的屏幕调整事件?

Terminal 如何在QNX中检测来自ncurses的屏幕调整事件?,terminal,ncurses,uart,qnx,Terminal,Ncurses,Uart,Qnx,我无法配置为使用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

我无法配置为使用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;
FILE*fcons=fopen(“/dev/ser1”,“r+”);
屏幕*术语=新术语(“xterm-r5”,fcons,fcons);
int y=0,x=0;
//如果(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(主_scr,1,9,3,2);
光标_scr=newwin(1,60,3,6);
输出scr=子温(主scr,18,76,5,2);
键盘(光标_scr,真);
int f=鼠标掩码(所有鼠标事件,NULL);
chtype temp_ch=0;
while(键大小==temp\u ch)
温度=wgetch(光标=scr);
返回0;

像这样的普通串行端口连接不会发送
信号。在其他配置中,例如,
telnet
,这是由于NAWS(关于窗口大小的协商——我不这么认为)造成的。您的应用程序可以通过执行程序所做的操作,再加上一点,例如

  • 保存光标位置
  • 将光标移动到非常远的右下角
  • 询问终端光标的实际位置
  • 等待响应,以获得实际屏幕大小
  • 使用系统调用设置终端的屏幕大小
  • 恢复光标位置
  • 向自己发送
    SIGWINCH

与调整大小不同,这将在程序内部完成,因此必须保存/恢复光标位置(以避免混淆ncurses)。请记住,ncurses已将终端设置为原始模式,因此不需要进行部分初始化。

奇怪的是,鼠标单击对我有效。但是捕捉终端的大小调整是不起作用的。虽然这两个事件都是在使用鼠标时发生的。但resize-events与鼠标无关(它们的处理方式也不相同)。ncurses要求PuTTY在鼠标事件上发送转义序列,但没有为终端调整大小时发送转义定义协议。