From 8e21d5de92c4c85f55bbef34b6ffadd40a37e3db Mon Sep 17 00:00:00 2001 From: Kurtis Rader Date: Fri, 17 Jun 2016 13:08:25 -0700 Subject: 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 --- src/screen.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src/screen.cpp') 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 || -- cgit v1.2.3