mirror of
https://github.com/neovim/neovim.git
synced 2025-10-07 18:36:30 +00:00
refactor(options): remove getoption_T
and introduce OptVal
(#23850)
Removes the `getoption_T` struct and also introduces the `OptVal` struct to unify the methods of getting/setting different option value types. This is the first of many PRs to reduce code duplication in the Vim option code as well as to make options easier to maintain. It also increases the flexibility and extensibility of options. Which opens the door for things like Array and Dictionary options.
This commit is contained in:
@@ -1,19 +1,9 @@
|
||||
#ifndef NVIM_OPTION_H
|
||||
#define NVIM_OPTION_H
|
||||
|
||||
#include "nvim/api/private/helpers.h"
|
||||
#include "nvim/ex_cmds_defs.h"
|
||||
|
||||
/// Returned by get_option_value().
|
||||
typedef enum {
|
||||
gov_unknown,
|
||||
gov_bool,
|
||||
gov_number,
|
||||
gov_string,
|
||||
gov_hidden_bool,
|
||||
gov_hidden_number,
|
||||
gov_hidden_string,
|
||||
} getoption_T;
|
||||
|
||||
// flags for buf_copy_options()
|
||||
#define BCO_ENTER 1 // going to enter the buffer
|
||||
#define BCO_ALWAYS 2 // always copy the options
|
||||
@@ -21,6 +11,17 @@ typedef enum {
|
||||
|
||||
#define MAX_NUMBERWIDTH 20 // used for 'numberwidth' and 'statuscolumn'
|
||||
|
||||
// OptVal helper macros.
|
||||
#define NIL_OPTVAL ((OptVal) { .type = kOptValTypeNil })
|
||||
#define BOOLEAN_OPTVAL(b) ((OptVal) { .type = kOptValTypeBoolean, .data.boolean = b })
|
||||
#define NUMBER_OPTVAL(n) ((OptVal) { .type = kOptValTypeNumber, .data.number = n })
|
||||
#define STRING_OPTVAL(s) ((OptVal) { .type = kOptValTypeString, .data.string = s })
|
||||
|
||||
#define CSTR_AS_OPTVAL(s) STRING_OPTVAL(cstr_as_string(s))
|
||||
#define CSTR_TO_OPTVAL(s) STRING_OPTVAL(cstr_to_string(s))
|
||||
#define STATIC_CSTR_AS_OPTVAL(s) STRING_OPTVAL(STATIC_CSTR_AS_STRING(s))
|
||||
#define STATIC_CSTR_TO_OPTVAL(s) STRING_OPTVAL(STATIC_CSTR_TO_STRING(s))
|
||||
|
||||
#ifdef INCLUDE_GENERATED_DECLARATIONS
|
||||
# include "option.h.generated.h"
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user