Skip to content

let 'previewpopup' like 'completepopup'#18873

Closed
Arkissa wants to merge 10 commits intovim:masterfrom
Arkissa:previewpopup_like_completepopup
Closed

let 'previewpopup' like 'completepopup'#18873
Arkissa wants to merge 10 commits intovim:masterfrom
Arkissa:previewpopup_like_completepopup

Conversation

@Arkissa
Copy link
Contributor

@Arkissa Arkissa commented Dec 6, 2025

I’ve seen many separate checks in the code specifically for the preview popup window, blocking certain parameters. I’m not familiar with Vim’s codebase, and I don’t really understand why this is done. My understanding is that a preview popup window is just a normal popup window (please correct me if I’m wrong), I also don’t really get why those checks are needed. This PR is meant to address the issue in #18826 and allow previewpopup to have richer configuration, so I removed some of the checks that tested whether a popup was a preview. I’m not sure what side effects this might cause.

@Arkissa
Copy link
Contributor Author

Arkissa commented Dec 6, 2025

@girishji @chrisbra Please review this PR

@chrisbra
Copy link
Member

chrisbra commented Dec 9, 2025

this needs a bit of updates to the documentation, I guess we need to also link from 'previewpopup' (this should also document what values can actually be set) to 'pumborder'?. Also, can you please update the tests for all possible option values that this allows then?

@Arkissa Arkissa force-pushed the previewpopup_like_completepopup branch 2 times, most recently from 17d111e to af93d70 Compare January 23, 2026 15:49
@Arkissa
Copy link
Contributor Author

Arkissa commented Jan 23, 2026

Sorry, I finally found some time to look this pr.

Also, can you please update the tests for all possible option values that this allows then?

I've use some time understanding how to use and create test cases, i will be update it later.
but i have same questions, the 'previewpopup' has borders by default, and now that we have a border option to configure, should this default border be retained or removed and left to the option to configure? @chrisbra

this is result.
image

@Arkissa Arkissa force-pushed the previewpopup_like_completepopup branch from f5e3f88 to fae0561 Compare January 26, 2026 15:42
@Arkissa Arkissa requested a review from girishji January 26, 2026 15:43
@chrisbra chrisbra closed this in 6eb0bfd Feb 24, 2026
@chrisbra
Copy link
Member

Thanks

@basilisk0315
Copy link

basilisk0315 commented Feb 24, 2026

After this patch, my windows build (clang 21.1.8) fails with a linker error because FEAT_QUICKFIX is not defined:

Building gui vim (33 jobs)
make --directory=/e/Users/John/Documents/Software/Utility/Vim/git/vim/src CC=clang CXX=clang++ FEATURES=NORMAL OPTIMIZE=MAXSPEED DIRECTX=no ICONV= GETTEXT= IME=no DYNAMIC_IME=no POSTSCRIPT=no OLE=no WINVER=0x0A00 CSCOPE=no NETBEANS=no CHANNEL=no TERMINAL=no SOUND=no XPM=no STATIC_STDCPLUS=yes GUI=yes CFLAGS=-I. -Iproto -DWIN32 -DWINVER=0x0A00 -D_WIN32_WINNT=0x0A00 -DHAVE_PATHDEF -DFEAT_NORMAL -DHAVE_STDINT_H -D__USE_MINGW_ANSI_STDIO -pipe -Wall -O3 -fomit-frame-pointer -fpie -fPIE -Db_lto=true -Db_lto_mode=thin -march=native -DFEAT_GUI_MSWIN -DFEAT_CLIPBOARD LFLAGS=-Wl,-nxcompat,-dynamicbase -Wl,--high-entropy-va -Wl,--as-needed -Wl,--pic-executable -municode -s -mwindows --environment-overrides --jobs=33 --keep-going --output-sync --no-print-directory --makefile=Make_ming.mak gvim.exe
llvm-windres  -DWIN32 -DWINVER=0x0A00 -D_WIN32_WINNT=0x0A00 -DHAVE_PATHDEF -DFEAT_NORMAL -DHAVE_STDINT_H -DFEAT_GUI_MSWIN -DFEAT_CLIPBOARD \
    --input-format=rc --output-format=coff -i vim.rc -o gobjx86-64/vimres.o
