mirror of
https://github.com/neovim/neovim.git
synced 2025-09-14 07:18:17 +00:00
vim-patch:8.2.2206: :exe command line completion only works for first argument
Problem: :exe command line completion only works for first argument. Solution: Skip over text if more is following. (closes vim/vim#7546)4941b5effd
Port "IS_WHITE_OR_NUL" macro from patch v8.2.0562 as "ascii_iswhite_or_nul()" inline function. N/A patches for version.c: vim-patch:8.2.0782: cannot build with Lua on MS-Windows Problem: Cannot build with Lua on MS-Windows. Solution: Add DLL symbol for luaL_Loadstring. (Ken Takata)df1643a6a7
vim-patch:8.2.0856: CTRL-S stops output Problem: CTRL-S stops output. Solution: Invert the IXON flag. (closes vim/vim#6166)928eec649b
vim-patch:8.2.1212: cannot build with Lua 5.4 Problem: Cannot build with Lua 5.4. Solution: Use luaL_typeerror instead defining it. (closes vim/vim#6454)5551b131da
vim-patch:8.2.2211: MS-Windows: can't load Python dll if not in the path Problem: MS-Windows: can't load Python dll if not in the path. Solution: Use the InstallPath registry entry. (Kelvin Lee, closes vim/vim#7540)b2f9e0e2c5
This commit is contained in:
@@ -89,6 +89,10 @@ static inline bool ascii_iswhite(int)
|
||||
REAL_FATTR_CONST
|
||||
REAL_FATTR_ALWAYS_INLINE;
|
||||
|
||||
static inline bool ascii_iswhite_or_nul(int)
|
||||
REAL_FATTR_CONST
|
||||
REAL_FATTR_ALWAYS_INLINE;
|
||||
|
||||
static inline bool ascii_isdigit(int)
|
||||
REAL_FATTR_CONST
|
||||
REAL_FATTR_ALWAYS_INLINE;
|
||||
@@ -117,6 +121,14 @@ static inline bool ascii_iswhite(int c)
|
||||
return c == ' ' || c == '\t';
|
||||
}
|
||||
|
||||
/// Checks if `c` is a space or tab character or NUL.
|
||||
///
|
||||
/// @see {ascii_isdigit}
|
||||
static inline bool ascii_iswhite_or_nul(int c)
|
||||
{
|
||||
return ascii_iswhite(c) || c == NUL;
|
||||
}
|
||||
|
||||
/// Check whether character is a decimal digit.
|
||||
///
|
||||
/// Library isdigit() function is officially locale-dependent and, for
|
||||
|
@@ -2556,6 +2556,7 @@ void free_for_info(void *fi_void)
|
||||
|
||||
|
||||
void set_context_for_expression(expand_T *xp, char_u *arg, cmdidx_T cmdidx)
|
||||
FUNC_ATTR_NONNULL_ALL
|
||||
{
|
||||
int got_eq = FALSE;
|
||||
int c;
|
||||
@@ -2638,6 +2639,23 @@ void set_context_for_expression(expand_T *xp, char_u *arg, cmdidx_T cmdidx)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ":exe one two" completes "two"
|
||||
if ((cmdidx == CMD_execute
|
||||
|| cmdidx == CMD_echo
|
||||
|| cmdidx == CMD_echon
|
||||
|| cmdidx == CMD_echomsg)
|
||||
&& xp->xp_context == EXPAND_EXPRESSION) {
|
||||
for (;;) {
|
||||
char_u *const n = skiptowhite(arg);
|
||||
|
||||
if (n == arg || ascii_iswhite_or_nul(*skipwhite(n))) {
|
||||
break;
|
||||
}
|
||||
arg = skipwhite(n);
|
||||
}
|
||||
}
|
||||
|
||||
xp->xp_pattern = arg;
|
||||
}
|
||||
|
||||
|
@@ -577,6 +577,17 @@ funct Test_cmdline_complete_languages()
|
||||
endif
|
||||
endfunc
|
||||
|
||||
func Test_cmdline_complete_expression()
|
||||
let g:SomeVar = 'blah'
|
||||
for cmd in ['exe', 'echo', 'echon', 'echomsg']
|
||||
call feedkeys(":" .. cmd .. " SomeV\<Tab>\<C-B>\"\<CR>", 'tx')
|
||||
call assert_match('"' .. cmd .. ' SomeVar', @:)
|
||||
call feedkeys(":" .. cmd .. " foo SomeV\<Tab>\<C-B>\"\<CR>", 'tx')
|
||||
call assert_match('"' .. cmd .. ' foo SomeVar', @:)
|
||||
endfor
|
||||
unlet g:SomeVar
|
||||
endfunc
|
||||
|
||||
func Test_cmdline_write_alternatefile()
|
||||
new
|
||||
call setline('.', ['one', 'two'])
|
||||
|
Reference in New Issue
Block a user