changeset 18370:026034963159 v8.1.2179

patch 8.1.2179: pressing "q" at the more prompt doesn't stop Python output Commit: https://github.com/vim/vim/commit/b98678a974914aaf1d00b575364c13a6446353bf Author: Bram Moolenaar <Bram@vim.org> Date: Sat Oct 19 15:18:44 2019 +0200 patch 8.1.2179: pressing "q" at the more prompt doesn't stop Python output Problem: Pressing "q" at the more prompt doesn't stop Python output. (Daniel Hahler) Solution: Check for got_int in writer(). (closes #5053) Also do this for Lua.
author Bram Moolenaar <Bram@vim.org>
date Sat, 19 Oct 2019 15:30:04 +0200
parents dbe92b7679db
children d37561c8c48b
files src/if_lua.c src/if_py_both.h src/version.c
diffstat 3 files changed, 14 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/if_lua.c
+++ b/src/if_lua.c
@@ -1612,7 +1612,8 @@ luaV_print(lua_State *L)
 	lua_pop(L, 1);
     }
     luaL_pushresult(&b);
-    luaV_msg(L);
+    if (!got_int)
+	luaV_msg(L);
     return 0;
 }
 
--- a/src/if_py_both.h
+++ b/src/if_py_both.h
@@ -375,9 +375,13 @@ writer(writefn fn, char_u *str, PyInt n)
 	PythonIO_Flush();
     old_fn = fn;
 
-    /* Write each NL separated line.  Text after the last NL is kept for
-     * writing later. */
-    while (n > 0 && (ptr = memchr(str, '\n', n)) != NULL)
+    // Write each NL separated line.  Text after the last NL is kept for
+    // writing later.
+    // For normal messages: Do not output when "got_int" was set.  This avoids
+    // a loop gone crazy flooding the terminal with messages.  Also for when
+    // "q" is pressed at the more-prompt.
+    while (n > 0 && (ptr = memchr(str, '\n', n)) != NULL
+					  && (fn == (writefn)emsg || !got_int))
     {
 	PyInt len = ptr - str;
 
@@ -392,8 +396,9 @@ writer(writefn fn, char_u *str, PyInt n)
 	io_ga.ga_len = 0;
     }
 
-    /* Put the remaining text into io_ga for later printing. */
-    if (n > 0 && ga_grow(&io_ga, (int)(n + 1)) == OK)
+    // Put the remaining text into io_ga for later printing.
+    if (n > 0 && (fn == (writefn)emsg || !got_int)
+					&& ga_grow(&io_ga, (int)(n + 1)) == OK)
     {
 	mch_memmove(((char *)io_ga.ga_data) + io_ga.ga_len, str, (size_t)n);
 	io_ga.ga_len += (int)n;
--- a/src/version.c
+++ b/src/version.c
@@ -742,6 +742,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2179,
+/**/
     2178,
 /**/
     2177,