mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 8.2.1990: cursor position wrong in terminal popup with finished job
Problem: Cursor position wrong in terminal popup with finished job. Solution: Only add the top and left offset when not done already. (closes #7298)
This commit is contained in:
@@ -2455,6 +2455,7 @@ win_line(
|
|||||||
wp->w_wrow = row;
|
wp->w_wrow = row;
|
||||||
did_wcol = TRUE;
|
did_wcol = TRUE;
|
||||||
curwin->w_valid |= VALID_WCOL|VALID_WROW|VALID_VIRTCOL;
|
curwin->w_valid |= VALID_WCOL|VALID_WROW|VALID_VIRTCOL;
|
||||||
|
curwin->w_flags &= ~(WFLAG_WCOL_OFF_ADDED | WFLAG_WROW_OFF_ADDED);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -868,6 +868,7 @@ validate_cursor_col(void)
|
|||||||
curwin->w_wcol = col;
|
curwin->w_wcol = col;
|
||||||
|
|
||||||
curwin->w_valid |= VALID_WCOL;
|
curwin->w_valid |= VALID_WCOL;
|
||||||
|
curwin->w_flags &= ~WFLAG_WCOL_OFF_ADDED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1180,7 +1181,10 @@ curs_columns(
|
|||||||
{
|
{
|
||||||
curwin->w_wrow += popup_top_extra(curwin);
|
curwin->w_wrow += popup_top_extra(curwin);
|
||||||
curwin->w_wcol += popup_left_extra(curwin);
|
curwin->w_wcol += popup_left_extra(curwin);
|
||||||
|
curwin->w_flags |= WFLAG_WCOL_OFF_ADDED + WFLAG_WROW_OFF_ADDED;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
curwin->w_flags &= ~(WFLAG_WCOL_OFF_ADDED + WFLAG_WROW_OFF_ADDED);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// now w_leftcol is valid, avoid check_cursor_moved() thinking otherwise
|
// now w_leftcol is valid, avoid check_cursor_moved() thinking otherwise
|
||||||
|
@@ -3743,13 +3743,17 @@ update_popups(void (*win_update)(win_T *wp))
|
|||||||
|
|
||||||
wp->w_winrow -= top_off;
|
wp->w_winrow -= top_off;
|
||||||
wp->w_wincol -= left_extra;
|
wp->w_wincol -= left_extra;
|
||||||
// cursor position matters in terminal in job mode
|
|
||||||
#ifdef FEAT_TERMINAL
|
// Add offset for border and padding if not done already.
|
||||||
if (wp != curwin || !term_in_normal_mode())
|
if ((wp->w_flags & WFLAG_WCOL_OFF_ADDED) == 0)
|
||||||
#endif
|
{
|
||||||
|
wp->w_wcol += left_extra;
|
||||||
|
wp->w_flags |= WFLAG_WCOL_OFF_ADDED;
|
||||||
|
}
|
||||||
|
if ((wp->w_flags & WFLAG_WROW_OFF_ADDED) == 0)
|
||||||
{
|
{
|
||||||
wp->w_wrow += top_off;
|
wp->w_wrow += top_off;
|
||||||
wp->w_wcol += left_extra;
|
wp->w_flags |= WFLAG_WROW_OFF_ADDED;
|
||||||
}
|
}
|
||||||
|
|
||||||
total_width = popup_width(wp);
|
total_width = popup_width(wp);
|
||||||
|
@@ -3348,6 +3348,10 @@ struct window_S
|
|||||||
// top of the window
|
// top of the window
|
||||||
char w_topline_was_set; // flag set to TRUE when topline is set,
|
char w_topline_was_set; // flag set to TRUE when topline is set,
|
||||||
// e.g. by winrestview()
|
// e.g. by winrestview()
|
||||||
|
|
||||||
|
linenr_T w_botline; // number of the line below the bottom of
|
||||||
|
// the window
|
||||||
|
|
||||||
#ifdef FEAT_DIFF
|
#ifdef FEAT_DIFF
|
||||||
int w_topfill; // number of filler lines above w_topline
|
int w_topfill; // number of filler lines above w_topline
|
||||||
int w_old_topfill; // w_topfill at last redraw
|
int w_old_topfill; // w_topfill at last redraw
|
||||||
@@ -3361,6 +3365,12 @@ struct window_S
|
|||||||
colnr_T w_skipcol; // starting column when a single line
|
colnr_T w_skipcol; // starting column when a single line
|
||||||
// doesn't fit in the window
|
// doesn't fit in the window
|
||||||
|
|
||||||
|
int w_empty_rows; // number of ~ rows in window
|
||||||
|
#ifdef FEAT_DIFF
|
||||||
|
int w_filler_rows; // number of filler rows at the end of the
|
||||||
|
// window
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Layout of the window in the screen.
|
* Layout of the window in the screen.
|
||||||
* May need to add "msg_scrolled" to "w_winrow" in rare situations.
|
* May need to add "msg_scrolled" to "w_winrow" in rare situations.
|
||||||
@@ -3368,11 +3378,14 @@ struct window_S
|
|||||||
int w_winrow; // first row of window in screen
|
int w_winrow; // first row of window in screen
|
||||||
int w_height; // number of rows in window, excluding
|
int w_height; // number of rows in window, excluding
|
||||||
// status/command/winbar line(s)
|
// status/command/winbar line(s)
|
||||||
|
|
||||||
int w_status_height; // number of status lines (0 or 1)
|
int w_status_height; // number of status lines (0 or 1)
|
||||||
int w_wincol; // Leftmost column of window in screen.
|
int w_wincol; // Leftmost column of window in screen.
|
||||||
int w_width; // Width of window, excluding separation.
|
int w_width; // Width of window, excluding separation.
|
||||||
int w_vsep_width; // Number of separator columns (0 or 1).
|
int w_vsep_width; // Number of separator columns (0 or 1).
|
||||||
|
|
||||||
pos_save_T w_save_cursor; // backup of cursor pos and topline
|
pos_save_T w_save_cursor; // backup of cursor pos and topline
|
||||||
|
|
||||||
#ifdef FEAT_PROP_POPUP
|
#ifdef FEAT_PROP_POPUP
|
||||||
int w_popup_flags; // POPF_ values
|
int w_popup_flags; // POPF_ values
|
||||||
int w_popup_handled; // POPUP_HANDLE[0-9] flags
|
int w_popup_handled; // POPUP_HANDLE[0-9] flags
|
||||||
@@ -3433,8 +3446,14 @@ struct window_S
|
|||||||
# if defined(FEAT_TIMERS)
|
# if defined(FEAT_TIMERS)
|
||||||
timer_T *w_popup_timer; // timer for closing popup window
|
timer_T *w_popup_timer; // timer for closing popup window
|
||||||
# endif
|
# endif
|
||||||
#endif
|
|
||||||
|
|
||||||
|
int w_flags; // WFLAG_ flags
|
||||||
|
|
||||||
|
# define WFLAG_WCOL_OFF_ADDED 1 // popup border and padding were added to
|
||||||
|
// w_wcol
|
||||||
|
# define WFLAG_WROW_OFF_ADDED 2 // popup border and padding were added to
|
||||||
|
// w_wrow
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* === start of cached values ====
|
* === start of cached values ====
|
||||||
@@ -3475,14 +3494,6 @@ struct window_S
|
|||||||
*/
|
*/
|
||||||
int w_wrow, w_wcol; // cursor position in window
|
int w_wrow, w_wcol; // cursor position in window
|
||||||
|
|
||||||
linenr_T w_botline; // number of the line below the bottom of
|
|
||||||
// the window
|
|
||||||
int w_empty_rows; // number of ~ rows in window
|
|
||||||
#ifdef FEAT_DIFF
|
|
||||||
int w_filler_rows; // number of filler rows at the end of the
|
|
||||||
// window
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Info about the lines currently in the window is remembered to avoid
|
* Info about the lines currently in the window is remembered to avoid
|
||||||
* recomputing it every time. The allocated size of w_lines[] is Rows.
|
* recomputing it every time. The allocated size of w_lines[] is Rows.
|
||||||
|
@@ -2208,7 +2208,10 @@ position_cursor(win_T *wp, VTermPos *pos, int add_off UNUSED)
|
|||||||
{
|
{
|
||||||
wp->w_wrow += popup_top_extra(curwin);
|
wp->w_wrow += popup_top_extra(curwin);
|
||||||
wp->w_wcol += popup_left_extra(curwin);
|
wp->w_wcol += popup_left_extra(curwin);
|
||||||
|
wp->w_flags |= WFLAG_WCOL_OFF_ADDED | WFLAG_WROW_OFF_ADDED;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
wp->w_flags &= ~(WFLAG_WCOL_OFF_ADDED | WFLAG_WROW_OFF_ADDED);
|
||||||
#endif
|
#endif
|
||||||
wp->w_valid |= (VALID_WCOL|VALID_WROW);
|
wp->w_valid |= (VALID_WCOL|VALID_WROW);
|
||||||
}
|
}
|
||||||
|
@@ -5,8 +5,8 @@
|
|||||||
|4| @24|╔+0#0000001#ffd7ff255|═@19|╗| +0#0000000#ffffff0@26
|
|4| @24|╔+0#0000001#ffd7ff255|═@19|╗| +0#0000000#ffffff0@26
|
||||||
|5| @24|║+0#0000001#ffd7ff255|a|n|o|t|h|e|r| |t|e|x|t| @7|║| +0#0000000#ffffff0@26
|
|5| @24|║+0#0000001#ffd7ff255|a|n|o|t|h|e|r| |t|e|x|t| @7|║| +0#0000000#ffffff0@26
|
||||||
|6| @24|║+0#0000001#ffd7ff255|t|o| |s|h|o|w| @12|║| +0#0000000#ffffff0@26
|
|6| @24|║+0#0000001#ffd7ff255|t|o| |s|h|o|w| @12|║| +0#0000000#ffffff0@26
|
||||||
|7| @24|║+0#0000001#ffd7ff255|i|n| |a| |p|o|p|u|p| |w|i|n|d|o|w| @2|║| +0#0000000#ffffff0@26
|
|7| @24|║+0#0000001#ffd7ff255>i|n| |a| |p|o|p|u|p| |w|i|n|d|o|w| @2|║| +0#0000000#ffffff0@26
|
||||||
|8| @24|║+0#0000001#ffd7ff255| +0#4040ff13&> @18|║+0#0000001&| +0#0000000#ffffff0@26
|
|8| @24|║+0#0000001#ffd7ff255| +0#4040ff13&@19|║+0#0000001&| +0#0000000#ffffff0@26
|
||||||
|9| @24|║+0#0000001#ffd7ff255| +0#4040ff13&@19|║+0#0000001&| +0#0000000#ffffff0@26
|
|9| @24|║+0#0000001#ffd7ff255| +0#4040ff13&@19|║+0#0000001&| +0#0000000#ffffff0@26
|
||||||
|1|0| @23|╚+0#0000001#ffd7ff255|═@19|╝| +0#0000000#ffffff0@26
|
|1|0| @23|╚+0#0000001#ffd7ff255|═@19|╝| +0#0000000#ffffff0@26
|
||||||
|1@1| @72
|
|1@1| @72
|
||||||
|
@@ -750,6 +750,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1990,
|
||||||
/**/
|
/**/
|
||||||
1989,
|
1989,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user