To: vim_dev@googlegroups.com Subject: Patch 8.1.1982 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.1.1982 Problem: More functions can be used as methods. Solution: Make popup functions usable as a method. Files: runtime/doc/popup.txt, src/evalfunc.c, src/testdir/test_popupwin.vim *** ../vim-8.1.1981/runtime/doc/popup.txt 2019-09-03 22:08:13.673035035 +0200 --- runtime/doc/popup.txt 2019-09-04 18:12:49.439360484 +0200 *************** *** 189,194 **** --- 189,197 ---- \ }) < Use {options} to change the properties. + Can also be used as a |method|: > + GetText()->popup_atcursor({}) + popup_beval({what}, {options}) *popup_beval()* Show the {what} above the position from 'ballooneval' and *************** *** 203,209 **** < Use {options} to change the properties. See |popup_beval_example| for an example use. ! *popup_clear()* popup_clear() Emergency solution to a misbehaving plugin: close all popup windows for the current tab and global popups. --- 206,214 ---- < Use {options} to change the properties. See |popup_beval_example| for an example use. ! Can also be used as a |method|: > ! GetText()->popup_beval({}) ! < *popup_clear()* popup_clear() Emergency solution to a misbehaving plugin: close all popup windows for the current tab and global popups. *************** *** 218,223 **** --- 223,230 ---- it will be passed as the second argument of the callback. Otherwise zero is passed to the callback. + Can also be used as a |method|: > + GetPopup()->popup_close() popup_create({what}, {options}) *popup_create()* Open a popup window showing {what}, which is either: *************** *** 240,245 **** --- 247,254 ---- call setbufline(bufnr, 2, 'second line') < In case of failure zero is returned. + Can also be used as a |method|: > + GetText()->popup_create({}) popup_dialog({what}, {options}) *popup_dialog()* Just like |popup_create()| but with these default options: > *************** *** 261,266 **** --- 270,277 ---- < By default the dialog can be dragged, so that text below it can be read if needed. + Can also be used as a |method|: > + GetText()->popup_dialog({}) popup_filter_menu({id}, {key}) *popup_filter_menu()* Filter that can be used for a popup. These keys can be used: *************** *** 337,342 **** --- 348,355 ---- If popup window {id} is not found an empty Dict is returned. + Can also be used as a |method|: > + GetPopup()->popup_getoptions() popup_getpos({id}) *popup_getpos()* Return the position and size of popup {id}. Returns a Dict *************** *** 361,366 **** --- 374,381 ---- If popup window {id} is not found an empty Dict is returned. + Can also be used as a |method|: > + GetPopup()->popup_getpos() popup_hide({id}) *popup_hide()* If {id} is a displayed popup, hide it now. If the popup has a *************** *** 369,374 **** --- 384,391 ---- If window {id} does not exist nothing happens. If window {id} exists but is not a popup window an error is given. *E993* + Can also be used as a |method|: > + GetPopup()->popup_hide() popup_locate({row}, {col}) *popup_locate()* Return the |window-ID| of the popup at screen position {row} *************** *** 406,411 **** --- 423,430 ---- \ callback: 'ColorSelected', \ }) + < Can also be used as a |method|: > + GetChoices()->popup_menu({}) popup_move({id}, {options}) *popup_move()* Move popup {id} to the position specified with {options}. *************** *** 422,427 **** --- 441,448 ---- For {id} see `popup_hide()`. For other options see |popup_setoptions()|. + Can also be used as a |method|: > + GetPopup()->popup_move(options) popup_notification({what}, {options}) *popup_notification()* Show the {what} for 3 seconds at the top of the Vim window. *************** *** 449,454 **** --- 470,477 ---- notifications. Use {options} to change the properties. + Can also be used as a |method|: > + GetText()->popup_notification({}) popup_show({id}) *popup_show()* If {id} is a hidden popup, show it now. *************** *** 485,490 **** --- 508,516 ---- For "hidden" use |popup_hide()| and |popup_show()|. "tabpage" cannot be changed. + Can also be used as a |method|: > + GetPopup()->popup_setoptions(options) + popup_settext({id}, {text}) *popup_settext()* Set the text of the buffer in popup win {id}. {text} is the same as supplied to |popup_create()|, except that a buffer *************** *** 492,497 **** --- 518,525 ---- Does not change the window size or position, other than caused by the different text. + Can also be used as a |method|: > + GetPopup()->popup_settext('hello') ============================================================================== 3. Usage *popup-usage* *** ../vim-8.1.1981/src/evalfunc.c 2019-09-04 17:48:11.712877356 +0200 --- src/evalfunc.c 2019-09-04 18:13:17.719204079 +0200 *************** *** 633,658 **** {"perleval", 1, 1, 0, f_perleval}, #endif #ifdef FEAT_TEXT_PROP ! {"popup_atcursor", 2, 2, 0, f_popup_atcursor}, ! {"popup_beval", 2, 2, 0, f_popup_beval}, {"popup_clear", 0, 0, 0, f_popup_clear}, ! {"popup_close", 1, 2, 0, f_popup_close}, ! {"popup_create", 2, 2, 0, f_popup_create}, ! {"popup_dialog", 2, 2, 0, f_popup_dialog}, {"popup_filter_menu", 2, 2, 0, f_popup_filter_menu}, {"popup_filter_yesno", 2, 2, 0, f_popup_filter_yesno}, {"popup_findinfo", 0, 0, 0, f_popup_findinfo}, {"popup_findpreview", 0, 0, 0, f_popup_findpreview}, ! {"popup_getoptions", 1, 1, 0, f_popup_getoptions}, ! {"popup_getpos", 1, 1, 0, f_popup_getpos}, ! {"popup_hide", 1, 1, 0, f_popup_hide}, {"popup_locate", 2, 2, 0, f_popup_locate}, ! {"popup_menu", 2, 2, 0, f_popup_menu}, ! {"popup_move", 2, 2, 0, f_popup_move}, ! {"popup_notification", 2, 2, 0, f_popup_notification}, ! {"popup_setoptions", 2, 2, 0, f_popup_setoptions}, ! {"popup_settext", 2, 2, 0, f_popup_settext}, ! {"popup_show", 1, 1, 0, f_popup_show}, #endif #ifdef FEAT_FLOAT {"pow", 2, 2, FEARG_1, f_pow}, --- 633,658 ---- {"perleval", 1, 1, 0, f_perleval}, #endif #ifdef FEAT_TEXT_PROP ! {"popup_atcursor", 2, 2, FEARG_1, f_popup_atcursor}, ! {"popup_beval", 2, 2, FEARG_1, f_popup_beval}, {"popup_clear", 0, 0, 0, f_popup_clear}, ! {"popup_close", 1, 2, FEARG_1, f_popup_close}, ! {"popup_create", 2, 2, FEARG_1, f_popup_create}, ! {"popup_dialog", 2, 2, FEARG_1, f_popup_dialog}, {"popup_filter_menu", 2, 2, 0, f_popup_filter_menu}, {"popup_filter_yesno", 2, 2, 0, f_popup_filter_yesno}, {"popup_findinfo", 0, 0, 0, f_popup_findinfo}, {"popup_findpreview", 0, 0, 0, f_popup_findpreview}, ! {"popup_getoptions", 1, 1, FEARG_1, f_popup_getoptions}, ! {"popup_getpos", 1, 1, FEARG_1, f_popup_getpos}, ! {"popup_hide", 1, 1, FEARG_1, f_popup_hide}, {"popup_locate", 2, 2, 0, f_popup_locate}, ! {"popup_menu", 2, 2, FEARG_1, f_popup_menu}, ! {"popup_move", 2, 2, FEARG_1, f_popup_move}, ! {"popup_notification", 2, 2, FEARG_1, f_popup_notification}, ! {"popup_setoptions", 2, 2, FEARG_1, f_popup_setoptions}, ! {"popup_settext", 2, 2, FEARG_1, f_popup_settext}, ! {"popup_show", 1, 1, FEARG_1, f_popup_show}, #endif #ifdef FEAT_FLOAT {"pow", 2, 2, FEARG_1, f_pow}, *** ../vim-8.1.1981/src/testdir/test_popupwin.vim 2019-09-03 22:08:13.673035035 +0200 --- src/testdir/test_popupwin.vim 2019-09-04 18:14:15.446892131 +0200 *************** *** 145,151 **** \ scrollbar: 0, \ visible: 1} let winid = popup_create('hello border', #{line: 2, col: 3, border: []})", ! call assert_equal(with_border_or_padding, popup_getpos(winid)) let options = popup_getoptions(winid) call assert_equal([], options.border) call assert_false(has_key(options, "padding")) --- 145,151 ---- \ scrollbar: 0, \ visible: 1} let winid = popup_create('hello border', #{line: 2, col: 3, border: []})", ! call assert_equal(with_border_or_padding, winid->popup_getpos()) let options = popup_getoptions(winid) call assert_equal([], options.border) call assert_false(has_key(options, "padding")) *************** *** 337,343 **** call assert_equal(3, popup_getoptions(winid).firstline) call popup_setoptions(winid, #{firstline: 1}) call assert_equal(1, popup_getoptions(winid).firstline) ! call popup_close(winid) let winid = popup_create(['xxx']->repeat(50), #{ \ maxheight: 3, --- 337,343 ---- call assert_equal(3, popup_getoptions(winid).firstline) call popup_setoptions(winid, #{firstline: 1}) call assert_equal(1, popup_getoptions(winid).firstline) ! eval winid->popup_close() let winid = popup_create(['xxx']->repeat(50), #{ \ maxheight: 3, *************** *** 878,884 **** " buffer is still listed but hidden call assert_match(winbufnr(winid) .. 'u h.*\[Popup\]', execute('ls u')) ! call popup_show(winid) redraw let line = join(map(range(1, 5), 'screenstring(1, v:val)'), '') call assert_equal('world', line) --- 878,884 ---- " buffer is still listed but hidden call assert_match(winbufnr(winid) .. 'u h.*\[Popup\]', execute('ls u')) ! eval winid->popup_show() redraw let line = join(map(range(1, 5), 'screenstring(1, v:val)'), '') call assert_equal('world', line) *************** *** 894,900 **** call assert_fails('call popup_hide(win_getid())', 'E993:') " no error non-existing window ! call popup_hide(1234234) call popup_show(41234234) bwipe! --- 894,900 ---- call assert_fails('call popup_hide(win_getid())', 'E993:') " no error non-existing window ! eval 1234234->popup_hide() call popup_show(41234234) bwipe! *************** *** 920,926 **** let line = join(map(range(1, 6), 'screenstring(2, v:val)'), '') call assert_equal('~world', line) ! call popup_move(winid, #{line: 1}) redraw let line = join(map(range(1, 6), 'screenstring(1, v:val)'), '') call assert_equal('hworld', line) --- 920,926 ---- let line = join(map(range(1, 6), 'screenstring(2, v:val)'), '') call assert_equal('~world', line) ! eval winid->popup_move(#{line: 1}) redraw let line = join(map(range(1, 6), 'screenstring(1, v:val)'), '') call assert_equal('hworld', line) *************** *** 1076,1082 **** call cursor(3, 4) redraw ! let winid = popup_atcursor('vim', {}) redraw let line = join(map(range(1, 17), 'screenstring(2, v:val)'), '') call assert_equal('xxxvimxxxxxxxxxxx', line) --- 1076,1082 ---- call cursor(3, 4) redraw ! let winid = 'vim'->popup_atcursor({}) redraw let line = join(map(range(1, 17), 'screenstring(2, v:val)'), '') call assert_equal('xxxvimxxxxxxxxxxx', line) *************** *** 1144,1150 **** set balloonexpr=BalloonExpr() set balloondelay=100 func BalloonExpr() ! let s:winid = popup_beval([v:beval_text], {}) return '' endfunc func Hover() --- 1144,1150 ---- set balloonexpr=BalloonExpr() set balloondelay=100 func BalloonExpr() ! let s:winid = [v:beval_text]->popup_beval({}) return '' endfunc func Hover() *************** *** 1199,1205 **** return 0 endfunc ! let winid = popup_create('something', #{filter: 'MyPopupFilter'}) redraw " e is consumed by the filter --- 1199,1205 ---- return 0 endfunc ! let winid = 'something'->popup_create(#{filter: 'MyPopupFilter'}) redraw " e is consumed by the filter *************** *** 1787,1793 **** let lines =<< trim END let opts = #{wrap: 0} let p = popup_create('test', opts) ! call popup_settext(p, 'this is a text') END call writefile(lines, 'XtestPopupSetText') --- 1787,1793 ---- let lines =<< trim END let opts = #{wrap: 0} let p = popup_create('test', opts) ! eval p->popup_settext('this is a text') END call writefile(lines, 'XtestPopupSetText') *************** *** 1840,1846 **** let s:cb_winid = a:id let s:cb_res = a:res endfunc ! let winid = popup_dialog('make a choice', #{hidden: 1, \ filter: 'popup_filter_yesno', \ callback: 'QuitCallback', \ }) --- 1840,1846 ---- let s:cb_winid = a:id let s:cb_res = a:res endfunc ! let winid = 'make a choice'->popup_dialog(#{hidden: 1, \ filter: 'popup_filter_yesno', \ callback: 'QuitCallback', \ }) *************** *** 2020,2026 **** \ maxheight: 10, \ }) for top in range(1, 20) ! call popup_setoptions(winid, #{firstline: top}) redraw call assert_equal(19, popup_getpos(winid).width) endfor --- 2020,2026 ---- \ maxheight: 10, \ }) for top in range(1, 20) ! eval winid->popup_setoptions(#{firstline: top}) redraw call assert_equal(19, popup_getpos(winid).width) endfor *************** *** 2100,2107 **** call setline(1, range(1, 20)) hi ScrollThumb ctermbg=blue hi ScrollBar ctermbg=red ! call popup_menu(['one', 'two', 'three', 'four', 'five', ! \ 'six', 'seven', 'eight', 'nine'], #{ \ minwidth: 8, \ maxheight: 3, \ }) --- 2100,2108 ---- call setline(1, range(1, 20)) hi ScrollThumb ctermbg=blue hi ScrollBar ctermbg=red ! eval ['one', 'two', 'three', 'four', 'five', ! \ 'six', 'seven', 'eight', 'nine'] ! \ ->popup_menu(#{ \ minwidth: 8, \ maxheight: 3, \ }) *************** *** 2435,2441 **** call setline(1, 'text text text text text text text ') func ChangeColor() let id = popup_findinfo() ! call popup_setoptions(id, #{highlight: 'InfoPopup'}) endfunc END return lines --- 2436,2442 ---- call setline(1, 'text text text text text text text ') func ChangeColor() let id = popup_findinfo() ! eval id->popup_setoptions(#{highlight: 'InfoPopup'}) endfunc END return lines *************** *** 2522,2528 **** func Test_popupwin_recycle_bnr() let bufnr = popup_notification('nothing wrong', {})->winbufnr() call popup_clear() ! let winid = popup_notification('nothing wrong', {}) call assert_equal(bufnr, winbufnr(winid)) call popup_clear() endfunc --- 2523,2529 ---- func Test_popupwin_recycle_bnr() let bufnr = popup_notification('nothing wrong', {})->winbufnr() call popup_clear() ! let winid = 'nothing wrong'->popup_notification({}) call assert_equal(bufnr, winbufnr(winid)) call popup_clear() endfunc *** ../vim-8.1.1981/src/version.c 2019-09-04 17:48:11.712877356 +0200 --- src/version.c 2019-09-04 18:14:43.998741251 +0200 *************** *** 759,760 **** --- 759,762 ---- { /* Add new patch number below this line */ + /**/ + 1982, /**/ -- hundred-and-one symptoms of being an internet addict: 182. You may not know what is happening in the world, but you know every bit of net-gossip there is. /// 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 ///