gpt4 book ai didi

c++ - 无法使用 ncurses 确定终端大小

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:19:20 26 4
gpt4 key购买 nike

我正在尝试处理调整大小信号 (SIGWINCH)

void Server::resizeSignalHandler(int a)
{
signal(SIGWINCH, SIG_IGN);

endwin();
initscr();
refresh();
clear();

int x,y;
getmaxyx(stdscr, y, x);

wmove(upScreen, 0, 0);
wmove(downScreen, y/2, 0);
wresize(upScreen, y/2, x);
wresize(downScreen, y/2, x);
wclear(upScreen);
wclear(downScreen);
waddstr(upScreen, "test1");
waddstr(downScreen, "test2");
wrefresh(upScreen);
wrefresh(downScreen);
refresh();

signal(SIGWINCH, Server::resizeSignalHandler);

}
Server::Server()
{
//ncurses screen initialization
initscr();

if (!upScreen) {
upScreen = newwin(0, 0, 1, 1);
}
if (!downScreen) {
downScreen = newwin(0, 0, 1, 1);
}
//adjusting screen when user resize terminal
signal(SIGWINCH, Server::resizeSignalHandler);

//configuring screens
Server::resizeSignalHandler(0);

waddstr(Server::upScreen, "lalfasdfsafd as");
waddstr(downScreen, "supreme!");
wrefresh(Server::upScreen);
wrefresh(downScreen);
}

当我调试这段代码时,在 resizeSignalHandler 中,var x,y 总是相同的(大小没有改变)。我还尝试使用 ioctl 确定大小,但没有任何改变。

我发现在我之前很多人都有这个问题 http://www.mail-archive.com/arch@archlinux.org/msg11253.html有时,他们解决了这个问题(更改/etc/profile ;O(原文如此!)),但有时却没有。是否有任何替代 mac os x 终端的方法,也许 ncurses 专用于 xterm 和类似的。

最佳答案

那是因为您使用 getmaxyx 获得的值是由监听 SIGWINCH 的信号处理程序自行更新的。您需要使用以下内容保存指向旧信号的指针:

old_callback = signal(SIGWINCH, Server::resizeSignalHandler);

然后在resizeSignalHandler中调用它:

old_callback(a);

关于c++ - 无法使用 ncurses 确定终端大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10204985/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com