diff options
author | Ghjuvan Lacambre <code@lacamb.re> | 2019-08-12 14:21:15 +0200 |
---|---|---|
committer | Daniel Hahler <git@thequod.de> | 2019-08-12 14:21:15 +0200 |
commit | 2037028b50af12e628bd966882baa8a7ff9844fe (patch) | |
tree | 356403764853bf92eb351b828c20f5fdd5bc8bc2 /src | |
parent | ad4eb18e43d56d7ec93770af674418451daae694 (diff) | |
download | rneovim-2037028b50af12e628bd966882baa8a7ff9844fe.tar.gz rneovim-2037028b50af12e628bd966882baa8a7ff9844fe.tar.bz2 rneovim-2037028b50af12e628bd966882baa8a7ff9844fe.zip |
ex_getln.c: fix compute_cmdrow() not resetting lines_left (#10749)
Before this commit, when `inccomand` was set to `nosplit`, multi-line
substitutions collapsed the command-line.
This happened because when ex_getln.c:cursorcmd() computed a msg_row, it
was given a cmdline_row one line too high. This happened because
message.c:msg_puts_display() was supposed to decrement cmdline_row but
didn't, because of the `msg_no_more && lines_left == 0` check placed
just before the decrementation part in msg_puts_display's while loop.
Every time msg_puts_display writes a line, it decreases `lines_left` (a
variable used to know how many lines are left for prompts). Since
redrawcommandline() did not reset `lines_left` between calls to
msg_puts_display, every time a character was pressed, `lines_left` was
decremented. This meant that once the user pressed COLUMNS+ROWS numbers
of characters, `lines_left` would reach 0 and prevent msg_row from being
decremented.
It makes sense to fix setting `lines_left` to `cmdline_row` in
`compute_cmdrow` ; after all, computing where the command line row
should be placed is equivalent to computing how many `lines_left` of
output there are left.
Closes #8254.
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/ex_getln.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c index 38432a34db..17292dfde1 100644 --- a/src/nvim/ex_getln.c +++ b/src/nvim/ex_getln.c @@ -3483,6 +3483,7 @@ void compute_cmdrow(void) cmdline_row = wp->w_winrow + wp->w_height + wp->w_status_height; } + lines_left = cmdline_row; } static void cursorcmd(void) |