创建部分屏幕外的诅咒窗口

Creating partly offscreen ncurses window

本文关键字:诅咒 窗口 屏幕 创建部      更新时间:2023-10-16

我对在终端中创建部分可见的ncurses窗口感兴趣。当我使新的ncurses窗口与右侧或底部终端窗口边框相交时,它会正确显示。例如工作代码:

newwin(15, 12, LINES - 7, COLS - 6);

但是当我尝试使 ncurses 窗口与终端的左/上边框相交时,没有任何反应(ncurses 窗口没有绘制)。完整例如不工作的代码:

#include <ncurses.h>
int main()
{
    initscr();
    cbreak();
    refresh();
    WINDOW* ncursesWindow = newwin(15, 12, -7, -6);
    wborder(ncursesWindow, '*', '*', '*', '*', '*', '*', '*', '*');
    wrefresh(ncursesWindow);
    int command = getch();
    endwin();
    return 0;
}

问题是如何使最后一个代码示例工作。

这使得窗口在屏幕外启动。 newwin(见源代码)和相关函数的手册页说

X/Open 未定义任何错误条件。 在此实现中


newwin如果其起始纵坐标之一为负数,或者行数或列数为负数,则将失败。

尽管 X/Open "没有定义错误条件",但这是大多数其他实现的行为方式(检查 Solaris SVr4 curses,NetBSD)。 PDCurses似乎允许它。 Solaris xpg4 curses 做了一些奇怪的事情,但要看到这一点,你必须阅读源代码。