feat(lua): add <f-args> to user commands callback (#17522)

Works similar to ex <f-args>. It only splits the arguments if the
command has more than one posible argument. In cases were the command
can only have 1 argument opts.fargs = { opts.args }
This commit is contained in:
Javier Lopez
2022-02-27 14:35:06 -05:00
committed by GitHub
parent c65d93e60a
commit 1b5767aa34
5 changed files with 109 additions and 11 deletions

View File

@@ -5802,6 +5802,30 @@ static void ex_delcommand(exarg_T *eap)
}
}
/// Split a string by unescaped whitespace (space & tab), used for f-args on Lua commands callback.
/// Similar to uc_split_args(), but does not allocate, add quotes, add commas and is an iterator.
///
/// @note If no separator is found start = 0 and end = length - 1
/// @param[in] arg String to split
/// @param[in] iter Iteration counter
/// @param[out] start Start of the split
/// @param[out] end End of the split
/// @param[in] length Length of the string
/// @return false if it's the last split (don't call again), true otherwise (call again).
bool uc_split_args_iter(const char_u *arg, int iter, int *start, int *end, int length)
{
int pos;
*start = *end + (iter > 1 ? 2 : 0); // Skip whitespace after the first split
for (pos = *start; pos < length - 2; pos++) {
if (arg[pos] != '\\' && ascii_iswhite(arg[pos + 1])) {
*end = pos;
return true;
}
}
*end = length - 1;
return false;
}
/*
* split and quote args for <f-args>
*/