clang -c -I. -Iproto -DWIN32 -DWINVER=0x0A00 -D_WIN32_WINNT=0x0A00 -DHAVE_PATHDEF -DFEAT_NORMAL -DHAVE_STDINT_H -D__USE_MINGW_ANSI_STDIO -pipe -Wall -O3 -fomit-frame-pointer -fpie -fPIE -Db_lto=true -Db_lto_mode=thin -march=native -DFEAT_GUI_MSWIN -DFEAT_CLIPBOARD viminfo.c -o gobjx86-64/viminfo.o
clang -c -I. -Iproto -DWIN32 -DWINVER=0x0A00 -D_WIN32_WINNT=0x0A00 -DHAVE_PATHDEF -DFEAT_NORMAL -DHAVE_STDINT_H -D__USE_MINGW_ANSI_STDIO -pipe -Wall -O3 -fomit-frame-pointer -fpie -fPIE -Db_lto=true -Db_lto_mode=thin -march=native -DFEAT_GUI_MSWIN -DFEAT_CLIPBOARD ex_cmds2.c -o gobjx86-64/ex_cmds2.o
clang -c -I. -Iproto -DWIN32 -DWINVER=0x0A00 -D_WIN32_WINNT=0x0A00 -DHAVE_PATHDEF -DFEAT_NORMAL -DHAVE_STDINT_H -D__USE_MINGW_ANSI_STDIO -pipe -Wall -O3 -fomit-frame-pointer -fpie -fPIE -Db_lto=true -Db_lto_mode=thin -march=native -DFEAT_GUI_MSWIN -DFEAT_CLIPBOARD version.c -o gobjx86-64/version.o
clang -c -I. -Iproto -DWIN32 -DWINVER=0x0A00 -D_WIN32_WINNT=0x0A00 -DHAVE_PATHDEF -DFEAT_NORMAL -DHAVE_STDINT_H -D__USE_MINGW_ANSI_STDIO -pipe -Wall -O3 -fomit-frame-pointer -fpie -fPIE -Db_lto=true -Db_lto_mode=thin -march=native -DFEAT_GUI_MSWIN -DFEAT_CLIPBOARD hardcopy.c -o gobjx86-64/hardcopy.o
clang -c -I. -Iproto -DWIN32 -DWINVER=0x0A00 -D_WIN32_WINNT=0x0A00 -DHAVE_PATHDEF -DFEAT_NORMAL -DHAVE_STDINT_H -D__USE_MINGW_ANSI_STDIO -pipe -Wall -O3 -fomit-frame-pointer -fpie -fPIE -Db_lto=true -Db_lto_mode=thin -march=native -DFEAT_GUI_MSWIN -DFEAT_CLIPBOARD misc1.c -o gobjx86-64/misc1.o
clang -c -I. -Iproto -DWIN32 -DWINVER=0x0A00 -D_WIN32_WINNT=0x0A00 -DHAVE_PATHDEF -DFEAT_NORMAL -DHAVE_STDINT_H -D__USE_MINGW_ANSI_STDIO -pipe -Wall -O3 -fomit-frame-pointer -fpie -fPIE -Db_lto=true -Db_lto_mode=thin -march=native -DFEAT_GUI_MSWIN -DFEAT_CLIPBOARD ex_cmds.c -o gobjx86-64/ex_cmds.o
clang -c -I. -Iproto -DWIN32 -DWINVER=0x0A00 -D_WIN32_WINNT=0x0A00 -DHAVE_PATHDEF -DFEAT_NORMAL -DHAVE_STDINT_H -D__USE_MINGW_ANSI_STDIO -pipe -Wall -O3 -fomit-frame-pointer -fpie -fPIE -Db_lto=true -Db_lto_mode=thin -march=native -DFEAT_GUI_MSWIN -DFEAT_CLIPBOARD evalvars.c -o gobjx86-64/evalvars.o
clang -c -I. -Iproto -DWIN32 -DWINVER=0x0A00 -D_WIN32_WINNT=0x0A00 -DHAVE_PATHDEF -DFEAT_NORMAL -DHAVE_STDINT_H -D__USE_MINGW_ANSI_STDIO -pipe -Wall -O3 -fomit-frame-pointer -fpie -fPIE -Db_lto=true -Db_lto_mode=thin -march=native -DFEAT_GUI_MSWIN -DFEAT_CLIPBOARD optionstr.c -o gobjx86-64/optionstr.o
clang -c -I. -Iproto -DWIN32 -DWINVER=0x0A00 -D_WIN32_WINNT=0x0A00 -DHAVE_PATHDEF -DFEAT_NORMAL -DHAVE_STDINT_H -D__USE_MINGW_ANSI_STDIO -pipe -Wall -O3 -fomit-frame-pointer -fpie -fPIE -Db_lto=true -Db_lto_mode=thin -march=native -DFEAT_GUI_MSWIN -DFEAT_CLIPBOARD buffer.c -o gobjx86-64/buffer.o
clang -c -I. -Iproto -DWIN32 -DWINVER=0x0A00 -D_WIN32_WINNT=0x0A00 -DHAVE_PATHDEF -DFEAT_NORMAL -DHAVE_STDINT_H -D__USE_MINGW_ANSI_STDIO -pipe -Wall -O3 -fomit-frame-pointer -fpie -fPIE -Db_lto=true -Db_lto_mode=thin -march=native -DFEAT_GUI_MSWIN -DFEAT_CLIPBOARD popupwin.c -o gobjx86-64/popupwin.o
clang -c -I. -Iproto -DWIN32 -DWINVER=0x0A00 -D_WIN32_WINNT=0x0A00 -DHAVE_PATHDEF -DFEAT_NORMAL -DHAVE_STDINT_H -D__USE_MINGW_ANSI_STDIO -pipe -Wall -O3 -fomit-frame-pointer -fpie -fPIE -Db_lto=true -Db_lto_mode=thin -march=native -DFEAT_GUI_MSWIN -DFEAT_CLIPBOARD gui_w32.c -o gobjx86-64/gui_w32.o
clang -c -I. -Iproto -DWIN32 -DWINVER=0x0A00 -D_WIN32_WINNT=0x0A00 -DHAVE_PATHDEF -DFEAT_NORMAL -DHAVE_STDINT_H -D__USE_MINGW_ANSI_STDIO -pipe -Wall -O3 -fomit-frame-pointer -fpie -fPIE -Db_lto=true -Db_lto_mode=thin -march=native -DFEAT_GUI_MSWIN -DFEAT_CLIPBOARD evalfunc.c -o gobjx86-64/evalfunc.o
clang -I. -Iproto -DWIN32 -DWINVER=0x0A00 -D_WIN32_WINNT=0x0A00 -DHAVE_PATHDEF -DFEAT_NORMAL -DHAVE_STDINT_H -D__USE_MINGW_ANSI_STDIO -pipe -Wall -O3 -fomit-frame-pointer -fpie -fPIE -Db_lto=true -Db_lto_mode=thin -march=native -DFEAT_GUI_MSWIN -DFEAT_CLIPBOARD -Wl,-nxcompat,-dynamicbase -Wl,--high-entropy-va -Wl,--as-needed -Wl,--pic-executable -municode -s -mwindows -o gvim.exe gobjx86-64/alloc.o gobjx86-64/arabic.o gobjx86-64/arglist.o gobjx86-64/autocmd.o gobjx86-64/beval.o gobjx86-64/blob.o gobjx86-64/blowfish.o gobjx86-64/buffer.o gobjx86-64/bufwrite.o gobjx86-64/change.o gobjx86-64/charset.o gobjx86-64/cindent.o gobjx86-64/clientserver.o gobjx86-64/clipboard.o gobjx86-64/cmdexpand.o gobjx86-64/cmdhist.o gobjx86-64/crypt.o gobjx86-64/crypt_zip.o gobjx86-64/debugger.o gobjx86-64/dict.o gobjx86-64/diff.o gobjx86-64/digraph.o gobjx86-64/drawline.o gobjx86-64/drawscreen.o gobjx86-64/edit.o gobjx86-64/eval.o gobjx86-64/evalbuffer.o gobjx86-64/evalfunc.o gobjx86-64/evalvars.o gobjx86-64/evalwindow.o gobjx86-64/ex_cmds.o gobjx86-64/ex_cmds2.o gobjx86-64/ex_docmd.o gobjx86-64/ex_eval.o gobjx86-64/ex_getln.o gobjx86-64/fileio.o gobjx86-64/filepath.o gobjx86-64/findfile.o gobjx86-64/float.o gobjx86-64/fold.o gobjx86-64/fuzzy.o gobjx86-64/getchar.o gobjx86-64/gc.o gobjx86-64/gui_xim.o gobjx86-64/hardcopy.o gobjx86-64/hashtab.o gobjx86-64/help.o gobjx86-64/highlight.o gobjx86-64/if_cscope.o gobjx86-64/indent.o gobjx86-64/insexpand.o gobjx86-64/json.o gobjx86-64/linematch.o gobjx86-64/list.o gobjx86-64/locale.o gobjx86-64/logfile.o gobjx86-64/main.o gobjx86-64/map.o gobjx86-64/mark.o gobjx86-64/match.o gobjx86-64/memfile.o gobjx86-64/memline.o gobjx86-64/menu.o gobjx86-64/message.o gobjx86-64/misc1.o gobjx86-64/misc2.o gobjx86-64/mouse.o gobjx86-64/move.o gobjx86-64/mbyte.o gobjx86-64/normal.o gobjx86-64/ops.o gobjx86-64/option.o gobjx86-64/optionstr.o gobjx86-64/os_mswin.o gobjx86-64/os_win32.o gobjx86-64/pathdef.o gobjx86-64/popupmenu.o gobjx86-64/popupwin.o gobjx86-64/profiler.o gobjx86-64/quickfix.o gobjx86-64/regexp.o gobjx86-64/register.o gobjx86-64/scriptfile.o gobjx86-64/screen.o gobjx86-64/search.o gobjx86-64/session.o gobjx86-64/sha256.o gobjx86-64/sign.o gobjx86-64/spell.o gobjx86-64/spellfile.o gobjx86-64/spellsuggest.o gobjx86-64/strings.o gobjx86-64/syntax.o gobjx86-64/tabpanel.o gobjx86-64/tag.o gobjx86-64/term.o gobjx86-64/testing.o gobjx86-64/textformat.o gobjx86-64/textobject.o gobjx86-64/textprop.o gobjx86-64/time.o gobjx86-64/tuple.o gobjx86-64/typval.o gobjx86-64/ui.o gobjx86-64/undo.o gobjx86-64/usercmd.o gobjx86-64/userfunc.o gobjx86-64/version.o gobjx86-64/vim9class.o gobjx86-64/vim9cmds.o gobjx86-64/vim9compile.o gobjx86-64/vim9execute.o gobjx86-64/vim9expr.o gobjx86-64/vim9generics.o gobjx86-64/vim9instr.o gobjx86-64/vim9script.o gobjx86-64/vim9type.o gobjx86-64/viminfo.o gobjx86-64/winclip.o gobjx86-64/window.o gobjx86-64/os_w32exe.o gobjx86-64/vimres.o gobjx86-64/xdiffi.o gobjx86-64/xemit.o gobjx86-64/xprepare.o gobjx86-64/xutils.o gobjx86-64/xhistogram.o gobjx86-64/xpatience.o gobjx86-64/gui.o gobjx86-64/gui_w32.o gobjx86-64/gui_beval.o -lkernel32 -luser32 -lgdi32 -ladvapi32 -lcomdlg32 -lcomctl32 -lnetapi32 -lversion -lgcc_eh -Wl,-Bstatic -lwinpthread -Wl,-Bdynamic -lole32 -luuid       
E:/msys64/ucrt64/bin/ld: gobjx86-64/optionstr.o:optionstr.c:(.text+0x5250): undefined reference to `popup_close_info'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [Make_cyg_ming.mak:1189: gvim.exe] Error 1

This PR inserts a call to popup_close_info() in function did_set_previewpopup(). This fails if FEAT_QUICKFIX is not defined.

In other parts of the code popup_close_info() is only called if both FEAT_PROP_POPUP and FEAT_QUICKFIX are defined.

A simple fix (that works for me) is to add #if defined(FEAT_QUICKFIX) and #endif around the call. Like so:

did_set_previewpopup(optset_T *args UNUSED)
{
    if (parse_previewpopup(NULL) == FAIL)
	return e_invalid_argument;

#if defined(FEAT_QUICKFIX)
    popup_close_info();
#endif
    return NULL;
}

Cheers
John

@chrisbra
Copy link
Member

thanks, i include it

chrisbra pushed a commit that referenced this pull request Feb 25, 2026
Problem:  Compile error in did_set_previewpopup() when quickfix
          feature is not included (John Marriott, after v9.2.0051)
Solution: Add ifdef FEAT_QUICKFIX (John Marriott)

related: #18873

Signed-off-by: John Marriott <[email protected]>
Signed-off-by: Christian Brabandt <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants