diff options
author | Kurtis Rader <krader@skepticism.us> | 2016-06-17 13:08:25 -0700 |
---|---|---|
committer | Kurtis Rader <krader@skepticism.us> | 2016-06-18 19:33:54 -0700 |
commit | 8e21d5de92c4c85f55bbef34b6ffadd40a37e3db (patch) | |
tree | 73194959e176a000dd2e73427cab486c2a76cbd0 /src/screen.cpp | |
parent | f04644f749f54a9773884a61e76540c53bf0d42b (diff) |
deal with broken ttys on MS Windows
The tty device timestamps on MS Windows aren't usable because they're always
the current time. So fish can't use them to decide if the entire prompt needs
to be repainted.
Fixes #2859
Diffstat (limited to 'src/screen.cpp')
-rw-r--r-- | src/screen.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/screen.cpp b/src/screen.cpp index fc5c927c..a9d9ddcf 100644 --- a/src/screen.cpp +++ b/src/screen.cpp @@ -347,12 +347,18 @@ static void s_save_status(screen_t *s) { static void s_check_status(screen_t *s) { fflush(stdout); fflush(stderr); + if (!has_working_tty_timestamps) { + // We can't reliably determine if the terminal has been written to behind our back so we + // just assume that hasn't happened and hope for the best. This is important for multi-line + // prompts to work correctly. + return; + } fstat(1, &s->post_buff_1); fstat(2, &s->post_buff_2); - int changed = (s->prev_buff_1.st_mtime != s->post_buff_1.st_mtime) || - (s->prev_buff_2.st_mtime != s->post_buff_2.st_mtime); + bool changed = (s->prev_buff_1.st_mtime != s->post_buff_1.st_mtime) || + (s->prev_buff_2.st_mtime != s->post_buff_2.st_mtime); #if defined HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC changed = changed || |