# HG changeset patch # User Bram Moolenaar # Date 1567614603 -7200 # Node ID a170c48e0f91edf82fd06e31a61238f80db2ed16 # Parent cf3bf7a0d3e2a27a9de79602db3924ecdd44fe1c patch 8.1.1982: more functions can be used as methods Commit: https://github.com/vim/vim/commit/6a124e622cfe52619781c6a02119177a44d09210 Author: Bram Moolenaar Date: Wed Sep 4 18:15:19 2019 +0200 patch 8.1.1982: more functions can be used as methods Problem: More functions can be used as methods. Solution: Make popup functions usable as a method. diff --git a/runtime/doc/popup.txt b/runtime/doc/popup.txt --- a/runtime/doc/popup.txt +++ b/runtime/doc/popup.txt @@ -189,6 +189,9 @@ popup_atcursor({what}, {options}) *pop \ }) < 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,7 +206,9 @@ popup_beval({what}, {options}) *popup_ < 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,6 +223,8 @@ popup_close({id} [, {result}]) *popup 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,6 +247,8 @@ popup_create({what}, {options}) *popu 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,6 +270,8 @@ popup_dialog({what}, {options}) *popu < 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,6 +348,8 @@ popup_getoptions({id}) *popup_getopt 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,6 +374,8 @@ popup_getpos({id}) *popup_getpos()* 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,6 +384,8 @@ popup_hide({id}) *popup_hide()* 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,6 +423,8 @@ popup_menu({what}, {options}) *popup \ 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,6 +441,8 @@ popup_move({id}, {options}) *popup_m 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,6 +470,8 @@ popup_notification({what}, {options}) 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,6 +508,9 @@ popup_setoptions({id}, {options}) *pop 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,6 +518,8 @@ popup_settext({id}, {text}) *popup_se 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* diff --git a/src/evalfunc.c b/src/evalfunc.c --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -633,26 +633,26 @@ static funcentry_T global_functions[] = {"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_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, 0, f_popup_close}, - {"popup_create", 2, 2, 0, f_popup_create}, - {"popup_dialog", 2, 2, 0, f_popup_dialog}, + {"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, 0, f_popup_getoptions}, - {"popup_getpos", 1, 1, 0, f_popup_getpos}, - {"popup_hide", 1, 1, 0, f_popup_hide}, + {"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, 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}, + {"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}, diff --git a/src/testdir/test_popupwin.vim b/src/testdir/test_popupwin.vim --- a/src/testdir/test_popupwin.vim +++ b/src/testdir/test_popupwin.vim @@ -145,7 +145,7 @@ func Test_popup_with_border_and_padding( \ 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)) + 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,7 +337,7 @@ func Test_popup_firstline() 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) + eval winid->popup_close() let winid = popup_create(['xxx']->repeat(50), #{ \ maxheight: 3, @@ -878,7 +878,7 @@ func Test_popup_hide() " buffer is still listed but hidden call assert_match(winbufnr(winid) .. 'u h.*\[Popup\]', execute('ls u')) - call popup_show(winid) + eval winid->popup_show() redraw let line = join(map(range(1, 5), 'screenstring(1, v:val)'), '') call assert_equal('world', line) @@ -894,7 +894,7 @@ func Test_popup_hide() call assert_fails('call popup_hide(win_getid())', 'E993:') " no error non-existing window - call popup_hide(1234234) + eval 1234234->popup_hide() call popup_show(41234234) bwipe! @@ -920,7 +920,7 @@ func Test_popup_move() let line = join(map(range(1, 6), 'screenstring(2, v:val)'), '') call assert_equal('~world', line) - call popup_move(winid, #{line: 1}) + eval winid->popup_move(#{line: 1}) redraw let line = join(map(range(1, 6), 'screenstring(1, v:val)'), '') call assert_equal('hworld', line) @@ -1076,7 +1076,7 @@ func Test_popup_atcursor() call cursor(3, 4) redraw - let winid = popup_atcursor('vim', {}) + let winid = 'vim'->popup_atcursor({}) redraw let line = join(map(range(1, 17), 'screenstring(2, v:val)'), '') call assert_equal('xxxvimxxxxxxxxxxx', line) @@ -1144,7 +1144,7 @@ func Test_popup_beval() set balloonexpr=BalloonExpr() set balloondelay=100 func BalloonExpr() - let s:winid = popup_beval([v:beval_text], {}) + let s:winid = [v:beval_text]->popup_beval({}) return '' endfunc func Hover() @@ -1199,7 +1199,7 @@ func Test_popup_filter() return 0 endfunc - let winid = popup_create('something', #{filter: 'MyPopupFilter'}) + let winid = 'something'->popup_create(#{filter: 'MyPopupFilter'}) redraw " e is consumed by the filter @@ -1787,7 +1787,7 @@ func Test_popup_settext() let lines =<< trim END let opts = #{wrap: 0} let p = popup_create('test', opts) - call popup_settext(p, 'this is a text') + eval p->popup_settext('this is a text') END call writefile(lines, 'XtestPopupSetText') @@ -1840,7 +1840,7 @@ func Test_popup_hidden() let s:cb_winid = a:id let s:cb_res = a:res endfunc - let winid = popup_dialog('make a choice', #{hidden: 1, + let winid = 'make a choice'->popup_dialog(#{hidden: 1, \ filter: 'popup_filter_yesno', \ callback: 'QuitCallback', \ }) @@ -2020,7 +2020,7 @@ func Test_popupwin_width() \ maxheight: 10, \ }) for top in range(1, 20) - call popup_setoptions(winid, #{firstline: top}) + eval winid->popup_setoptions(#{firstline: top}) redraw call assert_equal(19, popup_getpos(winid).width) endfor @@ -2100,8 +2100,9 @@ func Test_popup_menu_with_scrollbar() 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'], #{ + eval ['one', 'two', 'three', 'four', 'five', + \ 'six', 'seven', 'eight', 'nine'] + \ ->popup_menu(#{ \ minwidth: 8, \ maxheight: 3, \ }) @@ -2435,7 +2436,7 @@ func Get_popupmenu_lines() call setline(1, 'text text text text text text text ') func ChangeColor() let id = popup_findinfo() - call popup_setoptions(id, #{highlight: 'InfoPopup'}) + eval id->popup_setoptions(#{highlight: 'InfoPopup'}) endfunc END return lines @@ -2522,7 +2523,7 @@ endfunc func Test_popupwin_recycle_bnr() let bufnr = popup_notification('nothing wrong', {})->winbufnr() call popup_clear() - let winid = popup_notification('nothing wrong', {}) + let winid = 'nothing wrong'->popup_notification({}) call assert_equal(bufnr, winbufnr(winid)) call popup_clear() endfunc diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -758,6 +758,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1982, +/**/ 1981, /**/ 1980,