我正在编写一个ncurses
程序,并试图使其正确响应终端调整大小。虽然我可以在我的程序中正确读取终端尺寸,ncurses
但似乎无法正确处理新尺寸。这是一个(有点长)示例程序:
#include <ncurses.h>
#include <string.h>
#include <signal.h>
#include <sys/ioctl.h>
void handle_winch(int sig){
struct winsize w;
ioctl(0, TIOCGWINSZ, &w);
COLS = w.ws_col;
LINES = w.ws_row;
wresize(stdscr, LINES, COLS);
clear();
mvprintw(0, 0, "COLS = %d, LINES = %d", COLS, LINES);
for (int i = 0; i < COLS; i++)
mvaddch(1, i, '*');
refresh();
}
int main(int argc, char *argv[]){
initscr();
struct sigaction sa;
memset(&sa, 0, sizeof(struct sigaction));
sa.sa_handler = handle_winch;
sigaction(SIGWINCH, &sa, NULL);
while(getch() != 27) {}
endwin();
return 0;
}
如果您运行它,您可以看到正确检索到终端尺寸。但是应该在屏幕上绘制*
-characters 的第二行不起作用。尝试水平调整窗口大小使其变大,*
s 的行不会变大。
这里有什么问题?我知道可以暂时离开诅咒模式,但我更喜欢更清洁的解决方案。谢谢!