vim-patch:8.0.1705: when making a vertical split the mode message isn't updated

Problem:    When making a vertical split the mode message isn't always
            updated, "VISUAL" remains. (Alexei Averchenko)
Solution:   Only reset clear_cmdline when filling all columns of the last
            screen line. (Tom M. closes vim/vim#2611)
5bab555c2f
This commit is contained in:
Jan Edmund Lazo 2018-07-15 09:45:38 -04:00
parent a8ff55d50e
commit 1b3cbb39a1
2 changed files with 26 additions and 1 deletions

View File

@ -5816,7 +5816,8 @@ void screen_fill(int start_row, int end_row, int start_col, int end_col, int c1,
// TODO(bfredl): The relevant caller should do this
if (row == Rows - 1) { // overwritten the command line
redraw_cmdline = true;
if (c1 == ' ' && c2 == ' ') {
if (start_col == 0 && end_col == Columns
&& c1 == ' ' && c2 == ' ' && attr == 0) {
clear_cmdline = false; // command line has been cleared
}
if (start_col == 0) {

View File

@ -466,4 +466,28 @@ func Test_access_freed_mem()
bwipe xxx
endfunc
func Test_visual_cleared_after_window_split()
new | only!
let smd_save = &showmode
set showmode
let ls_save = &laststatus
set laststatus=1
call setline(1, ['a', 'b', 'c', 'd', ''])
norm! G
exe "norm! kkvk"
redraw
exe "norm! \<C-W>v"
redraw
" check if '-- VISUAL --' disappeared from command line
let columns = range(1, &columns)
let cmdlinechars = map(columns, 'nr2char(screenchar(&lines, v:val))')
let cmdline = join(cmdlinechars, '')
let cmdline_ltrim = substitute(cmdline, '^\s*', "", "")
let mode_shown = substitute(cmdline_ltrim, '\s*$', "", "")
call assert_equal('', mode_shown)
let &showmode = smd_save
let &laststatus = ls_save
bwipe!
endfunc
" vim: shiftwidth=2 sts=2 expandtab