mirror of
https://github.com/neovim/neovim.git
synced 2025-09-23 03:28:33 +00:00
vim-patch:8.1.0706: introduce :redrawtabline #10570
Problem: Tabline is not always redrawn when something that is used in
'tabline' changes.
Solution: Add ":redrawtabline" so that a plugin can at least cause the
redraw when needed.
e12bab3144
This commit is contained in:

committed by
Justin M. Keyes

parent
f8684bf6b9
commit
39549159fe
@@ -6027,6 +6027,8 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
the text to be displayed. Use "%1T" for the first label, "%2T" for
|
||||
the second one, etc. Use "%X" items for closing labels.
|
||||
|
||||
When changing something that is used in 'tabline' that does not
|
||||
trigger it to be updated, use |:redrawtabline|.
|
||||
This option cannot be set in a modeline when 'modelineexpr' is off.
|
||||
|
||||
Keep in mind that only one of the tab pages is the current one, others
|
||||
|
@@ -31,6 +31,11 @@ CTRL-L Clears and redraws the screen. The redraw may happen
|
||||
Useful if 'statusline' includes an item that doesn't
|
||||
cause automatic updating.
|
||||
|
||||
*:redrawt* *:redrawtabline*
|
||||
:redrawt[abline] Redraw the tabline. Useful to update the tabline when
|
||||
'tabline' includes an item that doesn't trigger
|
||||
automatic updating.
|
||||
|
||||
*N<Del>*
|
||||
<Del> When entering a number: Remove the last digit.
|
||||
Note: if you like to use <BS> for this, add this
|
||||
|
@@ -2150,6 +2150,12 @@ return {
|
||||
addr_type=ADDR_LINES,
|
||||
func='ex_redrawstatus',
|
||||
},
|
||||
{
|
||||
command='redrawtabline',
|
||||
flags=bit.bor(TRLBAR, CMDWIN),
|
||||
addr_type=ADDR_LINES,
|
||||
func='ex_redrawtabline',
|
||||
},
|
||||
{
|
||||
command='registers',
|
||||
flags=bit.bor(EXTRA, NOTRLCOM, TRLBAR, CMDWIN),
|
||||
|
@@ -7874,6 +7874,22 @@ static void ex_redrawstatus(exarg_T *eap)
|
||||
ui_flush();
|
||||
}
|
||||
|
||||
// ":redrawtabline": force redraw of the tabline
|
||||
static void ex_redrawtabline(exarg_T *eap FUNC_ATTR_UNUSED)
|
||||
{
|
||||
const int r = RedrawingDisabled;
|
||||
const int p = p_lz;
|
||||
|
||||
RedrawingDisabled = 0;
|
||||
p_lz = false;
|
||||
|
||||
draw_tabline();
|
||||
|
||||
RedrawingDisabled = r;
|
||||
p_lz = p;
|
||||
ui_flush();
|
||||
}
|
||||
|
||||
static void close_redir(void)
|
||||
{
|
||||
if (redir_fd != NULL) {
|
||||
|
@@ -6650,7 +6650,7 @@ static void recording_mode(int attr)
|
||||
/*
|
||||
* Draw the tab pages line at the top of the Vim window.
|
||||
*/
|
||||
static void draw_tabline(void)
|
||||
void draw_tabline(void)
|
||||
{
|
||||
int tabcount = 0;
|
||||
int tabwidth = 0;
|
||||
|
@@ -1,19 +1,22 @@
|
||||
function! TablineWithCaughtError()
|
||||
|
||||
source shared.vim
|
||||
|
||||
func TablineWithCaughtError()
|
||||
let s:func_in_tabline_called = 1
|
||||
try
|
||||
call eval('unknown expression')
|
||||
catch
|
||||
endtry
|
||||
return ''
|
||||
endfunction
|
||||
endfunc
|
||||
|
||||
function! TablineWithError()
|
||||
func TablineWithError()
|
||||
let s:func_in_tabline_called = 1
|
||||
call eval('unknown expression')
|
||||
return ''
|
||||
endfunction
|
||||
endfunc
|
||||
|
||||
function! Test_caught_error_in_tabline()
|
||||
func Test_caught_error_in_tabline()
|
||||
let showtabline_save = &showtabline
|
||||
set showtabline=2
|
||||
let s:func_in_tabline_called = 0
|
||||
@@ -24,9 +27,9 @@ function! Test_caught_error_in_tabline()
|
||||
call assert_equal(tabline, &tabline)
|
||||
set tabline=
|
||||
let &showtabline = showtabline_save
|
||||
endfunction
|
||||
endfunc
|
||||
|
||||
function! Test_tabline_will_be_disabled_with_error()
|
||||
func Test_tabline_will_be_disabled_with_error()
|
||||
let showtabline_save = &showtabline
|
||||
set showtabline=2
|
||||
let s:func_in_tabline_called = 0
|
||||
@@ -40,4 +43,24 @@ function! Test_tabline_will_be_disabled_with_error()
|
||||
call assert_equal('', &tabline)
|
||||
set tabline=
|
||||
let &showtabline = showtabline_save
|
||||
endfunction
|
||||
endfunc
|
||||
|
||||
func Test_redrawtabline()
|
||||
if has('gui')
|
||||
set guioptions-=e
|
||||
endif
|
||||
let showtabline_save = &showtabline
|
||||
set showtabline=2
|
||||
set tabline=%{bufnr('$')}
|
||||
edit Xtabline1
|
||||
edit Xtabline2
|
||||
redraw
|
||||
call assert_match(bufnr('$') . '', Screenline(1))
|
||||
au BufAdd * redrawtabline
|
||||
badd Xtabline3
|
||||
call assert_match(bufnr('$') . '', Screenline(1))
|
||||
|
||||
set tabline=
|
||||
let &showtabline = showtabline_save
|
||||
au! Bufadd
|
||||
endfunc
|
||||
|
Reference in New Issue
Block a user