mirror of
https://github.com/vim/vim.git
synced 2025-09-15 23:23:38 -04:00
patch 8.2.0194: some commands can cause problems in terminal popup
Problem: Some commands can cause problems in terminal popup. Solution: Disallow more commands.
This commit is contained in:
parent
284d1c24e2
commit
3c01c4a028
@ -638,7 +638,7 @@ do_argfile(exarg_T *eap, int argn)
|
||||
char_u *p;
|
||||
int old_arg_idx = curwin->w_arg_idx;
|
||||
|
||||
if (ERROR_IF_POPUP_WINDOW)
|
||||
if (ERROR_IF_ANY_POPUP_WINDOW)
|
||||
return;
|
||||
if (argn < 0 || argn >= ARGCOUNT)
|
||||
{
|
||||
|
@ -4633,7 +4633,7 @@ ex_doautocmd(exarg_T *eap)
|
||||
static void
|
||||
ex_bunload(exarg_T *eap)
|
||||
{
|
||||
if (ERROR_IF_POPUP_WINDOW)
|
||||
if (ERROR_IF_ANY_POPUP_WINDOW)
|
||||
return;
|
||||
eap->errmsg = do_bufdel(
|
||||
eap->cmdidx == CMD_bdelete ? DOBUF_DEL
|
||||
@ -4649,7 +4649,7 @@ ex_bunload(exarg_T *eap)
|
||||
static void
|
||||
ex_buffer(exarg_T *eap)
|
||||
{
|
||||
if (ERROR_IF_POPUP_WINDOW)
|
||||
if (ERROR_IF_ANY_POPUP_WINDOW)
|
||||
return;
|
||||
if (*eap->arg)
|
||||
eap->errmsg = e_trailing;
|
||||
@ -4683,7 +4683,7 @@ ex_bmodified(exarg_T *eap)
|
||||
static void
|
||||
ex_bnext(exarg_T *eap)
|
||||
{
|
||||
if (ERROR_IF_POPUP_WINDOW)
|
||||
if (ERROR_IF_ANY_POPUP_WINDOW)
|
||||
return;
|
||||
|
||||
goto_buffer(eap, DOBUF_CURRENT, FORWARD, (int)eap->line2);
|
||||
@ -4700,7 +4700,7 @@ ex_bnext(exarg_T *eap)
|
||||
static void
|
||||
ex_bprevious(exarg_T *eap)
|
||||
{
|
||||
if (ERROR_IF_POPUP_WINDOW)
|
||||
if (ERROR_IF_ANY_POPUP_WINDOW)
|
||||
return;
|
||||
|
||||
goto_buffer(eap, DOBUF_CURRENT, BACKWARD, (int)eap->line2);
|
||||
@ -4717,7 +4717,7 @@ ex_bprevious(exarg_T *eap)
|
||||
static void
|
||||
ex_brewind(exarg_T *eap)
|
||||
{
|
||||
if (ERROR_IF_POPUP_WINDOW)
|
||||
if (ERROR_IF_ANY_POPUP_WINDOW)
|
||||
return;
|
||||
|
||||
goto_buffer(eap, DOBUF_FIRST, FORWARD, 0);
|
||||
@ -4732,7 +4732,7 @@ ex_brewind(exarg_T *eap)
|
||||
static void
|
||||
ex_blast(exarg_T *eap)
|
||||
{
|
||||
if (ERROR_IF_POPUP_WINDOW)
|
||||
if (ERROR_IF_ANY_POPUP_WINDOW)
|
||||
return;
|
||||
|
||||
goto_buffer(eap, DOBUF_LAST, BACKWARD, 0);
|
||||
@ -5762,7 +5762,7 @@ ex_splitview(exarg_T *eap)
|
||||
|| eap->cmdidx == CMD_tabfind
|
||||
|| eap->cmdidx == CMD_tabnew;
|
||||
|
||||
if (ERROR_IF_POPUP_WINDOW)
|
||||
if (ERROR_IF_ANY_POPUP_WINDOW)
|
||||
return;
|
||||
|
||||
#ifdef FEAT_GUI
|
||||
@ -6145,7 +6145,8 @@ do_exedit(
|
||||
int need_hide;
|
||||
int exmode_was = exmode_active;
|
||||
|
||||
if (eap->cmdidx != CMD_pedit && ERROR_IF_POPUP_WINDOW)
|
||||
if ((eap->cmdidx != CMD_pedit && ERROR_IF_POPUP_WINDOW)
|
||||
|| ERROR_IF_TERM_POPUP_WINDOW)
|
||||
return;
|
||||
/*
|
||||
* ":vi" command ends Ex mode.
|
||||
|
@ -344,9 +344,11 @@
|
||||
|
||||
// Give an error in curwin is a popup window and evaluate to TRUE.
|
||||
#ifdef FEAT_PROP_POPUP
|
||||
# define ERROR_IF_POPUP_WINDOW error_if_popup_window()
|
||||
# define ERROR_IF_POPUP_WINDOW error_if_popup_window(FALSE)
|
||||
# define ERROR_IF_ANY_POPUP_WINDOW error_if_popup_window(TRUE)
|
||||
#else
|
||||
# define ERROR_IF_POPUP_WINDOW 0
|
||||
# define ERROR_IF_ANY_POPUP_WINDOW 0
|
||||
#endif
|
||||
#if defined(FEAT_PROP_POPUP) && defined(FEAT_TERMINAL)
|
||||
# define ERROR_IF_TERM_POPUP_WINDOW error_if_term_popup_window()
|
||||
|
@ -2360,7 +2360,7 @@ f_popup_close(typval_T *argvars, typval_T *rettv UNUSED)
|
||||
int id = (int)tv_get_number(argvars);
|
||||
win_T *wp;
|
||||
|
||||
if (ERROR_IF_POPUP_WINDOW)
|
||||
if (ERROR_IF_ANY_POPUP_WINDOW)
|
||||
return;
|
||||
|
||||
wp = find_popup_win(id);
|
||||
@ -2511,7 +2511,7 @@ popup_close_tabpage(tabpage_T *tp, int id)
|
||||
void
|
||||
close_all_popups(void)
|
||||
{
|
||||
if (ERROR_IF_POPUP_WINDOW)
|
||||
if (ERROR_IF_ANY_POPUP_WINDOW)
|
||||
return;
|
||||
while (first_popupwin != NULL)
|
||||
popup_close(first_popupwin->w_id);
|
||||
@ -2845,14 +2845,14 @@ f_popup_getoptions(typval_T *argvars, typval_T *rettv)
|
||||
}
|
||||
|
||||
int
|
||||
error_if_popup_window()
|
||||
error_if_popup_window(int also_with_term UNUSED)
|
||||
{
|
||||
// win_execute() may set "curwin" to a popup window temporarily, but many
|
||||
// commands are disallowed then. When a terminal runs in the popup most
|
||||
// things are allowed.
|
||||
if (WIN_IS_POPUP(curwin)
|
||||
# ifdef FEAT_TERMINAL
|
||||
&& curbuf->b_term == NULL
|
||||
&& (also_with_term || curbuf->b_term == NULL)
|
||||
# endif
|
||||
)
|
||||
{
|
||||
|
@ -41,7 +41,7 @@ void f_popup_setoptions(typval_T *argvars, typval_T *rettv);
|
||||
void f_popup_getpos(typval_T *argvars, typval_T *rettv);
|
||||
void f_popup_locate(typval_T *argvars, typval_T *rettv);
|
||||
void f_popup_getoptions(typval_T *argvars, typval_T *rettv);
|
||||
int error_if_popup_window(void);
|
||||
int error_if_popup_window(int also_with_term);
|
||||
int error_if_term_popup_window(void);
|
||||
void popup_reset_handled(int handled_flag);
|
||||
win_T *find_next_popup(int lowest, int handled_flag);
|
||||
|
@ -2357,7 +2357,7 @@ func Test_terminal_in_popup()
|
||||
call VerifyScreenDump(buf, 'Test_terminal_popup_3', {})
|
||||
|
||||
call term_sendkeys(buf, ":q\<CR>")
|
||||
call term_wait(buf, 50) " wait for terminal to vanish
|
||||
call term_wait(buf, 100) " wait for terminal to vanish
|
||||
|
||||
call StopVimInTerminal(buf)
|
||||
call delete('XtermPopup')
|
||||
|
@ -742,6 +742,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
194,
|
||||
/**/
|
||||
193,
|
||||
/**/
|
||||
|
10
src/window.c
10
src/window.c
@ -122,7 +122,7 @@ do_window(
|
||||
#endif
|
||||
char_u cbuf[40];
|
||||
|
||||
if (ERROR_IF_POPUP_WINDOW)
|
||||
if (ERROR_IF_ANY_POPUP_WINDOW)
|
||||
return;
|
||||
|
||||
#ifdef FEAT_CMDWIN
|
||||
@ -784,7 +784,7 @@ check_split_disallowed()
|
||||
int
|
||||
win_split(int size, int flags)
|
||||
{
|
||||
if (ERROR_IF_POPUP_WINDOW)
|
||||
if (ERROR_IF_ANY_POPUP_WINDOW)
|
||||
return FAIL;
|
||||
|
||||
// When the ":tab" modifier was used open a new tab page instead.
|
||||
@ -1574,7 +1574,7 @@ win_exchange(long Prenum)
|
||||
win_T *wp2;
|
||||
int temp;
|
||||
|
||||
if (ERROR_IF_POPUP_WINDOW)
|
||||
if (ERROR_IF_ANY_POPUP_WINDOW)
|
||||
return;
|
||||
if (ONE_WINDOW) // just one window
|
||||
{
|
||||
@ -2441,7 +2441,7 @@ win_close(win_T *win, int free_buf)
|
||||
int had_diffmode = win->w_p_diff;
|
||||
#endif
|
||||
|
||||
if (ERROR_IF_POPUP_WINDOW)
|
||||
if (ERROR_IF_ANY_POPUP_WINDOW)
|
||||
return FAIL;
|
||||
|
||||
if (last_window())
|
||||
@ -4344,7 +4344,7 @@ win_goto(win_T *wp)
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_PROP_POPUP
|
||||
if (ERROR_IF_POPUP_WINDOW || ERROR_IF_TERM_POPUP_WINDOW)
|
||||
if (ERROR_IF_ANY_POPUP_WINDOW)
|
||||
return;
|
||||
if (popup_is_popup(wp))
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user