Merge pull request #19587 from Shougo/vim-9.0.0114

vim-patch:9.0.{0114,0115,0118}
This commit is contained in:
zeertzjq 2022-07-31 19:13:45 +08:00 committed by GitHub
commit 380417c1dd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 99 additions and 30 deletions

View File

@ -1314,14 +1314,14 @@ A jump table for the options with a short description can be found at |Q_op|.
*'cmdheight'* *'ch'*
'cmdheight' 'ch' number (default 1)
global
global or local to tab page
Number of screen lines to use for the command-line. Helps avoiding
|hit-enter| prompts.
The value of this option is stored with the tab page, so that each tab
page can have a different value.
When 'cmdheight' is zero, it disables echo area and all outputs need
|hit-enter| prompt.
When 'cmdheight' is zero, there is no command-line unless it is being
used. Any messages will cause the |hit-enter| prompt.
*'cmdwinheight'* *'cwh'*
'cmdwinheight' 'cwh' number (default 7)
@ -4850,7 +4850,7 @@ A jump table for the options with a short description can be found at |Q_op|.
If 'rulerformat' is set, it will determine the contents of the ruler.
Each window has its own ruler. If a window has a status line, the
ruler is shown there. If a window doesn't have a status line and
'cmdheight' is 0, the ruler is not shown. Otherwise it is shown in
'cmdheight' is zero, the ruler is not shown. Otherwise it is shown in
the last line of the screen. If the statusline is given by
'statusline' (i.e. not empty), this option takes precedence over
'ruler' and 'rulerformat'.
@ -5559,7 +5559,7 @@ A jump table for the options with a short description can be found at |Q_op|.
global
Show (partial) command in the last line of the screen. Set this
option off if your terminal is slow.
The option is disabled if 'cmdheight' is 0.
The option has no effect when 'cmdheight' is zero.
In Visual mode the size of the selected area is shown:
- When selecting characters within a line, the number of characters.
If the number of bytes is different it is also displayed: "2-6"
@ -5606,7 +5606,7 @@ A jump table for the options with a short description can be found at |Q_op|.
global
If in Insert, Replace or Visual mode put a message on the last line.
The |hl-ModeMsg| highlight group determines the highlighting.
The option is disabled if 'cmdheight' is 0.
The option has no effect when 'cmdheight' is zero.
*'showtabline'* *'stal'*
'showtabline' 'stal' number (default 1)

View File

@ -3669,7 +3669,7 @@ static int do_sub(exarg_T *eap, proftime_T timeout, long cmdpreview_ns, handle_T
}
}
bool cmdheight0 = !ui_has_messages();
const bool cmdheight0 = !ui_has_messages();
if (cmdheight0) {
// If cmdheight is 0, cmdheight must be set to 1 when we enter command line.
set_option_value("ch", 1L, NULL, 0);

View File

@ -689,12 +689,22 @@ static void finish_incsearch_highlighting(int gotesc, incsearch_state_T *s, bool
/// @param init_ccline clear ccline first
static uint8_t *command_line_enter(int firstc, long count, int indent, bool init_ccline)
{
bool cmdheight0 = !ui_has_messages();
const bool cmdheight0 = !ui_has_messages();
if (cmdheight0) {
// If cmdheight is 0, cmdheight must be set to 1 when we enter command line.
const long save_so = lastwin->w_p_so;
// If cmdheight is 0, cmdheight must be set to 1 when we enter the
// command line. Set "made_cmdheight_nonzero" and reset 'scrolloff' to
// avoid scrolling the last window.
made_cmdheight_nonzero = true;
lastwin->w_p_so = 0;
set_option_value("ch", 1L, NULL, 0);
update_screen(VALID); // redraw the screen NOW
made_cmdheight_nonzero = false;
lastwin->w_p_so = save_so;
}
// can be invoked recursively, identify each level
@ -991,11 +1001,14 @@ theend:
}
if (cmdheight0) {
made_cmdheight_nonzero = true;
// Restore cmdheight
set_option_value("ch", 0L, NULL, 0);
// Redraw is needed for command line completion
redraw_all_later(CLEAR);
made_cmdheight_nonzero = false;
}
return p;

View File

@ -1084,4 +1084,7 @@ EXTERN char windowsVersion[20] INIT(= { 0 });
EXTERN int exit_need_delay INIT(= 0);
// Set when 'cmdheight' is changed from zero to one temporarily.
EXTERN bool made_cmdheight_nonzero INIT(= false);
#endif // NVIM_GLOBALS_H

View File

@ -1390,7 +1390,7 @@ void msg_start(void)
need_fileinfo = false;
}
bool no_msg_area = !ui_has_messages();
const bool no_msg_area = !ui_has_messages();
if (need_clr_eos || (no_msg_area && redrawing_cmdline)) {
// Halfway an ":echo" command and getting an (error) message: clear

View File

@ -893,7 +893,7 @@ int do_record(int c)
{
char_u *p;
static int regname;
static bool change_cmdheight = false;
static bool changed_cmdheight = false;
yankreg_T *old_y_previous;
int retval;
@ -907,13 +907,15 @@ int do_record(int c)
showmode();
regname = c;
retval = OK;
if (!ui_has_messages()) {
// Enable macro indicator temporary
// Enable macro indicator temporarily
set_option_value("ch", 1L, NULL, 0);
update_screen(VALID);
change_cmdheight = true;
changed_cmdheight = true;
}
apply_autocmds(EVENT_RECORDINGENTER, NULL, NULL, false, curbuf);
}
} else { // stop recording
@ -936,15 +938,6 @@ int do_record(int c)
(void)tv_dict_add_str(dict, S_LEN("regname"), buf);
tv_dict_set_keys_readonly(dict);
if (change_cmdheight) {
// Restore cmdheight
set_option_value("ch", 0L, NULL, 0);
redraw_all_later(CLEAR);
change_cmdheight = false;
}
// Get the recorded key hits. K_SPECIAL will be escaped, this
// needs to be removed again to put it in a register. exec_reg then
// adds the escaping back later.
@ -968,6 +961,12 @@ int do_record(int c)
y_previous = old_y_previous;
}
if (changed_cmdheight) {
// Restore cmdheight
set_option_value("ch", 0L, NULL, 0);
redraw_all_later(CLEAR);
}
}
return retval;
}

