]> granicus.if.org Git - vim/commitdiff
patch 8.1.2193: popup_setoptions(popup_getoptions()) does not work v8.1.2193
authorBram Moolenaar <Bram@vim.org>
Sun, 20 Oct 2019 16:46:05 +0000 (18:46 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 20 Oct 2019 16:46:05 +0000 (18:46 +0200)
Problem:    Popup_setoptions(popup_getoptions()) does not work.
Solution:   Also accept a list with three entries for "moved" and
            "mousemoved". (closes #5081)

runtime/doc/popup.txt
src/popupwin.c
src/testdir/test_popupwin.vim
src/version.c

index a438ce64e913559015fa49c681192efab12bc75d..d1dfd86a164b123c1d38f75155dba10ba7405703 100644 (file)
@@ -474,6 +474,8 @@ popup_notification({what}, {options})                        *popup_notification()*
 popup_show({id})                                               *popup_show()*
                If {id} is a hidden popup, show it now.
                For {id} see `popup_hide()`.
+               If {id} is the info popup it will be positioned next to the
+               current popup menu item.
 
 
 popup_setoptions({id}, {options})                      *popup_setoptions()*
@@ -680,8 +682,13 @@ The second argument of |popup_create()| is a dictionary with options:
                        - "expr": if the cursor moved outside |<cexpr>|
                        - [{start}, {end}]: if the cursor moved before column
                          {start} or after {end}
+                       - [{lnum}, {start}, {end}]: if the cursor moved away
+                         from line {lnum}, before column {start} or after
+                         {end}
                        The popup also closes if the cursor moves to another
                        line or to another window.
+       mousemoved      Like "moved" but referring to the mouse pointer
+                       position
        cursorline      non-zero: Highlight the cursor line. Also scrolls the
                                  text to show this line (only works properly
                                  when 'wrap' is off).
index 95435f8fe7e0bae5eea036e39e4510ae374f3d97..a9579320e8f7226f85a2a09230f58595584d0839 100644 (file)
@@ -493,12 +493,28 @@ handle_moved_argument(win_T *wp, dictitem_T *di, int mousemoved)
     }
     else if (di->di_tv.v_type == VAR_LIST
            && di->di_tv.vval.v_list != NULL
-           && di->di_tv.vval.v_list->lv_len == 2)
+           && (di->di_tv.vval.v_list->lv_len == 2
+            || di->di_tv.vval.v_list->lv_len == 3))
     {
-       list_T  *l = di->di_tv.vval.v_list;
-       int     mincol = tv_get_number(&l->lv_first->li_tv);
-       int     maxcol = tv_get_number(&l->lv_first->li_next->li_tv);
+       list_T      *l = di->di_tv.vval.v_list;
+       listitem_T  *li = l->lv_first;
+       int         mincol;
+       int         maxcol;
 
+       if (di->di_tv.vval.v_list->lv_len == 3)
+       {
+           varnumber_T nr = tv_get_number(&l->lv_first->li_tv);
+
+           // Three numbers, might be from popup_getoptions().
+           if (mousemoved)
+               wp->w_popup_mouse_row = nr;
+           else
+               wp->w_popup_lnum = nr;
+           li = li->li_next;
+       }
+
+       mincol = tv_get_number(&li->li_tv);
+       maxcol = tv_get_number(&li->li_next->li_tv);
        if (mousemoved)
        {
            wp->w_popup_mouse_mincol = mincol;
index 2e2d1df80ed22b1db125ffa9df9d063945cbf7dd..dc382d83b51cee8708ccf7361576a020f06402de 100644 (file)
@@ -170,6 +170,10 @@ func Test_popup_with_border_and_padding()
   call assert_equal(['Top', 'Right', 'Bottom', 'Left'], options.borderhighlight)
   call assert_equal(['1', '^', '2', '>', '3', 'v', '4', '<'], options.borderchars)
 
+  " Check that popup_setoptions() takes the output of popup_getoptions()
+  call popup_setoptions(winid, options)
+  call assert_equal(options, popup_getoptions(winid))
+
   let winid = popup_create('hello both', #{line: 3, col: 8, border: [], padding: []})
   call assert_equal(#{
        \ line: 3,
index 76b4c1cf52fd3291ebfe4f753f1e2999abc2a09e..6c8a36b219a53f4ee72306d652f3d5638dec6bed 100644 (file)
@@ -741,6 +741,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2193,
 /**/
     2192,
 /**/