BugFix: Fix inconsistent verbose message

When a keymap is set from lua currently verbose message says
it's set from line 1. That's incorrect because we don't really know when
it was set. So until proper :verbose support isn't added for sourceing
lua it shouldn't say where it was set at.
This commit is contained in:
shadmansaleh 2021-06-20 18:05:15 +06:00
parent 997a9c8792
commit b4a216f7ed
2 changed files with 21 additions and 1 deletions

View File

@ -2665,7 +2665,8 @@ static void cmd_source_buffer(const exarg_T *eap)
};
if (curbuf != NULL && curbuf->b_fname
&& path_with_extension((const char *)curbuf->b_fname, "lua")) {
nlua_source_using_linegetter(get_buffer_line, (void *)&cookie, ":source");
nlua_source_using_linegetter(get_buffer_line, (void *)&cookie,
":source (no file)");
} else {
source_using_linegetter((void *)&cookie, get_buffer_line,
":source (no file)");
@ -3002,8 +3003,17 @@ int do_source(char_u *fname, int check_other, int is_vimrc)
}
if (path_with_extension((const char *)fname, "lua")) {
// TODO(shadmansaleh): Properly handle :verbose for lua
// For now change currennt_sctx before sourcing lua files
// So verbose doesn't say everything was done in line 1 since we don't know
const sctx_T current_sctx_backup = current_sctx;
const linenr_T sourcing_lnum_backup = sourcing_lnum;
current_sctx.sc_lnum = 0;
sourcing_lnum = 0;
// Source the file as lua
retval = (int)nlua_exec_file((const char *)fname);
current_sctx = current_sctx_backup;
sourcing_lnum = sourcing_lnum_backup;
} else {
// Call do_cmdline, which will call getsourceline() to get the lines.
do_cmdline(firstline, getsourceline, (void *)&cookie,

View File

@ -1164,6 +1164,13 @@ static void nlua_typval_exec(const char *lcmd, size_t lcmd_len,
int nlua_source_using_linegetter(LineGetter fgetline,
void *cookie, char *name)
{
const linenr_T save_sourcing_lnum = sourcing_lnum;
const sctx_T save_current_sctx = current_sctx;
current_sctx.sc_sid = SID_STR;
current_sctx.sc_seq = 0;
current_sctx.sc_lnum = 0;
sourcing_lnum = 0;
garray_T ga;
char_u *line = NULL;
@ -1174,6 +1181,9 @@ int nlua_source_using_linegetter(LineGetter fgetline,
char *code = (char *)ga_concat_strings_sep(&ga, "\n");
size_t len = strlen(code);
nlua_typval_exec(code, len, name, NULL, 0, false, NULL);
sourcing_lnum = save_sourcing_lnum;
current_sctx = save_current_sctx;
ga_clear_strings(&ga);
xfree(code);
return OK;