mirror of
https://github.com/neovim/neovim.git
synced 2025-10-15 22:36:09 +00:00

These are not needed after #35129 but making uncrustify still play nice with them was a bit tricky. Unfortunately `uncrustify --update-config-with-doc` breaks strings with backslashes. This issue has been reported upstream, and in the meanwhile auto-update on every single run has been disabled.
194 lines
7.7 KiB
C
194 lines
7.7 KiB
C
#pragma once
|
|
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
|
|
#include "nvim/api/private/defs.h"
|
|
#include "nvim/cmdexpand_defs.h"
|
|
#include "nvim/regexp_defs.h"
|
|
|
|
#include "options_enum.generated.h"
|
|
|
|
/// Option flags.
|
|
typedef enum {
|
|
kOptFlagExpand = 1 << 0, ///< Environment expansion.
|
|
///< NOTE: kOptFlagExpand can never be used for local or hidden options.
|
|
kOptFlagNoDefExp = 1 << 1, ///< Don't expand default value.
|
|
kOptFlagNoDefault = 1 << 2, ///< Don't set to default value.
|
|
kOptFlagWasSet = 1 << 3, ///< Option has been set/reset.
|
|
kOptFlagNoMkrc = 1 << 4, ///< Don't include in :mkvimrc output.
|
|
kOptFlagUIOption = 1 << 5, ///< Send option to remote UI.
|
|
kOptFlagRedrTabl = 1 << 6, ///< Redraw tabline.
|
|
kOptFlagRedrStat = 1 << 7, ///< Redraw status lines.
|
|
kOptFlagRedrWin = 1 << 8, ///< Redraw current window and recompute text.
|
|
kOptFlagRedrBuf = 1 << 9, ///< Redraw current buffer and recompute text.
|
|
kOptFlagRedrAll = kOptFlagRedrBuf | kOptFlagRedrWin, ///< Redraw all windows and recompute text.
|
|
kOptFlagRedrClear = kOptFlagRedrAll | kOptFlagRedrStat, ///< Clear and redraw all and recompute text.
|
|
kOptFlagComma = 1 << 10, ///< Comma-separated list.
|
|
kOptFlagOneComma = (1 << 11) | kOptFlagComma, ///< Comma-separated list that cannot have two consecutive commas.
|
|
kOptFlagNoDup = 1 << 12, ///< Don't allow duplicate strings.
|
|
kOptFlagFlagList = 1 << 13, ///< List of single-char flags.
|
|
kOptFlagSecure = 1 << 14, ///< Cannot change in modeline or secure mode.
|
|
kOptFlagGettext = 1 << 15, ///< Expand default value with _().
|
|
kOptFlagNoGlob = 1 << 16, ///< Do not use local value for global vimrc.
|
|
kOptFlagNFname = 1 << 17, ///< Only normal file name chars allowed.
|
|
kOptFlagInsecure = 1 << 18, ///< Option was set from a modeline.
|
|
kOptFlagPriMkrc = 1 << 19, ///< Priority for :mkvimrc (setting option has side effects).
|
|
kOptFlagNoML = 1 << 20, ///< Not allowed in modeline.
|
|
kOptFlagCurswant = 1 << 21, ///< Update curswant required; not needed when there is a redraw flag.
|
|
kOptFlagNDname = 1 << 22, ///< Only normal directory name chars allowed.
|
|
kOptFlagHLOnly = 1 << 23, ///< Option only changes highlight, not text.
|
|
kOptFlagMLE = 1 << 24, ///< Under control of 'modelineexpr'.
|
|
kOptFlagFunc = 1 << 25, ///< Accept a function reference or a lambda.
|
|
kOptFlagColon = 1 << 26, ///< Values use colons to create sublists.
|
|
} OptFlags;
|
|
|
|
/// Option value type.
|
|
/// These types are also used as type flags by using the type value as an index for the type_flags
|
|
/// bit field (@see option_has_type()).
|
|
typedef enum {
|
|
kOptValTypeNil = -1, // Make sure Nil can't be bitshifted and used as an option type flag.
|
|
kOptValTypeBoolean,
|
|
kOptValTypeNumber,
|
|
kOptValTypeString,
|
|
} OptValType;
|
|
|
|
/// Scopes that an option can support.
|
|
typedef enum {
|
|
kOptScopeGlobal = 0, ///< Request global option value
|
|
kOptScopeWin, ///< Request window-local option value
|
|
kOptScopeBuf, ///< Request buffer-local option value
|
|
} OptScope;
|
|
/// Always update this whenever a new option scope is added.
|
|
#define kOptScopeSize (kOptScopeBuf + 1)
|
|
typedef uint8_t OptScopeFlags;
|
|
|
|
typedef union {
|
|
// boolean options are actually tri-states because they have a third "None" value.
|
|
TriState boolean;
|
|
OptInt number;
|
|
String string;
|
|
} OptValData;
|
|
|
|
/// Option value
|
|
typedef struct {
|
|
OptValType type;
|
|
OptValData data;
|
|
} OptVal;
|
|
|
|
/// :set operator types
|
|
typedef enum {
|
|
OP_NONE = 0,
|
|
OP_ADDING, ///< "opt+=arg"
|
|
OP_PREPENDING, ///< "opt^=arg"
|
|
OP_REMOVING, ///< "opt-=arg"
|
|
} set_op_T;
|
|
|
|
/// Argument for the callback function (opt_did_set_cb_T) invoked after an
|
|
/// option value is modified.
|
|
typedef struct {
|
|
/// Pointer to the option variable. The variable can be an OptInt (numeric
|
|
/// option), an int (boolean option) or a char pointer (string option).
|
|
void *os_varp;
|
|
OptIndex os_idx;
|
|
int os_flags;
|
|
|
|
/// Old value of the option.
|
|
OptValData os_oldval;
|
|
/// New value of the option.
|
|
OptValData os_newval;
|
|
|
|
/// Option value was checked to be safe, no need to set kOptFlagInsecure
|
|
/// Used for the 'keymap', 'filetype' and 'syntax' options.
|
|
bool os_value_checked;
|
|
/// Option value changed. Used for the 'filetype' and 'syntax' options.
|
|
bool os_value_changed;
|
|
|
|
/// Used by the 'isident', 'iskeyword', 'isprint' and 'isfname' options.
|
|
/// Set to true if the character table is modified when processing the
|
|
/// option and need to be restored because of a failure.
|
|
bool os_restore_chartab;
|
|
|
|
/// If the value specified for an option is not valid and the error message
|
|
/// is parameterized, then the "os_errbuf" buffer is used to store the error
|
|
/// message (when it is not NULL).
|
|
char *os_errbuf;
|
|
/// length of the error buffer
|
|
size_t os_errbuflen;
|
|
|
|
void *os_win;
|
|
void *os_buf;
|
|
} optset_T;
|
|
|
|
/// Type for the callback function that is invoked after an option value is
|
|
/// changed to validate and apply the new value.
|
|
///
|
|
/// Returns NULL if the option value is valid and successfully applied.
|
|
/// Otherwise returns an error message.
|
|
typedef const char *(*opt_did_set_cb_T)(optset_T *args);
|
|
|
|
/// Argument for the callback function (opt_expand_cb_T) invoked after a string
|
|
/// option value is expanded for cmdline completion.
|
|
typedef struct {
|
|
/// Pointer to the option variable. It's always a string.
|
|
char *oe_varp;
|
|
OptIndex oe_idx;
|
|
/// The original option value, escaped.
|
|
char *oe_opt_value;
|
|
|
|
/// true if using set+= instead of set=
|
|
bool oe_append;
|
|
/// true if we would like to add the original option value as the first choice.
|
|
bool oe_include_orig_val;
|
|
|
|
/// Regex from the cmdline, for matching potential options against.
|
|
regmatch_T *oe_regmatch;
|
|
/// The expansion context.
|
|
expand_T *oe_xp;
|
|
|
|
/// The full argument passed to :set. For example, if the user inputs
|
|
/// ":set dip=icase,algorithm:my<Tab>", oe_xp->xp_pattern will only have
|
|
/// "my", but oe_set_arg will contain the whole "icase,algorithm:my".
|
|
char *oe_set_arg;
|
|
} optexpand_T;
|
|
|
|
/// Type for the callback function that is invoked when expanding possible
|
|
/// string option values during cmdline completion.
|
|
///
|
|
/// Strings in returned matches will be managed and freed by caller.
|
|
///
|
|
/// Returns OK if the expansion succeeded (numMatches and matches have to be
|
|
/// set). Otherwise returns FAIL.
|
|
///
|
|
/// Note: If returned FAIL or *numMatches is 0, *matches will NOT be freed by
|
|
/// caller.
|
|
typedef int (*opt_expand_cb_T)(optexpand_T *args, int *numMatches, char ***matches);
|
|
|
|
typedef struct {
|
|
char *fullname; ///< full option name
|
|
char *shortname; ///< permissible abbreviation
|
|
uint32_t flags; ///< see above
|
|
OptValType type; ///< option type
|
|
OptScopeFlags scope_flags; ///< option scope flags, see OptScope
|
|
void *var; ///< global option: pointer to variable;
|
|
///< window-local option: NULL;
|
|
///< buffer-local option: global value
|
|
unsigned *flags_var;
|
|
ssize_t scope_idx[kOptScopeSize]; ///< index of option at every scope.
|
|
bool immutable; ///< option is immutable, trying to set it will give an error.
|
|
|
|
const char **values; ///< possible values for string options
|
|
const size_t values_len; ///< length of values array
|
|
|
|
/// callback function to invoke after an option is modified to validate and
|
|
/// apply the new value.
|
|
opt_did_set_cb_T opt_did_set_cb;
|
|
|
|
/// callback function to invoke when expanding possible values on the
|
|
/// cmdline. Only useful for string options.
|
|
opt_expand_cb_T opt_expand_cb;
|
|
|
|
OptVal def_val; ///< default value
|
|
sctx_T script_ctx; ///< script in which the option was last set
|
|
} vimoption_T;
|