mirror of
https://github.com/vim/vim.git
synced 2025-09-26 04:04:07 -04:00
patch 8.1.1438: some commands cause trouble in a popup window
Problem: Some commands cause trouble in a popup window. Solution: Add NOT_IN_POPUP_WINDOW.
This commit is contained in:
@@ -1864,6 +1864,8 @@ do_argfile(exarg_T *eap, int argn)
|
|||||||
char_u *p;
|
char_u *p;
|
||||||
int old_arg_idx = curwin->w_arg_idx;
|
int old_arg_idx = curwin->w_arg_idx;
|
||||||
|
|
||||||
|
if (NOT_IN_POPUP_WINDOW)
|
||||||
|
return;
|
||||||
if (argn < 0 || argn >= ARGCOUNT)
|
if (argn < 0 || argn >= ARGCOUNT)
|
||||||
{
|
{
|
||||||
if (ARGCOUNT <= 1)
|
if (ARGCOUNT <= 1)
|
||||||
|
@@ -5452,6 +5452,8 @@ ex_doautocmd(exarg_T *eap)
|
|||||||
static void
|
static void
|
||||||
ex_bunload(exarg_T *eap)
|
ex_bunload(exarg_T *eap)
|
||||||
{
|
{
|
||||||
|
if (NOT_IN_POPUP_WINDOW)
|
||||||
|
return;
|
||||||
eap->errmsg = do_bufdel(
|
eap->errmsg = do_bufdel(
|
||||||
eap->cmdidx == CMD_bdelete ? DOBUF_DEL
|
eap->cmdidx == CMD_bdelete ? DOBUF_DEL
|
||||||
: eap->cmdidx == CMD_bwipeout ? DOBUF_WIPE
|
: eap->cmdidx == CMD_bwipeout ? DOBUF_WIPE
|
||||||
@@ -5466,6 +5468,8 @@ ex_bunload(exarg_T *eap)
|
|||||||
static void
|
static void
|
||||||
ex_buffer(exarg_T *eap)
|
ex_buffer(exarg_T *eap)
|
||||||
{
|
{
|
||||||
|
if (NOT_IN_POPUP_WINDOW)
|
||||||
|
return;
|
||||||
if (*eap->arg)
|
if (*eap->arg)
|
||||||
eap->errmsg = e_trailing;
|
eap->errmsg = e_trailing;
|
||||||
else
|
else
|
||||||
@@ -6768,6 +6772,9 @@ ex_splitview(exarg_T *eap)
|
|||||||
|| eap->cmdidx == CMD_tabfind
|
|| eap->cmdidx == CMD_tabfind
|
||||||
|| eap->cmdidx == CMD_tabnew;
|
|| eap->cmdidx == CMD_tabnew;
|
||||||
|
|
||||||
|
if (NOT_IN_POPUP_WINDOW)
|
||||||
|
return;
|
||||||
|
|
||||||
#ifdef FEAT_GUI
|
#ifdef FEAT_GUI
|
||||||
need_mouse_correct = TRUE;
|
need_mouse_correct = TRUE;
|
||||||
#endif
|
#endif
|
||||||
@@ -6895,6 +6902,8 @@ ex_tabnext(exarg_T *eap)
|
|||||||
{
|
{
|
||||||
int tab_number;
|
int tab_number;
|
||||||
|
|
||||||
|
if (NOT_IN_POPUP_WINDOW)
|
||||||
|
return;
|
||||||
switch (eap->cmdidx)
|
switch (eap->cmdidx)
|
||||||
{
|
{
|
||||||
case CMD_tabfirst:
|
case CMD_tabfirst:
|
||||||
@@ -7146,6 +7155,8 @@ do_exedit(
|
|||||||
int need_hide;
|
int need_hide;
|
||||||
int exmode_was = exmode_active;
|
int exmode_was = exmode_active;
|
||||||
|
|
||||||
|
if (NOT_IN_POPUP_WINDOW)
|
||||||
|
return;
|
||||||
/*
|
/*
|
||||||
* ":vi" command ends Ex mode.
|
* ":vi" command ends Ex mode.
|
||||||
*/
|
*/
|
||||||
|
@@ -339,3 +339,9 @@
|
|||||||
|
|
||||||
/* Wether a command index indicates a user command. */
|
/* Wether a command index indicates a user command. */
|
||||||
#define IS_USER_CMDIDX(idx) ((int)(idx) < 0)
|
#define IS_USER_CMDIDX(idx) ((int)(idx) < 0)
|
||||||
|
|
||||||
|
#ifdef FEAT_TEXT_PROP
|
||||||
|
# define NOT_IN_POPUP_WINDOW not_in_popup_window()
|
||||||
|
#else
|
||||||
|
# define NOT_IN_POPUP_WINDOW 0
|
||||||
|
#endif
|
||||||
|
@@ -747,4 +747,16 @@ f_popup_getoptions(typval_T *argvars, typval_T *rettv)
|
|||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
not_in_popup_window()
|
||||||
|
{
|
||||||
|
if (bt_popup(curwin->w_buffer))
|
||||||
|
{
|
||||||
|
emsg(_("E994: Not allowed in a popup window"));
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
#endif // FEAT_TEXT_PROP
|
#endif // FEAT_TEXT_PROP
|
||||||
|
@@ -13,4 +13,5 @@ void ex_popupclear(exarg_T *eap);
|
|||||||
void f_popup_move(typval_T *argvars, typval_T *rettv);
|
void f_popup_move(typval_T *argvars, typval_T *rettv);
|
||||||
void f_popup_getpos(typval_T *argvars, typval_T *rettv);
|
void f_popup_getpos(typval_T *argvars, typval_T *rettv);
|
||||||
void f_popup_getoptions(typval_T *argvars, typval_T *rettv);
|
void f_popup_getoptions(typval_T *argvars, typval_T *rettv);
|
||||||
|
int not_in_popup_window(void);
|
||||||
/* vim: set ft=c : */
|
/* vim: set ft=c : */
|
||||||
|
@@ -108,8 +108,27 @@ endfunc
|
|||||||
func Test_win_execute_closing_curwin()
|
func Test_win_execute_closing_curwin()
|
||||||
split
|
split
|
||||||
let winid = popup_create('some text', {})
|
let winid = popup_create('some text', {})
|
||||||
call win_execute(winid, winnr() .. "close")
|
call assert_fails('call win_execute(winid, winnr() .. "close")', 'E994')
|
||||||
call assert_equal(1, winnr())
|
popupclear
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_win_execute_not_allowed()
|
||||||
|
let winid = popup_create('some text', {})
|
||||||
|
call assert_fails('call win_execute(winid, "split")', 'E994:')
|
||||||
|
call assert_fails('call win_execute(winid, "vsplit")', 'E994:')
|
||||||
|
call assert_fails('call win_execute(winid, "close")', 'E994:')
|
||||||
|
call assert_fails('call win_execute(winid, "bdelete")', 'E994:')
|
||||||
|
call assert_fails('call win_execute(winid, "tabnew")', 'E994:')
|
||||||
|
call assert_fails('call win_execute(winid, "tabnext")', 'E994:')
|
||||||
|
call assert_fails('call win_execute(winid, "next")', 'E994:')
|
||||||
|
call assert_fails('call win_execute(winid, "rewind")', 'E994:')
|
||||||
|
call assert_fails('call win_execute(winid, "buf")', 'E994:')
|
||||||
|
call assert_fails('call win_execute(winid, "edit")', 'E994:')
|
||||||
|
call assert_fails('call win_execute(winid, "enew")', 'E994:')
|
||||||
|
call assert_fails('call win_execute(winid, "wincmd x")', 'E994:')
|
||||||
|
call assert_fails('call win_execute(winid, "wincmd w")', 'E994:')
|
||||||
|
call assert_fails('call win_execute(winid, "wincmd t")', 'E994:')
|
||||||
|
call assert_fails('call win_execute(winid, "wincmd b")', 'E994:')
|
||||||
popupclear
|
popupclear
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
@@ -767,6 +767,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1438,
|
||||||
/**/
|
/**/
|
||||||
1437,
|
1437,
|
||||||
/**/
|
/**/
|
||||||
|
17
src/window.c
17
src/window.c
@@ -87,7 +87,8 @@ do_window(
|
|||||||
#endif
|
#endif
|
||||||
char_u cbuf[40];
|
char_u cbuf[40];
|
||||||
|
|
||||||
Prenum1 = Prenum == 0 ? 1 : Prenum;
|
if (NOT_IN_POPUP_WINDOW)
|
||||||
|
return;
|
||||||
|
|
||||||
#ifdef FEAT_CMDWIN
|
#ifdef FEAT_CMDWIN
|
||||||
# define CHECK_CMDWIN \
|
# define CHECK_CMDWIN \
|
||||||
@@ -102,6 +103,8 @@ do_window(
|
|||||||
# define CHECK_CMDWIN do { /**/ } while (0)
|
# define CHECK_CMDWIN do { /**/ } while (0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Prenum1 = Prenum == 0 ? 1 : Prenum;
|
||||||
|
|
||||||
switch (nchar)
|
switch (nchar)
|
||||||
{
|
{
|
||||||
/* split current window in two parts, horizontally */
|
/* split current window in two parts, horizontally */
|
||||||
@@ -732,6 +735,9 @@ cmd_with_count(
|
|||||||
int
|
int
|
||||||
win_split(int size, int flags)
|
win_split(int size, int flags)
|
||||||
{
|
{
|
||||||
|
if (NOT_IN_POPUP_WINDOW)
|
||||||
|
return FAIL;
|
||||||
|
|
||||||
/* When the ":tab" modifier was used open a new tab page instead. */
|
/* When the ":tab" modifier was used open a new tab page instead. */
|
||||||
if (may_open_tabpage() == OK)
|
if (may_open_tabpage() == OK)
|
||||||
return OK;
|
return OK;
|
||||||
@@ -1509,7 +1515,9 @@ win_exchange(long Prenum)
|
|||||||
win_T *wp2;
|
win_T *wp2;
|
||||||
int temp;
|
int temp;
|
||||||
|
|
||||||
if (ONE_WINDOW) /* just one window */
|
if (NOT_IN_POPUP_WINDOW)
|
||||||
|
return;
|
||||||
|
if (ONE_WINDOW) // just one window
|
||||||
{
|
{
|
||||||
beep_flush();
|
beep_flush();
|
||||||
return;
|
return;
|
||||||
@@ -2363,6 +2371,9 @@ win_close(win_T *win, int free_buf)
|
|||||||
tabpage_T *prev_curtab = curtab;
|
tabpage_T *prev_curtab = curtab;
|
||||||
frame_T *win_frame = win->w_frame->fr_parent;
|
frame_T *win_frame = win->w_frame->fr_parent;
|
||||||
|
|
||||||
|
if (NOT_IN_POPUP_WINDOW)
|
||||||
|
return FAIL;
|
||||||
|
|
||||||
if (last_window())
|
if (last_window())
|
||||||
{
|
{
|
||||||
emsg(_("E444: Cannot close last window"));
|
emsg(_("E444: Cannot close last window"));
|
||||||
@@ -4221,6 +4232,8 @@ win_goto(win_T *wp)
|
|||||||
win_T *owp = curwin;
|
win_T *owp = curwin;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (NOT_IN_POPUP_WINDOW)
|
||||||
|
return;
|
||||||
if (text_locked())
|
if (text_locked())
|
||||||
{
|
{
|
||||||
beep_flush();
|
beep_flush();
|
||||||
|
Reference in New Issue
Block a user