This commit is contained in:
Justin M. Keyes
2017-03-21 17:34:25 +01:00
parent 0f3afdaa1b
commit 7e23ce6b4f

View File

@@ -4314,31 +4314,24 @@ static int getargopt(exarg_T *eap)
return OK; return OK;
} }
/* /// Handle the argument for a tabpage related ex command.
* Handle the argument for a tabpage related ex command. /// Returns a tabpage number.
* Returns a tabpage number. /// When an error is encountered then eap->errmsg is set.
* When an error is encountered then eap->errmsg is set. static int get_tabpage_arg(exarg_T *eap)
*/
static int
get_tabpage_arg(exarg_T *eap)
{ {
int tab_number; int tab_number;
int unaccept_arg0 = (eap->cmdidx == CMD_tabmove) ? 0 : 1; int unaccept_arg0 = (eap->cmdidx == CMD_tabmove) ? 0 : 1;
if (eap->arg && *eap->arg != NUL) if (eap->arg && *eap->arg != NUL) {
{
char_u *p = eap->arg; char_u *p = eap->arg;
char_u *p_save; char_u *p_save;
int relative = 0; /* argument +N/-N means: go to N places to the int relative = 0; // argument +N/-N means: go to N places to the
* right/left relative to the current position. */ // right/left relative to the current position.
if (*p == '-') if (*p == '-') {
{
relative = -1; relative = -1;
p++; p++;
} } else if (*p == '+') {
else if (*p == '+')
{
relative = 1; relative = 1;
p++; p++;
} }
@@ -4346,55 +4339,46 @@ get_tabpage_arg(exarg_T *eap)
p_save = p; p_save = p;
tab_number = getdigits(&p); tab_number = getdigits(&p);
if (relative == 0) if (relative == 0) {
{ if (STRCMP(p, "$") == 0) {
if (STRCMP(p, "$") == 0)
tab_number = LAST_TAB_NR; tab_number = LAST_TAB_NR;
else if (p == p_save || *p_save == '-' || *p != NUL } else if (p == p_save || *p_save == '-' || *p != NUL
|| tab_number > LAST_TAB_NR) || tab_number > LAST_TAB_NR) {
{ // No numbers as argument.
/* No numbers as argument. */
eap->errmsg = e_invarg; eap->errmsg = e_invarg;
goto theend; goto theend;
} }
} } else {
else if (*p_save == NUL) {
{
if (*p_save == NUL)
tab_number = 1; tab_number = 1;
else if (p == p_save || *p_save == '-' || *p != NUL }
|| tab_number == 0) else if (p == p_save || *p_save == '-' || *p != NUL || tab_number == 0) {
{ // No numbers as argument.
/* No numbers as argument. */
eap->errmsg = e_invarg; eap->errmsg = e_invarg;
goto theend; goto theend;
} }
tab_number = tab_number * relative + tabpage_index(curtab); tab_number = tab_number * relative + tabpage_index(curtab);
if (!unaccept_arg0 && relative == -1) if (!unaccept_arg0 && relative == -1) {
--tab_number; --tab_number;
} }
if (tab_number < unaccept_arg0 || tab_number > LAST_TAB_NR) }
if (tab_number < unaccept_arg0 || tab_number > LAST_TAB_NR) {
eap->errmsg = e_invarg; eap->errmsg = e_invarg;
} }
else if (eap->addr_count > 0) } else if (eap->addr_count > 0) {
{ if (unaccept_arg0 && eap->line2 == 0) {
if (unaccept_arg0 && eap->line2 == 0)
eap->errmsg = e_invrange; eap->errmsg = e_invrange;
else } else {
{
tab_number = eap->line2; tab_number = eap->line2;
if (!unaccept_arg0 && **eap->cmdlinep == '-') if (!unaccept_arg0 && **eap->cmdlinep == '-') {
{
--tab_number; --tab_number;
if (tab_number < unaccept_arg0) if (tab_number < unaccept_arg0) {
eap->errmsg = e_invarg; eap->errmsg = e_invarg;
} }
} }
} }
else } else {
{ switch (eap->cmdidx) {
switch (eap->cmdidx)
{
case CMD_tabnext: case CMD_tabnext:
tab_number = tabpage_index(curtab) + 1; tab_number = tabpage_index(curtab) + 1;
if (tab_number > LAST_TAB_NR) if (tab_number > LAST_TAB_NR)