aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/screen.cpp
diff options
context:
space:
mode:
authorGravatar Kurtis Rader <krader@skepticism.us>2016-06-17 13:08:25 -0700
committerGravatar Kurtis Rader <krader@skepticism.us>2016-06-18 19:33:54 -0700
commit8e21d5de92c4c85f55bbef34b6ffadd40a37e3db (patch)
tree73194959e176a000dd2e73427cab486c2a76cbd0 /src/screen.cpp
parentf04644f749f54a9773884a61e76540c53bf0d42b (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.cpp10
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 ||