diff --git a/src/eval.c b/src/eval.c index 97a6389b24..da5b192574 100644 --- a/src/eval.c +++ b/src/eval.c @@ -7326,6 +7326,7 @@ set_ref_in_item( if (job != NULL && job->jv_copyID != copyID) { + job->jv_copyID = copyID; if (job->jv_channel != NULL) { dtv.v_type = VAR_CHANNEL; @@ -7350,6 +7351,7 @@ set_ref_in_item( if (ch != NULL && ch->ch_copyID != copyID) { + ch->ch_copyID = copyID; for (part = PART_SOCK; part <= PART_IN; ++part) { for (jq = ch->ch_part[part].ch_json_head.jq_next; jq != NULL; diff --git a/src/screen.c b/src/screen.c index ca59dadefc..7d2a1f3e00 100644 --- a/src/screen.c +++ b/src/screen.c @@ -10295,16 +10295,16 @@ draw_tabline(void) /* Use the 'tabline' option if it's set. */ if (*p_tal != NUL) { - int save_called_emsg = called_emsg; + int saved_did_emsg = did_emsg; /* Check for an error. If there is one we would loop in redrawing the * screen. Avoid that by making 'tabline' empty. */ - called_emsg = FALSE; + did_emsg = FALSE; win_redr_custom(NULL, FALSE); - if (called_emsg) + if (did_emsg) set_string_option_direct((char_u *)"tabline", -1, (char_u *)"", OPT_FREE, SID_ERROR); - called_emsg |= save_called_emsg; + did_emsg |= saved_did_emsg; } else #endif diff --git a/src/testdir/test_alot.vim b/src/testdir/test_alot.vim index 1eb76a6dec..7f9a1a78fe 100644 --- a/src/testdir/test_alot.vim +++ b/src/testdir/test_alot.vim @@ -24,6 +24,7 @@ source test_set.vim source test_sort.vim source test_statusline.vim source test_syn_attr.vim +source test_tabline.vim source test_timers.vim source test_undolevels.vim source test_unlet.vim diff --git a/src/testdir/test_tabline.vim b/src/testdir/test_tabline.vim new file mode 100644 index 0000000000..b08f299fd0 --- /dev/null +++ b/src/testdir/test_tabline.vim @@ -0,0 +1,49 @@ +function! TablineWithCaughtError() + let s:func_in_tabline_called = 1 + try + call eval('unknown expression') + catch + endtry + return '' +endfunction + +function! TablineWithError() + let s:func_in_tabline_called = 1 + call eval('unknown expression') + return '' +endfunction + +function! Test_caught_error_in_tabline() + if has('gui') + set guioptions-=e + endif + let showtabline_save = &showtabline + set showtabline=2 + let s:func_in_tabline_called = 0 + let tabline = '%{TablineWithCaughtError()}' + let &tabline = tabline + redraw! + call assert_true(s:func_in_tabline_called) + call assert_equal(tabline, &tabline) + set tabline= + let &showtabline = showtabline_save +endfunction + +function! Test_tabline_will_be_disabled_with_error() + if has('gui') + set guioptions-=e + endif + let showtabline_save = &showtabline + set showtabline=2 + let s:func_in_tabline_called = 0 + let tabline = '%{TablineWithError()}' + try + let &tabline = tabline + redraw! + catch + endtry + call assert_true(s:func_in_tabline_called) + call assert_equal('', &tabline) + set tabline= + let &showtabline = showtabline_save +endfunction diff --git a/src/version.c b/src/version.c index e3a300ce08..94d02a7677 100644 --- a/src/version.c +++ b/src/version.c @@ -763,6 +763,12 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1724, +/**/ + 1723, +/**/ + 1722, /**/ 1721, /**/