как вернуться в нормальный режим после закрытия окна проклятий - PullRequest
0 голосов
/ 01 декабря 2011

Вот мой код:

#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», он откроетпроклятие окна, и получите char.После этого он выйдет из окна проклятий (endwin()) и все еще должен находиться в цикле while(1).

Но моя проблема в том, что после вызова endwin() он не вернется к нормальному состояниюprintf()/scanf() петля.

1 Ответ

0 голосов
/ 02 декабря 2011
#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, после открытия и закрытия термина один раз, он может вернуться к нормальному циклу, но когда я нажимаю клавишу ввода, запрос не будет выравниваться по левой стороне, он будет выглядеть так,

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

2, я могу снова ввести «open», чтобы снова открыть новый термин, но новый термин все еще находится в том же местоположении, что и термин, созданный, когда я вводил «open» в первый раз, на самом деле, каждый раз, когда я вводю open, термин будет создаваться в одном и том же месте, что означает, что команда, стоящая за first open, исчезнет.

...