From 99ca9c4868bb1669706b9e3de9a9218bd11cc459 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Tue, 22 Sep 2020 21:55:41 +0200 Subject: patch 8.2.1727: a popup created with "cursorline" will ignore "firstline" Problem: A popup created with "cursorline" will ignore "firstline". Solution: When both "cursorline" and "firstline" are present put the cursor on "firstline". (closes #7000) Add the "winid" argument to getcurpos(). --- src/popupwin.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'src/popupwin.c') diff --git a/src/popupwin.c b/src/popupwin.c index d29986db5..6080ecbc0 100644 --- a/src/popupwin.c +++ b/src/popupwin.c @@ -593,8 +593,9 @@ popup_show_curline(win_T *wp) ++wp->w_topline; } - // Don't use "firstline" now. - wp->w_firstline = 0; + // Don't let "firstline" cause a scroll. + if (wp->w_firstline > 0) + wp->w_firstline = wp->w_topline; } /* @@ -948,6 +949,18 @@ apply_options(win_T *wp, dict_T *dict) if (nr > 0) wp->w_popup_flags |= POPF_HIDDEN; + // when "firstline" and "cursorline" are both set move the cursor to the + // "firstline". + if (wp->w_firstline > 0 && (wp->w_popup_flags & POPF_CURSORLINE)) + { + if (wp->w_firstline > wp->w_buffer->b_ml.ml_line_count) + wp->w_cursor.lnum = wp->w_buffer->b_ml.ml_line_count; + else + wp->w_cursor.lnum = wp->w_firstline; + wp->w_topline = wp->w_cursor.lnum; + curwin->w_valid &= ~VALID_BOTLINE; + } + popup_mask_refresh = TRUE; popup_highlight_curline(wp); } -- cgit v1.2.1