mirror of
https://github.com/neovim/neovim.git
synced 2025-09-09 12:58:16 +00:00
Merge pull request #15079 from shadmansaleh/feat/verbose_lua
feat(lua): add :verbose support for lua config
This commit is contained in:
@@ -586,8 +586,8 @@ Array string_to_array(const String input, bool crlf)
|
||||
/// @param buffer Buffer handle for a specific buffer, or 0 for the current
|
||||
/// buffer, or -1 to signify global behavior ("all buffers")
|
||||
/// @param is_unmap When true, removes the mapping that matches {lhs}.
|
||||
void modify_keymap(Buffer buffer, bool is_unmap, String mode, String lhs, String rhs,
|
||||
Dict(keymap) *opts, Error *err)
|
||||
void modify_keymap(uint64_t channel_id, Buffer buffer, bool is_unmap, String mode, String lhs,
|
||||
String rhs, Dict(keymap) *opts, Error *err)
|
||||
{
|
||||
LuaRef lua_funcref = LUA_NOREF;
|
||||
bool global = (buffer == -1);
|
||||
@@ -600,6 +600,8 @@ void modify_keymap(Buffer buffer, bool is_unmap, String mode, String lhs, String
|
||||
return;
|
||||
}
|
||||
|
||||
const sctx_T save_current_sctx = api_set_sctx(channel_id);
|
||||
|
||||
if (opts != NULL && opts->callback.type == kObjectTypeLuaRef) {
|
||||
lua_funcref = opts->callback.data.luaref;
|
||||
opts->callback.data.luaref = LUA_NOREF;
|
||||
@@ -711,6 +713,7 @@ void modify_keymap(Buffer buffer, bool is_unmap, String mode, String lhs, String
|
||||
|
||||
parsed_args.rhs_lua = LUA_NOREF; // don't clear ref on success
|
||||
fail_and_free:
|
||||
current_sctx = save_current_sctx;
|
||||
NLUA_CLEAR_REF(parsed_args.rhs_lua);
|
||||
xfree(parsed_args.rhs);
|
||||
xfree(parsed_args.orig_rhs);
|
||||
@@ -1623,3 +1626,20 @@ int find_sid(uint64_t channel_id)
|
||||
return SID_API_CLIENT;
|
||||
}
|
||||
}
|
||||
|
||||
/// Sets sctx for API calls.
|
||||
///
|
||||
/// @param channel_id api clients id. Used to determine if it's a internal
|
||||
/// call or a rpc call.
|
||||
/// @return returns previous value of current_sctx. To be used
|
||||
/// to be used for restoring sctx to previous state.
|
||||
sctx_T api_set_sctx(uint64_t channel_id)
|
||||
{
|
||||
sctx_T old_current_sctx = current_sctx;
|
||||
if (channel_id != VIML_INTERNAL_CALL) {
|
||||
current_sctx.sc_sid =
|
||||
channel_id == LUA_INTERNAL_CALL ? SID_LUA : SID_API_CLIENT;
|
||||
current_sctx.sc_lnum = 0;
|
||||
}
|
||||
return old_current_sctx;
|
||||
}
|
||||
|
Reference in New Issue
Block a user