在使用C调用CDKpopup之前保存显示

时间:2015-04-14 09:03:58

标签: c terminal ncurses

我正在尝试编辑捕获用户输入的程序。我的目的是添加一个计算到某个时间的函数。当它遇到超时时,应显示一个弹出窗口。之后,用户应该看到它之前的shell / display。我的问题是:

如果在用户运行vi时出现弹出窗口,则在弹出窗口被破坏后隐藏该vi模式下的显示。

期望:用户应具有与弹出窗口之前相同的显示

before popup 弹出窗口出现之前

after popup 弹出窗口被破坏后

如果用户正在写一个shell,它不会显示 bash名称(我不知道它叫什么。例如。 fikrie @fikrie-Vi​​rtualBox:〜/ mysoftware / SRC $ )。

期望:用户应该看到与以前相同的显示。

does not display bash name 在顶行,显示命令(id)而没有bash名称。我需要使显示与第三行相同。

我用C语言编写代码,我正在使用cdk库(ncurses)来执行弹出窗口。这是创建弹出窗口的函数。

int call_warning(struct tm *warning_display)
{
    char *mesg[4];
    WINDOW *cursesWin;
    CDKSCREEN *cdkscreen;
    char *buttons[1]  = { "[ OK ]" };
    char enddatetime[1024];

    strftime(enddatetime, sizeof(enddatetime), "%d-%m-%Y %I:%M:%S%p", warning_display);

    mesg[0] = "<C>----------------------";
    mesg[1] = "<C>Your timeout is near";
    mesg[2] = enddatetime;
    mesg[3] = "<C>----------------------";

    //I have tried using def_shell_mode() here
    cursesWin = initscr();
    cdkscreen = initCDKScreen(cursesWin);
    initCDKColor();

    while (1) {
            popupDialogWithColor(cdkscreen, mesg, 4, buttons, 1, "</2>");
            destroyCDKScreen(cdkscreen);
            werase(cursesWin);
            wrefresh(cursesWin);
            endCDK();
            endwin();
            break;
    }
    //I tried using reset_shell_mode() here and removing system("clear");
    system("clear"); //tried using refresh() as well. Didnt do the job
    return 0;
}

根据我在手册指南中阅读的内容,def_shell_mode()将保存先前的终端设置,以便在调用endwin()期间恢复它们。我测试使用它,但它没有解决我的问题。我确实谷歌如何使用C清除屏幕。从结果,它使用诅咒或termios。我不认为termios是一个很好的方法,因为我想让用户继续其前一个会话而不是新的会话。所以我唯一的选择是诅咒。在ncurses中是否有任何可以执行此操作的功能?

编辑:经过几天的尝试,我发现CDK是导致问题的原因之一。所以我改变我的代码来改为使用curses函数。这样做的想法是here

How do you clear console screen in C? How to clear screen from simple C program?

0 个答案:

没有答案