Patch 8.1.1422
Problem:    Popup_getoptions() not implemented yet.
Solution:   Implement it. (closes #4452)
Files:      runtime/doc/popup.txt, src/evalfunc.c, src/popupwin.c,
            src/proto/popupwin.pro, src/testdir/test_popupwin.vim


*** ../vim-8.1.1421/runtime/doc/popup.txt       2019-05-29 21:44:30.764788713 
+0200
--- runtime/doc/popup.txt       2019-05-30 14:24:42.327163943 +0200
***************
*** 86,100 ****
  IMPLEMENTATION:
  - Code is in popupwin.c
  - when creating the window set options to Vim default? (verify with 'number')
- - Do not show tilde below last line.
  - Implement filter.
    Check that popup_close() works in the filter.
  - Handle screen resize in screenalloc().
  - Make redrawing more efficient and avoid flicker.
      Fix redrawing problem with completion.
      Fix redrawing problem when scrolling non-current window
      Fix redrawing the statusline on top of a popup
! - Properly figure out the size and position.
  - Can the buffer be re-used, to avoid using up lots of buffer numbers?
  - Implement all the unimplemented options and features.
  
--- 86,103 ----
  IMPLEMENTATION:
  - Code is in popupwin.c
  - when creating the window set options to Vim default? (verify with 'number')
  - Implement filter.
    Check that popup_close() works in the filter.
+ - Implement the "pos" option.
  - Handle screen resize in screenalloc().
  - Make redrawing more efficient and avoid flicker.
+     Store popup info in a mask, use the mask in screen_line()
      Fix redrawing problem with completion.
      Fix redrawing problem when scrolling non-current window
      Fix redrawing the statusline on top of a popup
! - Figure out the size and position better.
!     if wrapping splits a double-wide character
!     if wrapping has an indent
  - Can the buffer be re-used, to avoid using up lots of buffer numbers?
  - Implement all the unimplemented options and features.
  
***************
*** 228,243 ****
  
  
  popup_getoptions({id})                                        
*popup_getoptions()*
!               {not implemented yet}
!               Return the {options} for popup {id}.
  
  popup_getposition({id})                                       
*popup_getposition()*
                Return the position and size of popup {id}.  Returns a Dict
                with these entries:
!                       col     screen column of the popup, one-based
!                       line    screen line of the popup, one-based
!                       width   width of the popup in screen cells
!                       height  height of the popup in screen cells
                Note that these are the actual screen positions.  They differ
                from the values in `popup_getoptions()` for the sizing and
                positioning mechanism applied.
--- 231,253 ----
  
  
  popup_getoptions({id})                                        
*popup_getoptions()*
!               Return the {options} for popup {id} in a Dict.
!               A zero value means the option was not set.
! 
!               The "highlight" entry is omitted, use the 'wincolor' option
!               for that: >
!                       let hl = getwinvar(winid, '&wincolor')
! 
! <             If popup window {id} is not found an empty Dict is returned.
  
  popup_getposition({id})                                       
*popup_getposition()*
                Return the position and size of popup {id}.  Returns a Dict
                with these entries:
!                   col         screen column of the popup, one-based
!                   line        screen line of the popup, one-based
!                   width       width of the popup in screen cells
!                   height      height of the popup in screen cells
!                   visible     one if the popup is displayed, zero if hidden
                Note that these are the actual screen positions.  They differ
                from the values in `popup_getoptions()` for the sizing and
                positioning mechanism applied.
***************
*** 304,312 ****
                        {only number is implemented}
        pos             "topleft", "topright", "botleft" or "botright":
                        defines what corner of the popup "line" and "col" are
!                       used for.  Default is "botleft".  Alternatively
!                       "center" can be used to position the popup in the
!                       center of the Vim window.
                        {not implemented yet}
        flip            when TRUE (the default) and the position is relative
                        to the cursor, flip to below or above the cursor to
--- 314,322 ----
                        {only number is implemented}
        pos             "topleft", "topright", "botleft" or "botright":
                        defines what corner of the popup "line" and "col" are
!                       used for.  When not set "topleft" is used.
!                       Alternatively "center" can be used to position the
!                       popup in the center of the Vim window.
                        {not implemented yet}
        flip            when TRUE (the default) and the position is relative
                        to the cursor, flip to below or above the cursor to
*** ../vim-8.1.1421/src/evalfunc.c      2019-05-29 21:44:30.764788713 +0200
--- src/evalfunc.c      2019-05-30 14:12:04.363485719 +0200
***************
*** 811,816 ****
--- 811,817 ----
  #ifdef FEAT_TEXT_PROP
      {"popup_close",   1, 1, f_popup_close},
      {"popup_create",  2, 2, f_popup_create},
+     {"popup_getoptions", 1, 1, f_popup_getoptions},
      {"popup_getposition", 1, 1, f_popup_getposition},
      {"popup_hide",    1, 1, f_popup_hide},
      {"popup_move",    2, 2, f_popup_move},
*** ../vim-8.1.1421/src/popupwin.c      2019-05-30 00:11:48.704086357 +0200
--- src/popupwin.c      2019-05-30 14:23:50.803455533 +0200
***************
*** 530,535 ****
--- 530,567 ----
        dict_add_number(dict, "col", wp->w_wincol + 1);
        dict_add_number(dict, "width", wp->w_width);
        dict_add_number(dict, "height", wp->w_height);
+       dict_add_number(dict, "visible",
+                                      (wp->w_popup_flags & POPF_HIDDEN) == 0);
+     }
+ }
+ 
+ /*
+  * f_popup_getoptions({id})
+  */
+     void
+ f_popup_getoptions(typval_T *argvars, typval_T *rettv)
+ {
+     dict_T    *dict;
+     int               id = (int)tv_get_number(argvars);
+     win_T     *wp = find_popup_win(id);
+ 
+     if (rettv_dict_alloc(rettv) == OK)
+     {
+       if (wp == NULL)
+           return;
+ 
+       dict = rettv->vval.v_dict;
+       dict_add_number(dict, "line", wp->w_wantline);
+       dict_add_number(dict, "col", wp->w_wantcol);
+       dict_add_number(dict, "minwidth", wp->w_minwidth);
+       dict_add_number(dict, "minheight", wp->w_minheight);
+       dict_add_number(dict, "maxheight", wp->w_maxheight);
+       dict_add_number(dict, "maxwidth", wp->w_maxwidth);
+       dict_add_number(dict, "zindex", wp->w_zindex);
+ # if defined(FEAT_TIMERS)
+       dict_add_number(dict, "time", wp->w_popup_timer != NULL
+                                ?  (long)wp->w_popup_timer->tr_interval : 0L);
+ # endif
      }
  }
  #endif // FEAT_TEXT_PROP
