Fix gstat's interactive f and q commands
curses and libedit don't play well together. After last year's libedit upgrade in head, they play even less well together. This change resets some curses settings after they get screwed up by libedit calls. Without it, gstat's interactive commands require an extra "enter", screw up the terminal on exit, and screw up the display if the user enters an invalid filter string. PR: 204852 Submitted by: Keith White Reviewed by: pfg Approved by: re (gjb) MFC after: 4 weeks Sponsored by: Spectra Logic Corp Differential Revision: https://reviews.freebsd.org/D6934
This commit is contained in:
parent
66c00e9efb
commit
3185f0f02b
@ -167,20 +167,6 @@ main(int argc, char **argv)
|
||||
if (sq == NULL)
|
||||
err(1, "geom_stats_snapshot()");
|
||||
if (!flag_b) {
|
||||
/* Setup curses */
|
||||
initscr();
|
||||
start_color();
|
||||
use_default_colors();
|
||||
pair_content(0, &cf, &cb);
|
||||
init_pair(1, COLOR_GREEN, cb);
|
||||
init_pair(2, COLOR_MAGENTA, cb);
|
||||
init_pair(3, COLOR_RED, cb);
|
||||
cbreak();
|
||||
noecho();
|
||||
nonl();
|
||||
nodelay(stdscr, 1);
|
||||
intrflush(stdscr, FALSE);
|
||||
keypad(stdscr, TRUE);
|
||||
/* Setup libedit */
|
||||
hist = history_init();
|
||||
if (hist == NULL)
|
||||
@ -195,6 +181,20 @@ main(int argc, char **argv)
|
||||
el_set(el, EL_PROMPT, el_prompt);
|
||||
if (f_s[0] != '\0')
|
||||
history(hist, &hist_ev, H_ENTER, f_s);
|
||||
/* Setup curses */
|
||||
initscr();
|
||||
start_color();
|
||||
use_default_colors();
|
||||
pair_content(0, &cf, &cb);
|
||||
init_pair(1, COLOR_GREEN, cb);
|
||||
init_pair(2, COLOR_MAGENTA, cb);
|
||||
init_pair(3, COLOR_RED, cb);
|
||||
cbreak();
|
||||
noecho();
|
||||
nonl();
|
||||
nodelay(stdscr, 1);
|
||||
intrflush(stdscr, FALSE);
|
||||
keypad(stdscr, TRUE);
|
||||
}
|
||||
geom_stats_snapshot_timestamp(sq, &tq);
|
||||
for (quit = 0; !quit;) {
|
||||
@ -410,12 +410,15 @@ main(int argc, char **argv)
|
||||
if ((p = strchr(tmp_f_s, '\n')) != NULL)
|
||||
*p = '\0';
|
||||
/*
|
||||
* We have to clear since we messed up
|
||||
* Fix the terminal. We messed up
|
||||
* curses idea of the screen by using
|
||||
* libedit.
|
||||
*/
|
||||
clear();
|
||||
refresh();
|
||||
cbreak();
|
||||
noecho();
|
||||
nonl();
|
||||
if (regcomp(&tmp_f_re, tmp_f_s, REG_EXTENDED)
|
||||
!= 0) {
|
||||
move(0, 0);
|
||||
@ -440,8 +443,8 @@ main(int argc, char **argv)
|
||||
}
|
||||
|
||||
if (!flag_b) {
|
||||
endwin();
|
||||
el_end(el);
|
||||
endwin();
|
||||
}
|
||||
exit(EX_OK);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user