From 3ad695328f94e0197e84454f125c7f3464091d0c Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 19 Nov 2021 17:01:08 +0000 Subject: [PATCH] patch 8.2.3624: when renaming a terminal buffer status text is not updated Problem: When renaming a terminal buffer the status text is not updated. Solution: Clear the cached status text when renaming a terminal buffer. (closes #9162) --- src/buffer.c | 5 +++++ src/proto/terminal.pro | 1 + src/terminal.c | 9 +++++++++ src/testdir/test_terminal.vim | 12 ++++++++++++ src/version.c | 2 ++ 5 files changed, 29 insertions(+) diff --git a/src/buffer.c b/src/buffer.c index 29cfb8a99..2983ca9fe 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -3453,6 +3453,11 @@ buf_name_changed(buf_T *buf) if (buf->b_ml.ml_mfp != NULL) ml_setname(buf); +#ifdef FEAT_TERMINAL + if (buf->b_term != NULL) + term_clear_status_text(buf->b_term); +#endif + if (curwin->w_buffer == buf) check_arg_idx(curwin); // check file name for arg list #ifdef FEAT_TITLE diff --git a/src/proto/terminal.pro b/src/proto/terminal.pro index 061a668bf..f5e3258d1 100644 --- a/src/proto/terminal.pro +++ b/src/proto/terminal.pro @@ -31,6 +31,7 @@ int term_get_attr(win_T *wp, linenr_T lnum, int col); void term_update_colors(term_T *term); void term_update_colors_all(void); char_u *term_get_status_text(term_T *term); +void term_clear_status_text(term_T *term); int set_ref_in_term(int copyID); void f_term_dumpwrite(typval_T *argvars, typval_T *rettv); int term_swap_diff(void); diff --git a/src/terminal.c b/src/terminal.c index fb8b2881f..c00302d2b 100644 --- a/src/terminal.c +++ b/src/terminal.c @@ -4637,6 +4637,15 @@ term_get_status_text(term_T *term) return term->tl_status_text; } +/* + * Clear the cached value of the status text. + */ + void +term_clear_status_text(term_T *term) +{ + VIM_CLEAR(term->tl_status_text); +} + /* * Mark references in jobs of terminals. */ diff --git a/src/testdir/test_terminal.vim b/src/testdir/test_terminal.vim index cd7f477c2..62dfbf105 100644 --- a/src/testdir/test_terminal.vim +++ b/src/testdir/test_terminal.vim @@ -159,6 +159,18 @@ func Test_terminal_hide_buffer_job_finished() bwipe Xasdfasdf endfunc +func Test_terminal_rename_buffer() + let cmd = Get_cat_123_cmd() + let buf = term_start(cmd, {'term_name': 'foo'}) + call WaitForAssert({-> assert_equal('finished', term_getstatus(buf))}) + call assert_equal('foo', bufname()) + call assert_match('foo.*finished', execute('ls')) + file bar + call assert_equal('bar', bufname()) + call assert_match('bar.*finished', execute('ls')) + exe 'bwipe! ' .. buf +endfunc + func s:Nasty_exit_cb(job, st) exe g:buf . 'bwipe!' let g:buf = 0 diff --git a/src/version.c b/src/version.c index 919a802d3..7cadcebf0 100644 --- a/src/version.c +++ b/src/version.c @@ -757,6 +757,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 3624, /**/ 3623, /**/ -- 2.40.0