diff options
author | ZyX <kp-pav@yandex.ru> | 2014-10-26 14:55:22 +0300 |
---|---|---|
committer | ZyX <kp-pav@yandex.ru> | 2016-04-18 03:37:23 +0300 |
commit | fdb68e35e4c729c7ed097d8ade1da29e5b3f4b31 (patch) | |
tree | f68d5079f4dcaa936da97ce40127393827252177 /src/nvim/ex_getln.c | |
parent | 5674546580643fab33f0d10babacbc8e7792e287 (diff) | |
download | rneovim-fdb68e35e4c729c7ed097d8ade1da29e5b3f4b31.tar.gz rneovim-fdb68e35e4c729c7ed097d8ade1da29e5b3f4b31.tar.bz2 rneovim-fdb68e35e4c729c7ed097d8ade1da29e5b3f4b31.zip |
ex_getln: Make get_histtype return HIST_DEFAULT if needed
Diffstat (limited to 'src/nvim/ex_getln.c')
-rw-r--r-- | src/nvim/ex_getln.c | 79 |
1 files changed, 51 insertions, 28 deletions
diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c index 0c2848da98..a9e9ee76d5 100644 --- a/src/nvim/ex_getln.c +++ b/src/nvim/ex_getln.c @@ -4272,20 +4272,33 @@ void globpath(char_u *path, char_u *file, garray_T *ga, int expand_options) * Command line history stuff * *********************************/ -/* - * Translate a history character to the associated type number. - */ -static int hist_char2type(int c) +/// Translate a history character to the associated type number +static HistoryType hist_char2type(const int c) + FUNC_ATTR_CONST FUNC_ATTR_WARN_UNUSED_RESULT { - if (c == ':') - return HIST_CMD; - if (c == '=') - return HIST_EXPR; - if (c == '@') - return HIST_INPUT; - if (c == '>') - return HIST_DEBUG; - return HIST_SEARCH; /* must be '?' or '/' */ + switch (c) { + case ':': { + return HIST_CMD; + } + case '=': { + return HIST_EXPR; + } + case '@': { + return HIST_INPUT; + } + case '>': { + return HIST_DEBUG; + } + case '/': + case '?': { + return HIST_SEARCH; + } + default: { + assert(false); + } + } + // Silence -Wreturn-type + return 0; } /* @@ -4454,28 +4467,38 @@ in_history ( return false; } -/* - * Convert history name (from table above) to its HIST_ equivalent. - * When "name" is empty, return "cmd" history. - * Returns -1 for unknown history name. - */ -int get_histtype(char_u *name, size_t len) +/// Convert history name to its HIST_ equivalent +/// +/// Names are taken from the table above. When `name` is empty returns currently +/// active history or HIST_DEFAULT, depending on `return_default` argument. +/// +/// @param[in] name Converted name. +/// @param[in] len Name length. +/// @param[in] return_default Determines whether HIST_DEFAULT should be +/// returned or value based on `ccline.cmdfirstc`. +/// +/// @return Any value from HistoryType enum, including HIST_INVALID. May not +/// return HIST_DEFAULT unless return_default is true. +HistoryType get_histtype(const char_u *const name, const size_t len, + const bool return_default) + FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT { - int i; - - /* No argument: use current history. */ - if (len == 0) - return hist_char2type(ccline.cmdfirstc); + // No argument: use current history. + if (len == 0) { + return return_default ? HIST_DEFAULT :hist_char2type(ccline.cmdfirstc); + } - for (i = 0; history_names[i] != NULL; ++i) - if (STRNICMP(name, history_names[i], len) == 0) + for (HistoryType i = 0; history_names[i] != NULL; i++) { + if (STRNICMP(name, history_names[i], len) == 0) { return i; + } + } if (vim_strchr((char_u *)":=@>?/", name[0]) != NULL && len == 1) { return hist_char2type(name[0]); } - return -1; + return HIST_INVALID; } static int last_maptick = -1; /* last seen maptick */ @@ -4847,7 +4870,7 @@ void ex_history(exarg_T *eap) while (ASCII_ISALPHA(*end) || vim_strchr((char_u *)":=@>/?", *end) != NULL) end++; - histype1 = get_histtype(arg, end - arg); + histype1 = get_histtype(arg, end - arg, false); if (histype1 == HIST_INVALID) { if (STRNICMP(arg, "all", end - arg) == 0) { histype1 = 0; |