mirror of
https://github.com/neovim/neovim.git
synced 2025-09-27 13:38:34 +00:00
fix(api): Use local LastSet structure in nvim_get_option_info (#22741)
fix(api): use local LastSet structure in nvim_get_option_info * nvim_get_option_info is deprecated. It is always using the global LastSet information as reported in #15232. * nvim_get_option_info2 is added. The new function additionally accepts an 'opts' table {scope, buf, win} allowing to specify the option scope and query local options from another buffer or window.
This commit is contained in:
@@ -283,7 +283,7 @@ void nvim_set_option_value(uint64_t channel_id, String name, Object value, Dict(
|
||||
/// Gets the option information for all options.
|
||||
///
|
||||
/// The dictionary has the full option names as keys and option metadata
|
||||
/// dictionaries as detailed at |nvim_get_option_info()|.
|
||||
/// dictionaries as detailed at |nvim_get_option_info2()|.
|
||||
///
|
||||
/// @return dictionary of all options
|
||||
Dictionary nvim_get_all_options_info(Error *err)
|
||||
@@ -292,7 +292,7 @@ Dictionary nvim_get_all_options_info(Error *err)
|
||||
return get_all_vimoptions();
|
||||
}
|
||||
|
||||
/// Gets the option information for one option
|
||||
/// Gets the option information for one option from arbitrary buffer or window
|
||||
///
|
||||
/// Resulting dictionary has keys:
|
||||
/// - name: Name of the option (like 'filetype')
|
||||
@@ -311,15 +311,36 @@ Dictionary nvim_get_all_options_info(Error *err)
|
||||
/// - commalist: List of comma separated values
|
||||
/// - flaglist: List of single char flags
|
||||
///
|
||||
/// When {scope} is not provided, the last set information applies to the local
|
||||
/// value in the current buffer or window if it is available, otherwise the
|
||||
/// global value information is returned. This behavior can be disabled by
|
||||
/// explicitly specifying {scope} in the {opts} table.
|
||||
///
|
||||
/// @param name Option name
|
||||
/// @param name Option name
|
||||
/// @param opts Optional parameters
|
||||
/// - scope: One of "global" or "local". Analogous to
|
||||
/// |:setglobal| and |:setlocal|, respectively.
|
||||
/// - win: |window-ID|. Used for getting window local options.
|
||||
/// - buf: Buffer number. Used for getting buffer local options.
|
||||
/// Implies {scope} is "local".
|
||||
/// @param[out] err Error details, if any
|
||||
/// @return Option Information
|
||||
Dictionary nvim_get_option_info(String name, Error *err)
|
||||
FUNC_API_SINCE(7)
|
||||
Dictionary nvim_get_option_info2(String name, Dict(option) *opts, Error *err)
|
||||
FUNC_API_SINCE(11)
|
||||
{
|
||||
return get_vimoption(name, err);
|
||||
int scope = 0;
|
||||
int opt_type = SREQ_GLOBAL;
|
||||
void *from = NULL;
|
||||
if (!validate_option_value_args(opts, &scope, &opt_type, &from, NULL, err)) {
|
||||
return (Dictionary)ARRAY_DICT_INIT;
|
||||
}
|
||||
|
||||
buf_T *buf = (opt_type == SREQ_BUF) ? (buf_T *)from : curbuf;
|
||||
win_T *win = (opt_type == SREQ_WIN) ? (win_T *)from : curwin;
|
||||
|
||||
return get_vimoption(name, scope, buf, win, err);
|
||||
}
|
||||
|
||||
/// Sets the global value of an option.
|
||||
///
|
||||
/// @param channel_id
|
||||
|
Reference in New Issue
Block a user