关闭curses窗口后如何返回正常模式

时间:2011-12-01 10:16:55

标签: c curses

这是我的代码:

#include <ncurses.h>
#include <string.h>
int main() {
    char str[120];
    char c;
    while (1) {
        printf("%s", ">");
        scanf("%s", str);
        if (!strcmp(str, "open")) {
            initscr();
            c=getch();
            endwin();
            printf("from curses window %c\n",c);
        }
        printf("%s\n", str);
    }
    return 0;
}

我有一个while(1)循环,始终打印从屏幕上获取的内容。

如果输入“open”,它将打开一个curses窗口,并获得char。之后它将退出curses窗口(endwin()),并且仍然应该在while(1)循环中。

但我的问题是,在致电endwin()后,它不会回到正常的printf()/scanf()循环。

1 个答案:

答案 0 :(得分:0)

#include <stdio.h>
#include <curses.h>
#include <term.h>
#include <string.h>
#include <stdlib.h>

int main() {
    char str[120];
    char c;
    FILE *file_id;
    while (1) {
        printf("%s", ">");
        scanf("%s", str);
        if (!strcmp(str, "open")) {
            file_id = fopen("/dev/tty", "r+");
            SCREEN *termref = newterm(NULL, file_id, file_id);
            //cbreak();
            echo();
            keypad(stdscr, TRUE);
            getstr(str);
            delscreen(termref);
            printf("from curses window %s\n", str);
        }
        printf("%s\n", str);
    }
    return 0;
}

现在源代码升级到此,仍然有两个问题

1,打开和关闭一个术语后,它可以回到正常循环,但是当我按下回车键时,promt将不会在左侧对齐,它会是这样的,

user@linux>
           user@linux>
                      user@linux>

2,我可以再次键入“打开”,再次打开一个新术语,但新术语仍然与我第一次输入“打开”时创建的术语相同, 实际上,每次输入打开时,都会在同一个地方创建一个术语,这意味着首次打开后的命令将会消失。