mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
patch 8.2.0577: not all modifiers supported for :options
Problem: Not all modifiers supported for :options. Solution: Use all cmdmod.split flags. (closes #4401)
This commit is contained in:
@@ -14,5 +14,6 @@ void ex_command(exarg_T *eap);
|
|||||||
void ex_comclear(exarg_T *eap);
|
void ex_comclear(exarg_T *eap);
|
||||||
void uc_clear(garray_T *gap);
|
void uc_clear(garray_T *gap);
|
||||||
void ex_delcommand(exarg_T *eap);
|
void ex_delcommand(exarg_T *eap);
|
||||||
|
size_t add_win_cmd_modifers(char_u *buf, int *multi_mods);
|
||||||
void do_ucmd(exarg_T *eap);
|
void do_ucmd(exarg_T *eap);
|
||||||
/* vim: set ft=c : */
|
/* vim: set ft=c : */
|
||||||
|
@@ -967,9 +967,13 @@ ex_source(exarg_T *eap)
|
|||||||
ex_options(
|
ex_options(
|
||||||
exarg_T *eap UNUSED)
|
exarg_T *eap UNUSED)
|
||||||
{
|
{
|
||||||
vim_setenv((char_u *)"OPTWIN_CMD",
|
char_u buf[500];
|
||||||
(char_u *)(cmdmod.tab ? "tab"
|
int multi_mods = 0;
|
||||||
: (cmdmod.split & WSP_VERT) ? "vert" : ""));
|
|
||||||
|
buf[0] = NUL;
|
||||||
|
(void)add_win_cmd_modifers(buf, &multi_mods);
|
||||||
|
|
||||||
|
vim_setenv((char_u *)"OPTWIN_CMD", buf);
|
||||||
cmd_source((char_u *)SYS_OPTWIN_FILE, NULL);
|
cmd_source((char_u *)SYS_OPTWIN_FILE, NULL);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@@ -87,6 +87,19 @@ func Test_options_command()
|
|||||||
" close option-window
|
" close option-window
|
||||||
close
|
close
|
||||||
|
|
||||||
|
" Open the option-window at the top.
|
||||||
|
set splitbelow
|
||||||
|
topleft options
|
||||||
|
call assert_equal(1, winnr())
|
||||||
|
close
|
||||||
|
|
||||||
|
" Open the option-window at the bottom.
|
||||||
|
set nosplitbelow
|
||||||
|
botright options
|
||||||
|
call assert_equal(winnr('$'), winnr())
|
||||||
|
close
|
||||||
|
set splitbelow&
|
||||||
|
|
||||||
" Open the option-window in a new tab.
|
" Open the option-window in a new tab.
|
||||||
tab options
|
tab options
|
||||||
" Check if the option-window is opened in a tab.
|
" Check if the option-window is opened in a tab.
|
||||||
@@ -94,7 +107,6 @@ func Test_options_command()
|
|||||||
call assert_notequal('option-window', bufname(''))
|
call assert_notequal('option-window', bufname(''))
|
||||||
normal gt
|
normal gt
|
||||||
call assert_equal('option-window', bufname(''))
|
call assert_equal('option-window', bufname(''))
|
||||||
|
|
||||||
" close option-window
|
" close option-window
|
||||||
close
|
close
|
||||||
|
|
||||||
|
@@ -4,63 +4,95 @@
|
|||||||
function Test_cmdmods()
|
function Test_cmdmods()
|
||||||
let g:mods = ''
|
let g:mods = ''
|
||||||
|
|
||||||
command! -nargs=* MyCmd let g:mods .= '<mods> '
|
command! -nargs=* MyCmd let g:mods = '<mods>'
|
||||||
|
|
||||||
MyCmd
|
MyCmd
|
||||||
|
call assert_equal('', g:mods)
|
||||||
aboveleft MyCmd
|
aboveleft MyCmd
|
||||||
|
call assert_equal('aboveleft', g:mods)
|
||||||
abo MyCmd
|
abo MyCmd
|
||||||
|
call assert_equal('aboveleft', g:mods)
|
||||||
belowright MyCmd
|
belowright MyCmd
|
||||||
|
call assert_equal('belowright', g:mods)
|
||||||
bel MyCmd
|
bel MyCmd
|
||||||
|
call assert_equal('belowright', g:mods)
|
||||||
botright MyCmd
|
botright MyCmd
|
||||||
|
call assert_equal('botright', g:mods)
|
||||||
bo MyCmd
|
bo MyCmd
|
||||||
|
call assert_equal('botright', g:mods)
|
||||||
browse MyCmd
|
browse MyCmd
|
||||||
|
call assert_equal('browse', g:mods)
|
||||||
bro MyCmd
|
bro MyCmd
|
||||||
|
call assert_equal('browse', g:mods)
|
||||||
confirm MyCmd
|
confirm MyCmd
|
||||||
|
call assert_equal('confirm', g:mods)
|
||||||
conf MyCmd
|
conf MyCmd
|
||||||
|
call assert_equal('confirm', g:mods)
|
||||||
hide MyCmd
|
hide MyCmd
|
||||||
|
call assert_equal('hide', g:mods)
|
||||||
hid MyCmd
|
hid MyCmd
|
||||||
|
call assert_equal('hide', g:mods)
|
||||||
keepalt MyCmd
|
keepalt MyCmd
|
||||||
|
call assert_equal('keepalt', g:mods)
|
||||||
keepa MyCmd
|
keepa MyCmd
|
||||||
|
call assert_equal('keepalt', g:mods)
|
||||||
keepjumps MyCmd
|
keepjumps MyCmd
|
||||||
|
call assert_equal('keepjumps', g:mods)
|
||||||
keepj MyCmd
|
keepj MyCmd
|
||||||
|
call assert_equal('keepjumps', g:mods)
|
||||||
keepmarks MyCmd
|
keepmarks MyCmd
|
||||||
|
call assert_equal('keepmarks', g:mods)
|
||||||
kee MyCmd
|
kee MyCmd
|
||||||
|
call assert_equal('keepmarks', g:mods)
|
||||||
keeppatterns MyCmd
|
keeppatterns MyCmd
|
||||||
|
call assert_equal('keeppatterns', g:mods)
|
||||||
keepp MyCmd
|
keepp MyCmd
|
||||||
|
call assert_equal('keeppatterns', g:mods)
|
||||||
leftabove MyCmd " results in :aboveleft
|
leftabove MyCmd " results in :aboveleft
|
||||||
|
call assert_equal('aboveleft', g:mods)
|
||||||
lefta MyCmd
|
lefta MyCmd
|
||||||
|
call assert_equal('aboveleft', g:mods)
|
||||||
lockmarks MyCmd
|
lockmarks MyCmd
|
||||||
|
call assert_equal('lockmarks', g:mods)
|
||||||
loc MyCmd
|
loc MyCmd
|
||||||
|
call assert_equal('lockmarks', g:mods)
|
||||||
" noautocmd MyCmd
|
" noautocmd MyCmd
|
||||||
noswapfile MyCmd
|
noswapfile MyCmd
|
||||||
|
call assert_equal('noswapfile', g:mods)
|
||||||
nos MyCmd
|
nos MyCmd
|
||||||
|
call assert_equal('noswapfile', g:mods)
|
||||||
rightbelow MyCmd " results in :belowright
|
rightbelow MyCmd " results in :belowright
|
||||||
|
call assert_equal('belowright', g:mods)
|
||||||
rightb MyCmd
|
rightb MyCmd
|
||||||
|
call assert_equal('belowright', g:mods)
|
||||||
" sandbox MyCmd
|
" sandbox MyCmd
|
||||||
silent MyCmd
|
silent MyCmd
|
||||||
|
call assert_equal('silent', g:mods)
|
||||||
sil MyCmd
|
sil MyCmd
|
||||||
|
call assert_equal('silent', g:mods)
|
||||||
tab MyCmd
|
tab MyCmd
|
||||||
|
call assert_equal('tab', g:mods)
|
||||||
topleft MyCmd
|
topleft MyCmd
|
||||||
|
call assert_equal('topleft', g:mods)
|
||||||
to MyCmd
|
to MyCmd
|
||||||
|
call assert_equal('topleft', g:mods)
|
||||||
" unsilent MyCmd
|
" unsilent MyCmd
|
||||||
verbose MyCmd
|
verbose MyCmd
|
||||||
|
call assert_equal('verbose', g:mods)
|
||||||
verb MyCmd
|
verb MyCmd
|
||||||
|
call assert_equal('verbose', g:mods)
|
||||||
vertical MyCmd
|
vertical MyCmd
|
||||||
|
call assert_equal('vertical', g:mods)
|
||||||
vert MyCmd
|
vert MyCmd
|
||||||
|
call assert_equal('vertical', g:mods)
|
||||||
|
|
||||||
aboveleft belowright botright browse confirm hide keepalt keepjumps
|
aboveleft belowright botright browse confirm hide keepalt keepjumps
|
||||||
\ keepmarks keeppatterns lockmarks noswapfile silent tab
|
\ keepmarks keeppatterns lockmarks noswapfile silent tab
|
||||||
\ topleft verbose vertical MyCmd
|
\ topleft verbose vertical MyCmd
|
||||||
|
|
||||||
call assert_equal(' aboveleft aboveleft belowright belowright botright ' .
|
call assert_equal('browse confirm hide keepalt keepjumps ' .
|
||||||
\ 'botright browse browse confirm confirm hide hide ' .
|
\ 'keepmarks keeppatterns lockmarks noswapfile silent ' .
|
||||||
\ 'keepalt keepalt keepjumps keepjumps keepmarks keepmarks ' .
|
\ 'verbose aboveleft belowright botright tab topleft vertical', g:mods)
|
||||||
\ 'keeppatterns keeppatterns aboveleft aboveleft lockmarks lockmarks noswapfile ' .
|
|
||||||
\ 'noswapfile belowright belowright silent silent tab topleft topleft verbose verbose ' .
|
|
||||||
\ 'vertical vertical ' .
|
|
||||||
\ 'aboveleft belowright botright browse confirm hide keepalt keepjumps ' .
|
|
||||||
\ 'keepmarks keeppatterns lockmarks noswapfile silent tab topleft ' .
|
|
||||||
\ 'verbose vertical ', g:mods)
|
|
||||||
|
|
||||||
let g:mods = ''
|
let g:mods = ''
|
||||||
command! -nargs=* MyQCmd let g:mods .= '<q-mods> '
|
command! -nargs=* MyQCmd let g:mods .= '<q-mods> '
|
||||||
|
@@ -1233,6 +1233,37 @@ add_cmd_modifier(char_u *buf, char *mod_str, int *multi_mods)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Add modifiers from "cmdmod.split" to "buf". Set "multi_mods" when one was
|
||||||
|
* added. Return the number of bytes added.
|
||||||
|
*/
|
||||||
|
size_t
|
||||||
|
add_win_cmd_modifers(char_u *buf, int *multi_mods)
|
||||||
|
{
|
||||||
|
size_t result = 0;
|
||||||
|
|
||||||
|
// :aboveleft and :leftabove
|
||||||
|
if (cmdmod.split & WSP_ABOVE)
|
||||||
|
result += add_cmd_modifier(buf, "aboveleft", multi_mods);
|
||||||
|
// :belowright and :rightbelow
|
||||||
|
if (cmdmod.split & WSP_BELOW)
|
||||||
|
result += add_cmd_modifier(buf, "belowright", multi_mods);
|
||||||
|
// :botright
|
||||||
|
if (cmdmod.split & WSP_BOT)
|
||||||
|
result += add_cmd_modifier(buf, "botright", multi_mods);
|
||||||
|
|
||||||
|
// :tab
|
||||||
|
if (cmdmod.tab > 0)
|
||||||
|
result += add_cmd_modifier(buf, "tab", multi_mods);
|
||||||
|
// :topleft
|
||||||
|
if (cmdmod.split & WSP_TOP)
|
||||||
|
result += add_cmd_modifier(buf, "topleft", multi_mods);
|
||||||
|
// :vertical
|
||||||
|
if (cmdmod.split & WSP_VERT)
|
||||||
|
result += add_cmd_modifier(buf, "vertical", multi_mods);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check for a <> code in a user command.
|
* Check for a <> code in a user command.
|
||||||
* "code" points to the '<'. "len" the length of the <> (inclusive).
|
* "code" points to the '<'. "len" the length of the <> (inclusive).
|
||||||
@@ -1451,16 +1482,6 @@ uc_check_code(
|
|||||||
*buf = '\0';
|
*buf = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
// :aboveleft and :leftabove
|
|
||||||
if (cmdmod.split & WSP_ABOVE)
|
|
||||||
result += add_cmd_modifier(buf, "aboveleft", &multi_mods);
|
|
||||||
// :belowright and :rightbelow
|
|
||||||
if (cmdmod.split & WSP_BELOW)
|
|
||||||
result += add_cmd_modifier(buf, "belowright", &multi_mods);
|
|
||||||
// :botright
|
|
||||||
if (cmdmod.split & WSP_BOT)
|
|
||||||
result += add_cmd_modifier(buf, "botright", &multi_mods);
|
|
||||||
|
|
||||||
// the modifiers that are simple flags
|
// the modifiers that are simple flags
|
||||||
for (i = 0; mod_entries[i].varp != NULL; ++i)
|
for (i = 0; mod_entries[i].varp != NULL; ++i)
|
||||||
if (*mod_entries[i].varp)
|
if (*mod_entries[i].varp)
|
||||||
@@ -1475,19 +1496,12 @@ uc_check_code(
|
|||||||
if (msg_silent > 0)
|
if (msg_silent > 0)
|
||||||
result += add_cmd_modifier(buf,
|
result += add_cmd_modifier(buf,
|
||||||
emsg_silent > 0 ? "silent!" : "silent", &multi_mods);
|
emsg_silent > 0 ? "silent!" : "silent", &multi_mods);
|
||||||
// :tab
|
|
||||||
if (cmdmod.tab > 0)
|
|
||||||
result += add_cmd_modifier(buf, "tab", &multi_mods);
|
|
||||||
// :topleft
|
|
||||||
if (cmdmod.split & WSP_TOP)
|
|
||||||
result += add_cmd_modifier(buf, "topleft", &multi_mods);
|
|
||||||
// TODO: How to support :unsilent?
|
// TODO: How to support :unsilent?
|
||||||
// :verbose
|
// :verbose
|
||||||
if (p_verbose > 0)
|
if (p_verbose > 0)
|
||||||
result += add_cmd_modifier(buf, "verbose", &multi_mods);
|
result += add_cmd_modifier(buf, "verbose", &multi_mods);
|
||||||
// :vertical
|
// flags from cmdmod.split
|
||||||
if (cmdmod.split & WSP_VERT)
|
result += add_win_cmd_modifers(buf, &multi_mods);
|
||||||
result += add_cmd_modifier(buf, "vertical", &multi_mods);
|
|
||||||
if (quote && buf != NULL)
|
if (quote && buf != NULL)
|
||||||
{
|
{
|
||||||
buf += result - 2;
|
buf += result - 2;
|
||||||
|
@@ -746,6 +746,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 */
|
||||||
|
/**/
|
||||||
|
577,
|
||||||
/**/
|
/**/
|
||||||
576,
|
576,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user