Mercurial > vim
diff src/os_win32.c @ 11949:74e45c11b754 v8.0.0854
patch 8.0.0854: no redraw after terminal was closed
commit https://github.com/vim/vim/commit/e9c21aed6233185e7fbe1b462a0571c0e460a5a9
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Aug 3 20:44:48 2017 +0200
patch 8.0.0854: no redraw after terminal was closed
Problem: No redraw after terminal was closed.
Solution: Set typebuf_was_filled. (Yasuhiro Matsumoto, closes https://github.com/vim/vim/issues/1925, closes
#1924) Add function to check for messages even when input is
available.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Thu, 03 Aug 2017 20:45:04 +0200 |
parents | 3457728d1a58 |
children | 15ec6d5adf43 |
line wrap: on
line diff
--- a/src/os_win32.c +++ b/src/os_win32.c @@ -1400,10 +1400,11 @@ handle_focus_event(INPUT_RECORD ir) /* * Wait until console input from keyboard or mouse is available, * or the time is up. + * When "ignore_input" is TRUE even wait when input is available. * Return TRUE if something is available FALSE if not. */ static int -WaitForChar(long msec) +WaitForChar(long msec, int ignore_input) { DWORD dwNow = 0, dwEndTime = 0; INPUT_RECORD ir; @@ -1440,7 +1441,7 @@ WaitForChar(long msec) || g_nMouseClick != -1 #endif #ifdef FEAT_CLIENTSERVER - || input_available() + || (!ignore_input && input_available()) #endif ) return TRUE; @@ -1583,8 +1584,19 @@ WaitForChar(long msec) int mch_char_avail(void) { - return WaitForChar(0L); -} + return WaitForChar(0L, FALSE); +} + +# if defined(FEAT_TERMINAL) || defined(PROTO) +/* + * Check for any pending input or messages. + */ + int +mch_check_messages(void) +{ + return WaitForChar(0L, TRUE); +} +# endif #endif /* @@ -1614,7 +1626,7 @@ tgetch(int *pmodifiers, WCHAR *pch2) DWORD cRecords = 0; #ifdef FEAT_CLIENTSERVER - (void)WaitForChar(-1L); + (void)WaitForChar(-1L, FALSE); if (input_available()) return 0; # ifdef FEAT_MOUSE @@ -1681,7 +1693,7 @@ mch_inchar( if (time >= 0) { - if (!WaitForChar(time)) /* no character available */ + if (!WaitForChar(time, FALSE)) /* no character available */ return 0; } else /* time == -1, wait forever */ @@ -1693,7 +1705,7 @@ mch_inchar( * write the autoscript file to disk. Or cause the CursorHold event * to be triggered. */ - if (!WaitForChar(p_ut)) + if (!WaitForChar(p_ut, FALSE)) { #ifdef FEAT_AUTOCMD if (trigger_cursorhold() && maxlen >= 3) @@ -1723,7 +1735,7 @@ mch_inchar( /* Keep looping until there is something in the typeahead buffer and more * to get and still room in the buffer (up to two bytes for a char and * three bytes for a modifier). */ - while ((typeaheadlen == 0 || WaitForChar(0L)) + while ((typeaheadlen == 0 || WaitForChar(0L, FALSE)) && typeaheadlen + 5 <= TYPEAHEADLEN) { if (typebuf_changed(tb_change_cnt)) @@ -5721,7 +5733,7 @@ cursor_visible(BOOL fVisible) /* - * write `cbToWrite' bytes in `pchBuf' to the screen + * Write "cbToWrite" bytes in `pchBuf' to the screen. * Returns the number of bytes actually written (at least one). */ static DWORD @@ -5828,7 +5840,7 @@ mch_write( if (p_wd) { - WaitForChar(p_wd); + WaitForChar(p_wd, FALSE); if (prefix != 0) prefix = 1; } @@ -6120,7 +6132,7 @@ mch_delay( # endif Sleep((int)msec); else - WaitForChar(msec); + WaitForChar(msec, FALSE); #endif }