View File

@ -6501,7 +6501,7 @@ static void win_redr_ruler(win_T *wp, bool always)
bool is_stl_global = global_stl_height() > 0;
static bool did_show_ext_ruler = false;
// If 'ruler' off or redrawing disabled, don't do anything
// If 'ruler' off, don't do anything
if (!p_ru) {
return;
}

View File

@ -346,7 +346,7 @@ func Test_CompleteDone_modify()
\ 'user_data': '',
\ }
let v:completed_item = value
call assert_equal(v:completed_item, value)
call assert_equal(value, v:completed_item)
endfunc
func CompleteTest(findstart, query)

View File

@ -316,4 +316,60 @@ func Test_fileinfo_after_echo()
call delete('b.txt')
endfunc
func Test_cmdheight_zero()
set cmdheight=0
set showcmd
redraw!
echo 'test echo'
call assert_equal(116, screenchar(&lines, 1))
redraw!
echomsg 'test echomsg'
call assert_equal(116, screenchar(&lines, 1))
redraw!
call feedkeys(":ls\<CR>", "xt")
call assert_equal(':ls', Screenline(&lines - 1))
redraw!
let char = getchar(0)
call assert_match(char, 0)
" Check change/restore cmdheight when macro
call feedkeys("qa", "xt")
call assert_equal(1, &cmdheight)
call feedkeys("q", "xt")
call assert_equal(0, &cmdheight)
call setline(1, 'somestring')
call feedkeys("y", "n")
%s/somestring/otherstring/gc
call assert_equal('otherstring', getline(1))
call feedkeys("g\<C-g>", "xt")
call assert_match(
\ 'Col 1 of 11; Line 1 of 1; Word 1 of 1',
\ Screenline(&lines))
" Check split behavior
for i in range(1, 10)
split
endfor
only
call assert_equal(0, &cmdheight)
" Check that pressing ":" should not scroll a window
" Check for what patch 9.0.0115 fixes
botright 10new
call setline(1, range(12))
7
call feedkeys(":\"\<C-R>=line('w0')\<CR>\<CR>", "xt")
call assert_equal('"1', @:)
bwipe!
set cmdheight&
set showcmd&
endfunc
" vim: shiftwidth=2 sts=2 expandtab

View File

@ -1390,11 +1390,9 @@ func Test_win_move_statusline()
call assert_equal(h0, winheight(0))
call assert_equal(1, &cmdheight)
endfor
" Nvim supports cmdheight=0
" supports cmdheight=0
set cmdheight=0
call assert_true(win_move_statusline(0, 1))
"call assert_equal(h0, winheight(0))
"call assert_equal(1, &cmdheight)
call assert_equal(h0 + 1, winheight(0))
call assert_equal(0, &cmdheight)
set cmdheight&

View File

@ -5555,7 +5555,6 @@ static void frame_setheight(frame_T *curfrp, int height)
}
if (curfrp->fr_parent == NULL) {
// topframe: can only change the command line
if (height > ROWS_AVAIL) {
// If height is greater than the available space, try to create space for
// the frame by reducing 'cmdheight' if possible, while making sure
@ -6307,7 +6306,8 @@ void win_set_inner_size(win_T *wp)
// There is no point in adjusting the scroll position when exiting. Some
// values might be invalid.
if (!exiting) {
// Skip scroll_to_fraction() when 'cmdheight' was set to one from zero.
if (!exiting && !made_cmdheight_nonzero) {
scroll_to_fraction(wp, prev_height);
}
redraw_later(wp, NOT_VALID); // SOME_VALID??