diff --git a/sdn.cpp b/sdn.cpp index ad72f98..9a1f5c8 100644 --- a/sdn.cpp +++ b/sdn.cpp @@ -814,8 +814,7 @@ int main (int argc, char *argv[]) { } locale::global (locale ("")); - if (!initscr () || cbreak () == ERR || noecho () == ERR || nonl () == ERR - || halfdelay (1) == ERR || keypad (stdscr, TRUE) == ERR) { + if (!initscr () || cbreak () == ERR || noecho () == ERR || nonl () == ERR) { cerr << "cannot initialize screen" << endl; return 1; } @@ -825,6 +824,14 @@ int main (int argc, char *argv[]) { g.start_dir = g.cwd; update (); + // Invoking keypad() earlier would make ncurses flush its output buffer, + // which would worsen start-up flickering + if (halfdelay (1) == ERR || keypad (stdscr, TRUE) == ERR) { + endwin (); + cerr << "cannot initialize screen" << endl; + return 1; + } + wint_t c; while (1) { inotify_check ();