@@ -192,7 +192,7 @@ popup_beval({what}, {options}) *popup_beval()*
192192 let pos = screenpos(v:beval_winnr, v:beval_lnum, v:beval_col)
193193 call popup_create({what}, {
194194 \ 'pos': 'botleft',
195- \ 'line': pos.lnum - 1,
195+ \ 'line': pos.row - 1,
196196 \ 'col': pos.col,
197197 \ 'mousemoved': 'WORD',
198198 \ })
@@ -762,38 +762,49 @@ Example for using a popup window for 'ballooneval': >
762762 set ballooneval balloonevalterm
763763 set balloonexpr=BalloonExpr()
764764 let s:winid = 0
765+ let s:last_text = ''
765766
766767 func BalloonExpr()
767- if s:winid
768+ if s:winid && popup_getpos(s:winid) != {}
769+ " previous popup window still shows
770+ if v:beval_text == s:last_text
771+ " Still the same text, keep the existing popup
772+ return ''
773+ endif
768774 call popup_close(s:winid)
769- let s:winid = 0
770775 endif
771- let s:winid = popup_beval([bufname(v:beval_bufnr), v:beval_text], {})
776+ let s:winid = popup_beval(v:beval_text, {'mousemoved': 'word'})
777+ let s:last_text = v:beval_text
772778 return ''
773779 endfunc
774780<
775781If the text has to be obtained asynchronously return an empty string from the
776782expression function and call popup_beval() once the text is available. In
777- this example similated with a timer callback: >
783+ this example simulated with a timer callback: >
778784
779785 set ballooneval balloonevalterm
780786 set balloonexpr=BalloonExpr()
781787 let s:winid = 0
788+ let s:balloonText = ''
782789
783790 func BalloonExpr()
784- if s:winid
791+ if s:winid && popup_getpos(s:winid) != {}
792+ " previous popup window still shows
793+ if v:beval_text == s:balloonText
794+ " Still the same text, keep the existing popup
795+ return ''
796+ endif
785797 call popup_close(s:winid)
786798 let s:winid = 0
787799 endif
788800 " simulate an asynchronous loopup for the text to display
789- let s:balloonFile = bufname(v:beval_bufnr)
790- let s:balloonWord = v:beval_text
801+ let s:balloonText = v:beval_text
791802 call timer_start(100, 'ShowPopup')
792803 return ''
793804 endfunc
794805
795806 func ShowPopup(id)
796- let s:winid = popup_beval([s:balloonFile, s:balloonWord], { })
807+ let s:winid = popup_beval(s:balloonText, {'mousemoved': 'word' })
797808 endfunc
798809<
799810
0 commit comments