From 0453023f7b67717eb66bc8923ba74a0adb90bb66 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Mon, 13 May 2019 14:16:43 -0700 Subject: [PATCH] Don't service ioport completions if data is available on stdin This defers certain autosuggestions and syntax highlighting until after large pastes are complete. --- src/input_common.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/input_common.cpp b/src/input_common.cpp index fb82b1842..dc89f2b75 100644 --- a/src/input_common.cpp +++ b/src/input_common.cpp @@ -134,13 +134,6 @@ static char_event_t readb() { } } - if (ioport > 0 && FD_ISSET(ioport, &fdset)) { - iothread_service_completion(); - if (auto mc = s_lookahead->pop_evt()) { - return *mc; - } - } - if (FD_ISSET(STDIN_FILENO, &fdset)) { unsigned char arr[1]; if (read_blocked(0, arr, 1) != 1) { @@ -151,6 +144,15 @@ static char_event_t readb() { // We read from stdin, so don't loop. return arr[0]; } + + // Check for iothread completions only if there is no data to be read from the stdin. + // This gives priority to the foreground. + if (ioport > 0 && FD_ISSET(ioport, &fdset)) { + iothread_service_completion(); + if (auto mc = s_lookahead->pop_evt()) { + return *mc; + } + } } } }