mirror of
https://github.com/neovim/neovim.git
synced 2025-10-02 07:58:35 +00:00
api: Make nvim_set_option() update :verbose set ...
Make `:verbose set ...` show when an option was last modified by an API client or Lua script/chunk. In the case of an API client, the channel ID is displayed.
This commit is contained in:
@@ -581,7 +581,8 @@ Object nvim_buf_get_option(Buffer buffer, String name, Error *err)
|
||||
/// @param name Option name
|
||||
/// @param value Option value
|
||||
/// @param[out] err Error details, if any
|
||||
void nvim_buf_set_option(Buffer buffer, String name, Object value, Error *err)
|
||||
void nvim_buf_set_option(uint64_t channel_id, Buffer buffer,
|
||||
String name, Object value, Error *err)
|
||||
FUNC_API_SINCE(1)
|
||||
{
|
||||
buf_T *buf = find_buffer_by_handle(buffer, err);
|
||||
@@ -590,7 +591,7 @@ void nvim_buf_set_option(Buffer buffer, String name, Object value, Error *err)
|
||||
return;
|
||||
}
|
||||
|
||||
set_option_to(buf, SREQ_BUF, name, value, err);
|
||||
set_option_to(channel_id, buf, SREQ_BUF, name, value, err);
|
||||
}
|
||||
|
||||
/// Gets the buffer number
|
||||
|
@@ -326,7 +326,8 @@ Object get_option_from(void *from, int type, String name, Error *err)
|
||||
/// @param type One of `SREQ_GLOBAL`, `SREQ_WIN` or `SREQ_BUF`
|
||||
/// @param name The option name
|
||||
/// @param[out] err Details of an error that may have occurred
|
||||
void set_option_to(void *to, int type, String name, Object value, Error *err)
|
||||
void set_option_to(uint64_t channel_id, void *to, int type,
|
||||
String name, Object value, Error *err)
|
||||
{
|
||||
if (name.size == 0) {
|
||||
api_set_error(err, kErrorTypeValidation, "Empty option name");
|
||||
@@ -363,7 +364,8 @@ void set_option_to(void *to, int type, String name, Object value, Error *err)
|
||||
}
|
||||
}
|
||||
|
||||
int opt_flags = (type == SREQ_GLOBAL) ? OPT_GLOBAL : OPT_LOCAL;
|
||||
int numval = 0;
|
||||
char *stringval = NULL;
|
||||
|
||||
if (flags & SOPT_BOOL) {
|
||||
if (value.type != kObjectTypeBoolean) {
|
||||
@@ -374,8 +376,7 @@ void set_option_to(void *to, int type, String name, Object value, Error *err)
|
||||
return;
|
||||
}
|
||||
|
||||
bool val = value.data.boolean;
|
||||
set_option_value_for(name.data, val, NULL, opt_flags, type, to, err);
|
||||
numval = value.data.boolean;
|
||||
} else if (flags & SOPT_NUM) {
|
||||
if (value.type != kObjectTypeInteger) {
|
||||
api_set_error(err,
|
||||
@@ -393,8 +394,7 @@ void set_option_to(void *to, int type, String name, Object value, Error *err)
|
||||
return;
|
||||
}
|
||||
|
||||
int val = (int) value.data.integer;
|
||||
set_option_value_for(name.data, val, NULL, opt_flags, type, to, err);
|
||||
numval = (int)value.data.integer;
|
||||
} else {
|
||||
if (value.type != kObjectTypeString) {
|
||||
api_set_error(err,
|
||||
@@ -404,9 +404,18 @@ void set_option_to(void *to, int type, String name, Object value, Error *err)
|
||||
return;
|
||||
}
|
||||
|
||||
set_option_value_for(name.data, 0, value.data.string.data,
|
||||
opt_flags, type, to, err);
|
||||
stringval = (char *)value.data.string.data;
|
||||
}
|
||||
|
||||
const scid_T save_current_SID = current_SID;
|
||||
current_SID = channel_id == LUA_INTERNAL_CALL ? SID_LUA : SID_API_CLIENT;
|
||||
current_channel_id = channel_id;
|
||||
|
||||
const int opt_flags = (type == SREQ_GLOBAL) ? OPT_GLOBAL : OPT_LOCAL;
|
||||
set_option_value_for(name.data, numval, stringval,
|
||||
opt_flags, type, to, err);
|
||||
|
||||
current_SID = save_current_SID;
|
||||
}
|
||||
|
||||
#define TYPVAL_ENCODE_ALLOW_SPECIALS false
|
||||
|
@@ -549,10 +549,10 @@ Object nvim_get_option(String name, Error *err)
|
||||
/// @param name Option name
|
||||
/// @param value New option value
|
||||
/// @param[out] err Error details, if any
|
||||
void nvim_set_option(String name, Object value, Error *err)
|
||||
void nvim_set_option(uint64_t channel_id, String name, Object value, Error *err)
|
||||
FUNC_API_SINCE(1)
|
||||
{
|
||||
set_option_to(NULL, SREQ_GLOBAL, name, value, err);
|
||||
set_option_to(channel_id, NULL, SREQ_GLOBAL, name, value, err);
|
||||
}
|
||||
|
||||
/// Writes a message to the Vim output buffer. Does not append "\n", the
|
||||
|
@@ -309,7 +309,8 @@ Object nvim_win_get_option(Window window, String name, Error *err)
|
||||
/// @param name Option name
|
||||
/// @param value Option value
|
||||
/// @param[out] err Error details, if any
|
||||
void nvim_win_set_option(Window window, String name, Object value, Error *err)
|
||||
void nvim_win_set_option(uint64_t channel_id, Window window,
|
||||
String name, Object value, Error *err)
|
||||
FUNC_API_SINCE(1)
|
||||
{
|
||||
win_T *win = find_window_by_handle(window, err);
|
||||
@@ -318,7 +319,7 @@ void nvim_win_set_option(Window window, String name, Object value, Error *err)
|
||||
return;
|
||||
}
|
||||
|
||||
set_option_to(win, SREQ_WIN, name, value, err);
|
||||
set_option_to(channel_id, win, SREQ_WIN, name, value, err);
|
||||
}
|
||||
|
||||
/// Gets the window position in display cells. First position is zero.
|
||||
|
Reference in New Issue
Block a user