*** ../vim-8.1.1421/src/proto/popupwin.pro      2019-05-30 00:11:48.704086357 
+0200
--- src/proto/popupwin.pro      2019-05-30 14:11:15.287769511 +0200
***************
*** 10,14 ****
--- 10,15 ----
  void close_all_popups(void);
  void ex_popupclear(exarg_T *eap);
  void f_popup_move(typval_T *argvars, typval_T *rettv);
+ void f_popup_getoptions(typval_T *argvars, typval_T *rettv);
  void f_popup_getposition(typval_T *argvars, typval_T *rettv);
  /* vim: set ft=c : */
*** ../vim-8.1.1421/src/testdir/test_popupwin.vim       2019-05-30 
00:11:48.704086357 +0200
--- src/testdir/test_popupwin.vim       2019-05-30 14:28:02.174052682 +0200
***************
*** 108,123 ****
--- 108,126 ----
    redraw
    let line = join(map(range(1, 5), 'screenstring(1, v:val)'), '')
    call assert_equal('world', line)
+   call assert_equal(1, popup_getposition(winid).visible)
  
    call popup_hide(winid)
    redraw
    let line = join(map(range(1, 5), 'screenstring(1, v:val)'), '')
    call assert_equal('hello', line)
+   call assert_equal(0, popup_getposition(winid).visible)
  
    call popup_show(winid)
    redraw
    let line = join(map(range(1, 5), 'screenstring(1, v:val)'), '')
    call assert_equal('world', line)
+   call assert_equal(1, popup_getposition(winid).visible)
  
  
    call popup_close(winid)
***************
*** 178,183 ****
--- 181,187 ----
    call assert_equal(3, res.col)
    call assert_equal(10, res.width)
    call assert_equal(11, res.height)
+   call assert_equal(1, res.visible)
  
    call popup_close(winid)
  endfunc
***************
*** 215,219 ****
--- 219,266 ----
      call assert_equal(test[2], position.height)
  
      call popup_close(winid)
+     call assert_equal({}, popup_getposition(winid))
    endfor
  endfunc
+ 
+ func Test_popup_getoptions()
+   let winid = popup_create('hello', {
+     \ 'line': 2,
+     \ 'col': 3,
+     \ 'minwidth': 10,
+     \ 'minheight': 11,
+     \ 'maxwidth': 20,
+     \ 'maxheight': 21,
+     \ 'zindex': 100,
+     \ 'time': 5000,
+     \})
+   redraw
+   let res = popup_getoptions(winid)
+   call assert_equal(2, res.line)
+   call assert_equal(3, res.col)
+   call assert_equal(10, res.minwidth)
+   call assert_equal(11, res.minheight)
+   call assert_equal(20, res.maxwidth)
+   call assert_equal(21, res.maxheight)
+   call assert_equal(100, res.zindex)
+   if has('timers')
+     call assert_equal(5000, res.time)
+   endif
+   call popup_close(winid)
+ 
+   let winid = popup_create('hello', {})
+   redraw
+   let res = popup_getoptions(winid)
+   call assert_equal(0, res.line)
+   call assert_equal(0, res.col)
+   call assert_equal(0, res.minwidth)
+   call assert_equal(0, res.minheight)
+   call assert_equal(0, res.maxwidth)
+   call assert_equal(0, res.maxheight)
+   call assert_equal(50, res.zindex)
+   if has('timers')
+     call assert_equal(0, res.time)
+   endif
+   call popup_close(winid)
+   call assert_equal({}, popup_getoptions(winid))
+ endfunc
*** ../vim-8.1.1421/src/version.c       2019-05-30 00:11:48.704086357 +0200
--- src/version.c       2019-05-30 14:28:17.621969065 +0200
***************
*** 769,770 ****
--- 769,772 ----
  {   /* Add new patch number below this line */
+ /**/
+     1422,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
50. The last girl you picked up was only a jpeg.

 /// Bram Moolenaar -- [email protected] -- 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    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/201905301230.x4UCU1Rt023557%40masaka.moolenaar.net.
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui