ncursesw 导致奇怪的行为

ncursesw causing weird behaviour

在 WSL2 上,我使用本教程网站中给出的第一个示例代码:https://tldp.org/HOWTO/NCURSES-Programming-HOWTO/panels.html

代码:

#include <panel.h>

int main()
{   WINDOW *my_wins[3];
    PANEL  *my_panels[3];
    int lines = 10, cols = 40, y = 2, x = 4, i;
    initscr();
    cbreak();
    noecho();

    /* Create windows for the panels */
    my_wins[0] = newwin(lines, cols, y, x);
    my_wins[1] = newwin(lines, cols, y + 1, x + 5);
    my_wins[2] = newwin(lines, cols, y + 2, x + 10);

    /* 
     * Create borders around the windows so that you can see the effect
     * of panels
     */
    for(i = 0; i < 3; ++i)
        box(my_wins[i], 0, 0);

    /* Attach a panel to each window */     /* Order is bottom up */
    my_panels[0] = new_panel(my_wins[0]);   /* Push 0, order: stdscr-0 */
    my_panels[1] = new_panel(my_wins[1]);   /* Push 1, order: stdscr-0-1 */
    my_panels[2] = new_panel(my_wins[2]);   /* Push 2, order: stdscr-0-1-2 */

    /* Update the stacking order. 2nd panel will be on top */
    update_panels();

    /* Show it on the screen */
    doupdate();
    
    getch();
    endwin();
}

当我 运行 带有标志 -lpanel -ncurses 的代码时,它工作正常,如下所示:

当我 运行 带有标志 -lpanel -ncursesw 的代码时,它不能正常工作:

例子说明了两个问题:

  • -lpanel-lncursesw 混合使用(不会起作用,因为包含字符和属性的类型的大小不同)。
  • 你应该使用-lpanelw.
  • 没有调用 setlocale 来使画线工作可移植。