]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.0.1498: in a terminal window the cursor may jump around v9.0.1498
authorBram Moolenaar <Bram@vim.org>
Sat, 29 Apr 2023 13:26:02 +0000 (14:26 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 29 Apr 2023 13:26:02 +0000 (14:26 +0100)
Problem:    In a terminal window the cursor may jump around. (Kenny Stauffer)
Solution:   Do not move the cursor to the position for terminal-normal mode.
            (closes #12312)

src/terminal.c
src/version.c

index 71602da928f8598daa18b3616eb22a1898d4c02d..683b74fa860815cdb1d579b91ed104068584d237 100644 (file)
@@ -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.
  */
index 7bb63e9546f72a7eae01eed7e69419067d071686..ce94bc80c0face356746812f8fa28d9c9e698e91 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1498,
 /**/
     1497,
 /**/