To: vim_dev@googlegroups.com Subject: Patch 8.2.1990 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.1990 Problem: Cursor position wrong in terminal popup with finished job. Solution: Only add the top and left offset when not done already. (closes #7298) Files: src/popupwin.c, src/structs.h, src/drawline.c, src/move.c, src/terminal.c, src/testdir/dumps/Test_terminal_popup_m1.dump *** ../vim-8.2.1989/src/popupwin.c 2020-11-05 19:34:37.774638811 +0100 --- src/popupwin.c 2020-11-15 20:05:59.755275963 +0100 *************** *** 3743,3755 **** wp->w_winrow -= top_off; wp->w_wincol -= left_extra; ! // cursor position matters in terminal in job mode ! #ifdef FEAT_TERMINAL ! if (wp != curwin || !term_in_normal_mode()) ! #endif { - wp->w_wrow += top_off; wp->w_wcol += left_extra; } total_width = popup_width(wp); --- 3743,3759 ---- wp->w_winrow -= top_off; wp->w_wincol -= left_extra; ! ! // Add offset for border and padding if not done already. ! if ((wp->w_flags & WFLAG_WCOL_OFF_ADDED) == 0) { 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_flags |= WFLAG_WROW_OFF_ADDED; } total_width = popup_width(wp); *** ../vim-8.2.1989/src/structs.h 2020-11-07 16:58:55.894354883 +0100 --- src/structs.h 2020-11-15 19:43:05.658089258 +0100 *************** *** 3348,3353 **** --- 3348,3357 ---- // top of the window char w_topline_was_set; // flag set to TRUE when topline is set, // e.g. by winrestview() + + linenr_T w_botline; // number of the line below the bottom of + // the window + #ifdef FEAT_DIFF int w_topfill; // number of filler lines above w_topline int w_old_topfill; // w_topfill at last redraw *************** *** 3361,3366 **** --- 3365,3376 ---- colnr_T w_skipcol; // starting column when a single line // 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. * May need to add "msg_scrolled" to "w_winrow" in rare situations. *************** *** 3368,3378 **** --- 3378,3391 ---- int w_winrow; // first row of window in screen int w_height; // number of rows in window, excluding // status/command/winbar line(s) + int w_status_height; // number of status lines (0 or 1) int w_wincol; // Leftmost column of window in screen. int w_width; // Width of window, excluding separation. int w_vsep_width; // Number of separator columns (0 or 1). + pos_save_T w_save_cursor; // backup of cursor pos and topline + #ifdef FEAT_PROP_POPUP int w_popup_flags; // POPF_ values int w_popup_handled; // POPUP_HANDLE[0-9] flags *************** *** 3433,3440 **** # if defined(FEAT_TIMERS) timer_T *w_popup_timer; // timer for closing popup window # endif - #endif /* * === start of cached values ==== --- 3446,3459 ---- # if defined(FEAT_TIMERS) timer_T *w_popup_timer; // timer for closing popup window # 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 ==== *************** *** 3475,3488 **** */ 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 * recomputing it every time. The allocated size of w_lines[] is Rows. --- 3494,3499 ---- *** ../vim-8.2.1989/src/drawline.c 2020-11-05 19:06:55.739582600 +0100 --- src/drawline.c 2020-11-15 19:56:23.948311232 +0100 *************** *** 2455,2460 **** --- 2455,2461 ---- wp->w_wrow = row; did_wcol = TRUE; curwin->w_valid |= VALID_WCOL|VALID_WROW|VALID_VIRTCOL; + curwin->w_flags &= ~(WFLAG_WCOL_OFF_ADDED | WFLAG_WROW_OFF_ADDED); } #endif *** ../vim-8.2.1989/src/move.c 2020-11-01 21:56:36.613059948 +0100 --- src/move.c 2020-11-15 20:08:30.935015648 +0100 *************** *** 868,873 **** --- 868,874 ---- curwin->w_wcol = col; curwin->w_valid |= VALID_WCOL; + curwin->w_flags &= ~WFLAG_WCOL_OFF_ADDED; } } *************** *** 1180,1186 **** --- 1181,1190 ---- { curwin->w_wrow += popup_top_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 // now w_leftcol is valid, avoid check_cursor_moved() thinking otherwise *** ../vim-8.2.1989/src/terminal.c 2020-11-14 20:21:51.361723986 +0100 --- src/terminal.c 2020-11-15 20:09:22.782920836 +0100 *************** *** 2208,2214 **** --- 2208,2217 ---- { wp->w_wrow += popup_top_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 wp->w_valid |= (VALID_WCOL|VALID_WROW); } *** ../vim-8.2.1989/src/testdir/dumps/Test_terminal_popup_m1.dump 2020-03-15 14:19:19.394376259 +0100 --- src/testdir/dumps/Test_terminal_popup_m1.dump 2020-11-15 17:48:42.077595712 +0100 *************** *** 5,12 **** |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 |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 ! |8| @24|║+0#0000001#ffd7ff255| +0#4040ff13&> @18|║+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@1| @72 --- 5,12 ---- |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 |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 ! |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 |1|0| @23|╚+0#0000001#ffd7ff255|═@19|╝| +0#0000000#ffffff0@26 |1@1| @72 *** ../vim-8.2.1989/src/version.c 2020-11-15 14:09:34.100728303 +0100 --- src/version.c 2020-11-15 20:31:37.512056593 +0100 *************** *** 752,753 **** --- 752,755 ---- { /* Add new patch number below this line */ + /**/ + 1990, /**/ -- hundred-and-one symptoms of being an internet addict: 249. You've forgotten what the outside looks like. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///