Mercurial > vim
diff src/usercmd.c @ 16475:854fb0ad4be6 v8.1.1241
patch 8.1.1241: Ex command info contains confusing information
commit https://github.com/vim/vim/commit/b731689e85b4153af7edc8f0a6b9f99d36d8b011
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed May 1 18:08:42 2019 +0200
patch 8.1.1241: Ex command info contains confusing information
Problem: Ex command info contains confusing information.
Solution: When using the NOTADR flag use ADDR_OTHER for the address type.
Cleanup code using NOTADR. Check for errors in
create_cmdidxs.vim. Adjust Makefile to see the errors.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Wed, 01 May 2019 18:15:07 +0200 |
parents | a2befc9b3729 |
children | 4182f74e2965 |
line wrap: on
line diff
--- a/src/usercmd.c +++ b/src/usercmd.c @@ -20,7 +20,7 @@ typedef struct ucmd char_u *uc_rep; // The command's replacement string long uc_def; // The default value for a range/count int uc_compl; // completion type - int uc_addr_type; // The command's address type + cmd_addr_T uc_addr_type; // The command's address type # ifdef FEAT_EVAL sctx_T uc_script_ctx; // SCTX where the command was defined # ifdef FEAT_CMDL_COMPL @@ -101,9 +101,9 @@ static struct */ static struct { - int expand; - char *name; - char *shortname; + cmd_addr_T expand; + char *name; + char *shortname; } addr_type_complete[] = { {ADDR_ARGUMENTS, "arguments", "arg"}, @@ -114,7 +114,7 @@ static struct {ADDR_WINDOWS, "windows", "win"}, {ADDR_QUICKFIX, "quickfix", "qf"}, {ADDR_OTHER, "other", "?"}, - {-1, NULL, NULL} + {ADDR_NONE, NULL, NULL} }; #define UC_BUFFER 1 // -buffer: local to current buffer @@ -495,7 +495,7 @@ uc_list(char_u *name, size_t name_len) } while (len < 8 - over); // Address Type - for (j = 0; addr_type_complete[j].expand != -1; ++j) + for (j = 0; addr_type_complete[j].expand != ADDR_NONE; ++j) if (addr_type_complete[j].expand != ADDR_LINES && addr_type_complete[j].expand == cmd->uc_addr_type) { @@ -566,12 +566,11 @@ uc_fun_cmd(void) parse_addr_type_arg( char_u *value, int vallen, - long *argt, - int *addr_type_arg) + cmd_addr_T *addr_type_arg) { int i, a, b; - for (i = 0; addr_type_complete[i].expand != -1; ++i) + for (i = 0; addr_type_complete[i].expand != ADDR_NONE; ++i) { a = (int)STRLEN(addr_type_complete[i].name) == vallen; b = STRNCMP(value, addr_type_complete[i].name, vallen) == 0; @@ -582,7 +581,7 @@ parse_addr_type_arg( } } - if (addr_type_complete[i].expand == -1) + if (addr_type_complete[i].expand == ADDR_NONE) { char_u *err = value; @@ -593,9 +592,6 @@ parse_addr_type_arg( return FAIL; } - if (*addr_type_arg != ADDR_LINES) - *argt |= NOTADR; - return OK; } @@ -694,7 +690,7 @@ uc_scan_attr( int *flags, int *complp, char_u **compl_arg, - int *addr_type_arg) + cmd_addr_T *addr_type_arg) { char_u *p; @@ -773,7 +769,7 @@ two_count: } *def = getdigits(&p); - *argt |= (ZEROR | NOTADR); + *argt |= ZEROR; if (p != val + vallen || vallen == 0) { @@ -782,10 +778,16 @@ invalid_count: return FAIL; } } + // default for -range is using buffer lines + if (*addr_type_arg == ADDR_NONE) + *addr_type_arg = ADDR_LINES; } else if (STRNICMP(attr, "count", attrlen) == 0) { - *argt |= (COUNT | ZEROR | RANGE | NOTADR); + *argt |= (COUNT | ZEROR | RANGE); + // default for -count is using any number + if (*addr_type_arg == ADDR_NONE) + *addr_type_arg = ADDR_OTHER; if (val != NULL) { @@ -822,11 +824,10 @@ invalid_count: emsg(_("E179: argument required for -addr")); return FAIL; } - if (parse_addr_type_arg(val, (int)vallen, argt, addr_type_arg) - == FAIL) + if (parse_addr_type_arg(val, (int)vallen, addr_type_arg) == FAIL) return FAIL; if (addr_type_arg != ADDR_LINES) - *argt |= (ZEROR | NOTADR) ; + *argt |= (ZEROR) ; } else { @@ -854,7 +855,7 @@ uc_add_command( int flags, int compl, char_u *compl_arg UNUSED, - int addr_type, + cmd_addr_T addr_type, int force) { ucmd_T *cmd = NULL; @@ -974,17 +975,17 @@ fail: void ex_command(exarg_T *eap) { - char_u *name; - char_u *end; - char_u *p; - long argt = 0; - long def = -1; - int flags = 0; - int compl = EXPAND_NOTHING; - char_u *compl_arg = NULL; - int addr_type_arg = ADDR_LINES; - int has_attr = (eap->arg[0] == '-'); - int name_len; + char_u *name; + char_u *end; + char_u *p; + long argt = 0; + long def = -1; + int flags = 0; + int compl = EXPAND_NOTHING; + char_u *compl_arg = NULL; + cmd_addr_T addr_type_arg = ADDR_NONE; + int has_attr = (eap->arg[0] == '-'); + int name_len; p = eap->arg;