]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.1795: Vim9: popup_show() may return void v9.1.1795
authorYegappan Lakshmanan <yegappan@yahoo.com>
Fri, 26 Sep 2025 16:30:52 +0000 (16:30 +0000)
committerChristian Brabandt <cb@256bit.org>
Fri, 26 Sep 2025 16:30:52 +0000 (16:30 +0000)
Problem:  Vim9: popup_show() may return void
Solution: Modify popup_show() to return -1 for an invalid popup window
          id (Yegappan Lakshmanan).

fixes: #18389
closes: #18401

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime/doc/builtin.txt
runtime/doc/popup.txt
src/evalfunc.c
src/popupwin.c
src/testdir/test_popupwin.vim
src/testdir/test_vim9_builtin.vim
src/version.c

index 54dfb27c9a126c29161d19ea059694291dcce204..75ca65ba12bcdfc96b745046e35d2403d604092e 100644 (file)
@@ -1,4 +1,4 @@
-*builtin.txt*  For Vim version 9.1.  Last change: 2025 Sep 24
+*builtin.txt*  For Vim version 9.1.  Last change: 2025 Sep 26
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -451,7 +451,7 @@ popup_setbuf({id}, {buf})   Bool    set the buffer for the popup window {id}
 popup_setoptions({id}, {options})
                                none    set options for popup window {id}
 popup_settext({id}, {text})    none    set the text of popup window {id}
-popup_show({id})               none    unhide popup window {id}
+popup_show({id})               Number  unhide popup window {id}
 pow({x}, {y})                  Float   {x} to the power of {y}
 prevnonblank({lnum})           Number  line nr of non-blank line <= {lnum}
 printf({fmt}, {expr1}...)      String  format text
index a3d25a4cf22604a40fbb5c2b8abce288f63ef214..9d518c0ecdc33243c39af9b3e96f6a430f2d4a62 100644 (file)
@@ -1,4 +1,4 @@
-*popup.txt*  For Vim version 9.1.  Last change: 2025 Aug 27
+*popup.txt*  For Vim version 9.1.  Last change: 2025 Sep 26
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -639,10 +639,17 @@ popup_settext({id}, {text})                               *popup_settext()*
 
 
 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.
+               Show a hidden popup window identified by {id}.
+               Use {id} as returned by |popup_create()|.
+
+               If the popup is currently hidden, it will be made visible.
+               See |popup_hide()| to hide a popup.
+
+               If {id} refers to an info popup, it will be positioned next to
+               the currently selected item in the popup menu.
+
+               Returns -1 if a popup window with {id} does not exist.
+               Returns 0 on success.
 
                Return type: |Number|
 
index e4e0c29b28f67813a1807a0005f399c8d7f8affd..c775240c3ba82eeec3ceb66864211798831a1d3d 100644 (file)
@@ -2652,7 +2652,7 @@ static const funcentry_T global_functions[] =
     {"popup_settext",  2, 2, FEARG_1,      arg2_number_string_or_list,
                        ret_void,           PROP_FUNC(f_popup_settext)},
     {"popup_show",     1, 1, FEARG_1,      arg1_number,
-                       ret_void,           PROP_FUNC(f_popup_show)},
+                       ret_number,         PROP_FUNC(f_popup_show)},
     {"pow",            2, 2, FEARG_1,      arg2_float_or_nr,
                        ret_float,          f_pow},
     {"prevnonblank",   1, 1, FEARG_1,      arg1_lnum,
index 179fc7a1d3298ecc19488b38ee5441dba34017fd..64f68377190f7e8b85323329f5eed0125f0274f4 100644 (file)
@@ -2832,6 +2832,9 @@ f_popup_show(typval_T *argvars, typval_T *rettv UNUSED)
     int                id;
     win_T      *wp;
 
+    rettv->v_type = VAR_NUMBER;
+    rettv->vval.v_number = -1;
+
     if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL)
        return;
 
@@ -2846,6 +2849,8 @@ f_popup_show(typval_T *argvars, typval_T *rettv UNUSED)
     if (wp->w_popup_flags & POPF_INFO)
        pum_position_info_popup(wp);
 #endif
+
+    rettv->vval.v_number = 0;
 }
 
 /*
index 955cc2c9d6c843bb9e562982b4b26e5cd673794f..bd0e81e8460a199f5cede79d10f356eef035019a 100644 (file)
@@ -1264,7 +1264,7 @@ func Test_popup_hide()
 
   " no error non-existing window
   eval 1234234->popup_hide()
-  call popup_show(41234234)
+  call assert_equal(-1, popup_show(41234234))
 
   bwipe!
 endfunc
@@ -2623,7 +2623,7 @@ func Test_popup_hidden()
   exe "normal anot used by filter\<Esc>"
   call assert_equal('not used by filter', getline(1))
 
-  call popup_show(winid)
+  call assert_equal(0, popup_show(winid))
   call feedkeys('y', "xt")
   call assert_equal(1, s:cb_res)
 
index 339506bac93dd50936b5644b0896d43d6b3e0bbf..4d537d38020a7d9a50fbb1425b9c1dca9fbe3f11 100644 (file)
@@ -3269,6 +3269,7 @@ enddef
 def Test_popup_show()
   v9.CheckSourceDefAndScriptFailure(['popup_show("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
   v9.CheckSourceDefAndScriptFailure(['popup_show(true)'], ['E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1'])
+  v9.CheckSourceDefAndScriptSuccess(['assert_equal(-1, popup_show(100))'])
 enddef
 
 def Test_prevnonblank()
index c41a20e046925f2aa5dab3f11b8971a31d8f5a94..e093873703a631cc83031a622aa025d7efb0a18a 100644 (file)
@@ -729,6 +729,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1795,
 /**/
     1794,
 /**/