From 0fe937fd8616fcd24b1b1ef2ab9f1657615dd22c Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Tue, 16 Jun 2020 22:42:04 +0200 Subject: patch 8.2.0991: cannot get window type for autocmd and preview window Problem: Cannot get window type for autocmd and preview window. Solution: Add types to win_gettype(). (Yegappan Lakshmanan, closes #6277) --- runtime/doc/eval.txt | 3 +++ src/evalwindow.c | 11 ++++++++--- src/testdir/test_autocmd.vim | 22 ++++++++++++++++++++++ src/testdir/test_preview.vim | 1 + src/version.c | 2 ++ 5 files changed, 36 insertions(+), 3 deletions(-) diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt index 4ab8bbd1ee..fe2e94e258 100644 --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -10864,7 +10864,10 @@ win_getid([{win} [, {tab}]]) *win_getid()* win_gettype([{nr}]) *win_gettype()* Return the type of the window: + "aucmdwin" autocommand window. Temporary window + used to execute autocommands. "popup" popup window |popup| + "preview" preview window |preview-window| "command" command-line window |cmdwin| (empty) normal window "unknown" window {nr} not found diff --git a/src/evalwindow.c b/src/evalwindow.c index 0db45bc9c2..585ff729f3 100644 --- a/src/evalwindow.c +++ b/src/evalwindow.c @@ -858,13 +858,18 @@ f_win_gettype(typval_T *argvars, typval_T *rettv) return; } } + if (wp == aucmd_win) + rettv->vval.v_string = vim_strsave((char_u *)"aucmdwin"); +#if defined(FEAT_QUICKFIX) + else if (wp->w_p_pvw) + rettv->vval.v_string = vim_strsave((char_u *)"preview"); +#endif #ifdef FEAT_PROP_POPUP - if (WIN_IS_POPUP(wp)) + else if (WIN_IS_POPUP(wp)) rettv->vval.v_string = vim_strsave((char_u *)"popup"); - else #endif #ifdef FEAT_CMDWIN - if (wp == curwin && cmdwin_type != 0) + else if (wp == curwin && cmdwin_type != 0) rettv->vval.v_string = vim_strsave((char_u *)"command"); #endif } diff --git a/src/testdir/test_autocmd.vim b/src/testdir/test_autocmd.vim index ffeaecac00..285d994364 100644 --- a/src/testdir/test_autocmd.vim +++ b/src/testdir/test_autocmd.vim @@ -2579,4 +2579,26 @@ func Test_BufDelete_changebuf() close! endfunc +" Test for the temporary internal window used to execute autocmds +func Test_autocmd_window() + %bw! + edit one.txt + tabnew two.txt + let g:blist = [] + augroup aucmd_win_test + au! + au BufEnter * call add(g:blist, [expand(''), + \ win_gettype(bufwinnr(expand('')))]) + augroup END + + doautoall BufEnter + call assert_equal([['one.txt', 'aucmdwin'], ['two.txt', '']], g:blist) + + augroup aucmd_win_test + au! + augroup END + augroup! aucmd_win_test + %bw! +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/testdir/test_preview.vim b/src/testdir/test_preview.vim index 628ad2bfb4..1bf1d3f8be 100644 --- a/src/testdir/test_preview.vim +++ b/src/testdir/test_preview.vim @@ -25,6 +25,7 @@ func Test_window_preview() " Go to the preview window wincmd P call assert_equal(1, &previewwindow) + call assert_equal('preview', win_gettype()) " Close preview window wincmd z diff --git a/src/version.c b/src/version.c index 57b092a370..9df09d1f90 100644 --- a/src/version.c +++ b/src/version.c @@ -754,6 +754,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 991, /**/ 990, /**/ -- cgit v1.2.3