Im trying to edit a program that capture user input. My intention is to add a function counting to a certain time. When it meet a timeout, a popup should be displayed. After that, the user should see back its previous shell/display. My problem is:
If the popup appear while the user are running vi, the display in that vi mode are hidden after the popup are destroyed.
Expectation: the user should have the same display as before the popup
Before the popup appear
After the popup destroyed
If the user are writing in a shell, it does not display the bash name (I do not know what its called. eg. fikrie@fikrie-VirtualBox:~/mysoftware/src$).
Expectation: the user should see the same display as before.
at the top line, the command (id) is displayed without bash name. I need to make the display same as the third line.
Im writing the code in C language and I'm using cdk library(ncurses) to do the popup. This is the function that create the popup.
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;
}
From what i read in the manual guide, the def_shell_mode() will save the prior terminal settings so they can be restored during the call to endwin(). I tested using that but it doesnt solve my problem. I did google on how to clear screen using C. From the result, its either use curse or termios. I dont think termios is a good approach because I want to let the user continue its previous session and not making a new one. So my only option is curses. Is there any function in ncurses that can do this?
EDIT: After a few days trying, I found out CDK is the one causing problem. So I change my code to use curses function instead. The idea to do it is here.
How do you clear console screen in C? How to clear screen from simple C program?