Skip to content

Commit

Permalink
parser/printers/tests: Add :gui/:gvim command support
Browse files Browse the repository at this point in the history
  • Loading branch information
ZyX-I committed Apr 2, 2015
1 parent 3a20658 commit d2e9a17
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 8 deletions.
6 changes: 6 additions & 0 deletions src/nvim/viml/parser/command_arguments.h
Expand Up @@ -94,6 +94,7 @@ typedef enum {
#define ARGS_2INTS {kArgFlags, kArgNumber, kArgNumber}
#define ARGS_WINCMD {kArgChar}
#define ARGS_Z {kArgChar, kArgUNumber, kArgUNumber}
#define ARGS_GUI {kArgFlags}
#define ARGS_ERROR {kArgString, kArgString, kArgColumn}
#define ARGS_USER {kArgString}

Expand Down Expand Up @@ -700,6 +701,11 @@ enum {
ARG_Z_MULTIPLIER,
};

// :gui/:gvim
enum {
ARG_GUI_FG = 0,
};

// syntax error
enum {
ARG_ERROR_LINESTR = 0,
Expand Down
12 changes: 6 additions & 6 deletions src/nvim/viml/parser/command_definitions.h
Expand Up @@ -590,12 +590,12 @@ typedef enum
EX(kCmdGrepadd, "grepadd", &parse_make,
ARG_SHELL_ARGS, ARGS_SHELL,
RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR),
EX(kCmdGui, "gui", NULL,
ARG_E_FILES, ARGS_E,
BANG|FILES|EDITCMD|ARGOPT|TRLBAR|CMDWIN),
EX(kCmdGvim, "gvim", NULL,
ARG_E_FILES, ARGS_E,
BANG|FILES|EDITCMD|ARGOPT|TRLBAR|CMDWIN),
EX(kCmdGui, "gui", &parse_gui,
ARG_GUI_FG, ARGS_GUI,
BANG|EDITCMD|ARGOPT|TRLBAR|CMDWIN | EXTRA|LITERAL),
EX(kCmdGvim, "gvim", &parse_gui,
ARG_GUI_FG, ARGS_GUI,
BANG|EDITCMD|ARGOPT|TRLBAR|CMDWIN | EXTRA|LITERAL),
EX(kCmdHelp, "help", &parse_help,
ARG_HELP_LANG, ARGS_HELP,
EXTRA|NOTRLCOM | LITERAL),
Expand Down
26 changes: 24 additions & 2 deletions src/nvim/viml/parser/ex_commands.c
Expand Up @@ -3402,8 +3402,30 @@ static CMD_P_DEF(parse_vimgrep)
}
int pfret = parse_files(&p, error, position.col + (size_t) (p - s),
&(node->glob));
if (pfret == FAIL) {
return FAIL;
if (pfret != OK) {
return pfret;
}
*pp = p;
return OK;
}

static CMD_P_DEF(parse_gui)
{
const char *p = *pp;
const char *const s = p;
if (*p == '-' && (p[1] == 'f' || p[1] == 'b') && (!p[2] || vim_iswhite(p[2])))
{
node->args[ARG_GUI_FG].arg.flags = (uint_least32_t) (p[1] == 'f');
p = skipwhite(p + 2);
}
if (*p == NUL) {
*pp = p;
return OK;
}
int pfret = parse_files(&p, error, position.col + (size_t) (p - s),
&(node->glob));
if (pfret != OK) {
return pfret;
}
*pp = p;
return OK;
Expand Down
14 changes: 14 additions & 0 deletions src/nvim/viml/printer/ex_commands.c.h
Expand Up @@ -1795,6 +1795,18 @@ static CMD_FDEC(print_helpgrep)
FUNCTION_END;
}

static CMD_FDEC(print_gui)
{
FUNCTION_START;
if (node->args[ARG_GUI_FG].arg.flags) {
WS(" -f");
} else {
WS(" -b");
}
F(print_glob_arg, node->glob);
FUNCTION_END;
}

#undef PRINT_FLAG
#undef CMD_FDEC

Expand Down Expand Up @@ -1908,6 +1920,8 @@ static FDEC(print_node, const CommandNode *const node,
CMD_F(print_help);
} else if (CMDDEF(node->type).parse == CMDDEF(kCmdHelpgrep).parse) {
CMD_F(print_helpgrep);
} else if (CMDDEF(node->type).parse == CMDDEF(kCmdGui).parse) {
CMD_F(print_gui);
} else if (CMDDEF(node->type).flags & ISMODIFIER) {
CMD_F(print_modifier);
} else {
Expand Down
10 changes: 10 additions & 0 deletions test/unit/viml/parser/cmd2_spec.lua
Expand Up @@ -625,6 +625,16 @@ describe('parse_one_cmd', function()
describe(':cstag', function()
itn('cstag abc', 'cstag\tabc')
end)
describe(':gui/:gvim', function()
itn('gui -b', 'gu')
itn('gui! -b', 'gu!')
itn('gvim! -b', 'gv!')
itn('gvim -f any()', 'gvim -f *')
itn('gui -b lit(-f).any()', 'gu -f*')
itn('gui +normal!\\ gF -b', 'gu+norm!gF')
itn('gvim -f', 'gv-f')
itn('gvim -f lit(+redraw!)', 'gv-f +redraw!')
end)
describe('script commands', function()
itn([[
perl << EOFEOFEOFEOF
Expand Down

0 comments on commit d2e9a17

Please sign in to comment.