diff --git a/src/terminal.c b/src/terminal.c index 71602da928f85..683b74fa86081 100644 --- a/src/terminal.c +++ b/src/terminal.c @@ -1208,6 +1208,24 @@ term_write_job_output(term_T *term, char_u *msg_arg, size_t len_arg) vterm_screen_flush_damage(vterm_obtain_screen(vterm)); } + static void +position_cursor(win_T *wp, VTermPos *pos) +{ + wp->w_wrow = MIN(pos->row, MAX(0, wp->w_height - 1)); + wp->w_wcol = MIN(pos->col, MAX(0, wp->w_width - 1)); +#ifdef FEAT_PROP_POPUP + if (popup_is_popup(wp)) + { + wp->w_wrow += popup_top_extra(wp); + wp->w_wcol += popup_left_extra(wp); + wp->w_flags |= WFLAG_WCOL_OFF_ADDED | WFLAG_WROW_OFF_ADDED; + } + else + wp->w_flags &= ~(WFLAG_WCOL_OFF_ADDED | WFLAG_WROW_OFF_ADDED); +#endif + wp->w_valid |= (VALID_WCOL|VALID_WROW); +} + static void update_cursor(term_T *term, int redraw) { @@ -1219,7 +1237,16 @@ update_cursor(term_T *term, int redraw) term->tl_cursor_pos.col); else #endif + if (!term_job_running(term)) + // avoid the cursor positioned below the last used line setcursor(); + else + { + // do not use the window cursor position + position_cursor(curwin, &curbuf->b_term->tl_cursor_pos); + windgoto(W_WINROW(curwin) + curwin->w_wrow, + curwin->w_wincol + curwin->w_wcol); + } if (redraw) { aco_save_T aco; @@ -2358,24 +2385,6 @@ send_keys_to_term(term_T *term, int c, int modmask, int typed) return OK; } - static void -position_cursor(win_T *wp, VTermPos *pos) -{ - wp->w_wrow = MIN(pos->row, MAX(0, wp->w_height - 1)); - wp->w_wcol = MIN(pos->col, MAX(0, wp->w_width - 1)); -#ifdef FEAT_PROP_POPUP - if (popup_is_popup(wp)) - { - wp->w_wrow += popup_top_extra(wp); - wp->w_wcol += popup_left_extra(wp); - wp->w_flags |= WFLAG_WCOL_OFF_ADDED | WFLAG_WROW_OFF_ADDED; - } - else - wp->w_flags &= ~(WFLAG_WCOL_OFF_ADDED | WFLAG_WROW_OFF_ADDED); -#endif - wp->w_valid |= (VALID_WCOL|VALID_WROW); -} - /* * Handle CTRL-W "": send register contents to the job. */ diff --git a/src/version.c b/src/version.c index 7bb63e9546f72..ce94bc80c0fac 100644 --- a/src/version.c +++ b/src/version.c @@ -695,6 +695,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1498, /**/ 1497, /**/