summaryrefslogtreecommitdiff
path: root/src/if_py_both.h
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-10-19 15:18:44 +0200
committerBram Moolenaar <Bram@vim.org>2019-10-19 15:18:44 +0200
commitb98678a974914aaf1d00b575364c13a6446353bf (patch)
tree2a9a00300b93f1899fef5c410fcde4a908119461 /src/if_py_both.h
parent15ee567809a9808693163dd7c357ef0c172ecc9e (diff)
downloadvim-git-b98678a974914aaf1d00b575364c13a6446353bf.tar.gz
patch 8.1.2179: pressing "q" at the more prompt doesn't stop Python outputv8.1.2179
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.
Diffstat (limited to 'src/if_py_both.h')
-rw-r--r--src/if_py_both.h15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/if_py_both.h b/src/if_py_both.h
index aa44bf8e3..ee848f9f8 100644
--- 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;