mirror of
https://github.com/neovim/neovim.git
synced 2025-10-01 07:28:34 +00:00
refactor(option.c): reduce scope of locals (#21433)
Co-authored-by: zeertzjq <zeertzjq@outlook.com>
This commit is contained in:
@@ -560,9 +560,7 @@ static char *find_dup_item(char *origval, const char *newval, uint32_t flags)
|
|||||||
/// Used for 'lines' and 'columns'.
|
/// Used for 'lines' and 'columns'.
|
||||||
void set_number_default(char *name, long val)
|
void set_number_default(char *name, long val)
|
||||||
{
|
{
|
||||||
int opt_idx;
|
int opt_idx = findoption(name);
|
||||||
|
|
||||||
opt_idx = findoption(name);
|
|
||||||
if (opt_idx >= 0) {
|
if (opt_idx >= 0) {
|
||||||
options[opt_idx].def_val = (char *)(intptr_t)val;
|
options[opt_idx].def_val = (char *)(intptr_t)val;
|
||||||
}
|
}
|
||||||
@@ -726,12 +724,10 @@ void set_helplang_default(const char *lang)
|
|||||||
/// machine.
|
/// machine.
|
||||||
void set_title_defaults(void)
|
void set_title_defaults(void)
|
||||||
{
|
{
|
||||||
int idx1;
|
|
||||||
|
|
||||||
// If GUI is (going to be) used, we can always set the window title and
|
// If GUI is (going to be) used, we can always set the window title and
|
||||||
// icon name. Saves a bit of time, because the X11 display server does
|
// icon name. Saves a bit of time, because the X11 display server does
|
||||||
// not need to be contacted.
|
// not need to be contacted.
|
||||||
idx1 = findoption("title");
|
int idx1 = findoption("title");
|
||||||
if (idx1 >= 0 && !(options[idx1].flags & P_WAS_SET)) {
|
if (idx1 >= 0 && !(options[idx1].flags & P_WAS_SET)) {
|
||||||
options[idx1].def_val = 0;
|
options[idx1].def_val = 0;
|
||||||
p_title = 0;
|
p_title = 0;
|
||||||
@@ -770,7 +766,6 @@ static int do_set_string(int opt_idx, int opt_flags, char **argp, int nextchar,
|
|||||||
char *save_arg = NULL;
|
char *save_arg = NULL;
|
||||||
char *s = NULL;
|
char *s = NULL;
|
||||||
char_u *oldval = NULL; // previous value if *varp
|
char_u *oldval = NULL; // previous value if *varp
|
||||||
char *newval;
|
|
||||||
char *origval = NULL;
|
char *origval = NULL;
|
||||||
char_u *origval_l = NULL;
|
char_u *origval_l = NULL;
|
||||||
char_u *origval_g = NULL;
|
char_u *origval_g = NULL;
|
||||||
@@ -778,8 +773,6 @@ static int do_set_string(int opt_idx, int opt_flags, char **argp, int nextchar,
|
|||||||
char *saved_origval_l = NULL;
|
char *saved_origval_l = NULL;
|
||||||
char *saved_origval_g = NULL;
|
char *saved_origval_g = NULL;
|
||||||
char *saved_newval = NULL;
|
char *saved_newval = NULL;
|
||||||
unsigned newlen;
|
|
||||||
int comma;
|
|
||||||
char whichwrap[80];
|
char whichwrap[80];
|
||||||
|
|
||||||
// When using ":set opt=val" for a global option
|
// When using ":set opt=val" for a global option
|
||||||
@@ -812,6 +805,7 @@ static int do_set_string(int opt_idx, int opt_flags, char **argp, int nextchar,
|
|||||||
origval = (char *)oldval;
|
origval = (char *)oldval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *newval;
|
||||||
if (nextchar == '&') { // set to default val
|
if (nextchar == '&') { // set to default val
|
||||||
newval = options[opt_idx].def_val;
|
newval = options[opt_idx].def_val;
|
||||||
// expand environment variables and ~ since the default value was
|
// expand environment variables and ~ since the default value was
|
||||||
@@ -903,9 +897,9 @@ static int do_set_string(int opt_idx, int opt_flags, char **argp, int nextchar,
|
|||||||
// backslashes.
|
// backslashes.
|
||||||
|
|
||||||
// get a bit too much
|
// get a bit too much
|
||||||
newlen = (unsigned)strlen(arg) + 1;
|
size_t newlen = strlen(arg) + 1;
|
||||||
if (op != OP_NONE) {
|
if (op != OP_NONE) {
|
||||||
newlen += (unsigned)strlen(origval) + 1;
|
newlen += strlen(origval) + 1;
|
||||||
}
|
}
|
||||||
newval = xmalloc(newlen);
|
newval = xmalloc(newlen);
|
||||||
s = newval;
|
s = newval;
|
||||||
@@ -975,7 +969,7 @@ static int do_set_string(int opt_idx, int opt_flags, char **argp, int nextchar,
|
|||||||
|
|
||||||
// concatenate the two strings; add a ',' if needed
|
// concatenate the two strings; add a ',' if needed
|
||||||
if (op == OP_ADDING || op == OP_PREPENDING) {
|
if (op == OP_ADDING || op == OP_PREPENDING) {
|
||||||
comma = ((flags & P_COMMA) && *origval != NUL && *newval != NUL);
|
int comma = ((flags & P_COMMA) && *origval != NUL && *newval != NUL);
|
||||||
if (op == OP_ADDING) {
|
if (op == OP_ADDING) {
|
||||||
len = (int)strlen(origval);
|
len = (int)strlen(origval);
|
||||||
// Strip a trailing comma, would get 2.
|
// Strip a trailing comma, would get 2.
|
||||||
@@ -1118,21 +1112,7 @@ static int do_set_string(int opt_idx, int opt_flags, char **argp, int nextchar,
|
|||||||
/// @return FAIL if an error is detected, OK otherwise
|
/// @return FAIL if an error is detected, OK otherwise
|
||||||
int do_set(char *arg, int opt_flags)
|
int do_set(char *arg, int opt_flags)
|
||||||
{
|
{
|
||||||
int opt_idx;
|
|
||||||
char *errmsg;
|
|
||||||
char errbuf[80];
|
|
||||||
char *startarg;
|
|
||||||
int prefix; // 1: nothing, 0: "no", 2: "inv" in front of name
|
|
||||||
char_u nextchar; // next non-white char after option name
|
|
||||||
int afterchar; // character just after option name
|
|
||||||
int len;
|
|
||||||
int i;
|
|
||||||
varnumber_T value;
|
|
||||||
int key;
|
|
||||||
uint32_t flags; // flags for current option
|
|
||||||
char *varp = NULL; // pointer to variable for current option
|
|
||||||
int did_show = false; // already showed one value
|
int did_show = false; // already showed one value
|
||||||
set_op_T op = 0;
|
|
||||||
|
|
||||||
if (*arg == NUL) {
|
if (*arg == NUL) {
|
||||||
showoptions(0, opt_flags);
|
showoptions(0, opt_flags);
|
||||||
@@ -1140,9 +1120,11 @@ int do_set(char *arg, int opt_flags)
|
|||||||
goto theend;
|
goto theend;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char errbuf[80];
|
||||||
|
|
||||||
while (*arg != NUL) { // loop to process all options
|
while (*arg != NUL) { // loop to process all options
|
||||||
errmsg = NULL;
|
char *errmsg = NULL;
|
||||||
startarg = arg; // remember for error message
|
char *startarg = arg; // remember for error message
|
||||||
|
|
||||||
if (strncmp(arg, "all", 3) == 0 && !isalpha(arg[3])
|
if (strncmp(arg, "all", 3) == 0 && !isalpha(arg[3])
|
||||||
&& !(opt_flags & OPT_MODELINE)) {
|
&& !(opt_flags & OPT_MODELINE)) {
|
||||||
@@ -1162,7 +1144,7 @@ int do_set(char *arg, int opt_flags)
|
|||||||
did_show = true;
|
did_show = true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
prefix = 1;
|
int prefix = 1; // 1: nothing, 0: "no", 2: "inv" in front of name
|
||||||
if (strncmp(arg, "no", 2) == 0) {
|
if (strncmp(arg, "no", 2) == 0) {
|
||||||
prefix = 0;
|
prefix = 0;
|
||||||
arg += 2;
|
arg += 2;
|
||||||
@@ -1172,7 +1154,9 @@ int do_set(char *arg, int opt_flags)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// find end of name
|
// find end of name
|
||||||
key = 0;
|
int key = 0;
|
||||||
|
int len;
|
||||||
|
int opt_idx;
|
||||||
if (*arg == '<') {
|
if (*arg == '<') {
|
||||||
opt_idx = -1;
|
opt_idx = -1;
|
||||||
// look out for <t_>;>
|
// look out for <t_>;>
|
||||||
@@ -1212,14 +1196,14 @@ int do_set(char *arg, int opt_flags)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// remember character after option name
|
// remember character after option name
|
||||||
afterchar = (uint8_t)arg[len];
|
int afterchar = (uint8_t)arg[len];
|
||||||
|
|
||||||
// skip white space, allow ":set ai ?"
|
// skip white space, allow ":set ai ?"
|
||||||
while (ascii_iswhite(arg[len])) {
|
while (ascii_iswhite(arg[len])) {
|
||||||
len++;
|
len++;
|
||||||
}
|
}
|
||||||
|
|
||||||
op = OP_NONE;
|
set_op_T op = OP_NONE;
|
||||||
if (arg[len] != NUL && arg[len + 1] == '=') {
|
if (arg[len] != NUL && arg[len + 1] == '=') {
|
||||||
if (arg[len] == '+') {
|
if (arg[len] == '+') {
|
||||||
op = OP_ADDING; // "+="
|
op = OP_ADDING; // "+="
|
||||||
@@ -1232,13 +1216,16 @@ int do_set(char *arg, int opt_flags)
|
|||||||
len++;
|
len++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
nextchar = (uint8_t)arg[len];
|
char_u nextchar = (uint8_t)arg[len]; // next non-white char after option name
|
||||||
|
|
||||||
if (opt_idx == -1 && key == 0) { // found a mismatch: skip
|
if (opt_idx == -1 && key == 0) { // found a mismatch: skip
|
||||||
errmsg = e_unknown_option;
|
errmsg = e_unknown_option;
|
||||||
goto skip;
|
goto skip;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t flags; // flags for current option
|
||||||
|
char *varp = NULL; // pointer to variable for current option
|
||||||
|
|
||||||
if (opt_idx >= 0) {
|
if (opt_idx >= 0) {
|
||||||
if (options[opt_idx].var == NULL) { // hidden option: skip
|
if (options[opt_idx].var == NULL) { // hidden option: skip
|
||||||
// Only give an error message when requesting the value of
|
// Only give an error message when requesting the value of
|
||||||
@@ -1352,6 +1339,7 @@ int do_set(char *arg, int opt_flags)
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
int value_checked = false;
|
int value_checked = false;
|
||||||
|
varnumber_T value;
|
||||||
|
|
||||||
if (flags & P_BOOL) { // boolean
|
if (flags & P_BOOL) { // boolean
|
||||||
if (nextchar == '=' || nextchar == ':') {
|
if (nextchar == '=' || nextchar == ':') {
|
||||||
@@ -1428,6 +1416,7 @@ int do_set(char *arg, int opt_flags)
|
|||||||
goto skip;
|
goto skip;
|
||||||
}
|
}
|
||||||
} else if (*arg == '-' || ascii_isdigit(*arg)) {
|
} else if (*arg == '-' || ascii_isdigit(*arg)) {
|
||||||
|
int i;
|
||||||
// Allow negative, octal and hex numbers.
|
// Allow negative, octal and hex numbers.
|
||||||
vim_str2nr(arg, NULL, &i, STR2NR_ALL, &value, NULL, 0, true);
|
vim_str2nr(arg, NULL, &i, STR2NR_ALL, &value, NULL, 0, true);
|
||||||
if (i == 0 || (arg[i] != NUL && !ascii_iswhite(arg[i]))) {
|
if (i == 0 || (arg[i] != NUL && !ascii_iswhite(arg[i]))) {
|
||||||
@@ -1476,7 +1465,7 @@ skip:
|
|||||||
// - skip until a blank found, taking care of backslashes
|
// - skip until a blank found, taking care of backslashes
|
||||||
// - skip blanks
|
// - skip blanks
|
||||||
// - skip one "=val" argument (for hidden options ":set gfn =xx")
|
// - skip one "=val" argument (for hidden options ":set gfn =xx")
|
||||||
for (i = 0; i < 2; i++) {
|
for (int i = 0; i < 2; i++) {
|
||||||
while (*arg != NUL && !ascii_iswhite(*arg)) {
|
while (*arg != NUL && !ascii_iswhite(*arg)) {
|
||||||
if (*arg++ == '\\' && *arg != NUL) {
|
if (*arg++ == '\\' && *arg != NUL) {
|
||||||
arg++;
|
arg++;
|
||||||
@@ -1491,7 +1480,7 @@ skip:
|
|||||||
|
|
||||||
if (errmsg != NULL) {
|
if (errmsg != NULL) {
|
||||||
STRLCPY(IObuff, _(errmsg), IOSIZE);
|
STRLCPY(IObuff, _(errmsg), IOSIZE);
|
||||||
i = (int)strlen(IObuff) + 2;
|
int i = (int)strlen(IObuff) + 2;
|
||||||
if (i + (arg - startarg) < IOSIZE) {
|
if (i + (arg - startarg) < IOSIZE) {
|
||||||
// append the argument with the error
|
// append the argument with the error
|
||||||
STRCAT(IObuff, ": ");
|
STRCAT(IObuff, ": ");
|
||||||
@@ -1632,9 +1621,7 @@ void set_options_bin(int oldval, int newval, int opt_flags)
|
|||||||
/// number, return -1.
|
/// number, return -1.
|
||||||
int get_shada_parameter(int type)
|
int get_shada_parameter(int type)
|
||||||
{
|
{
|
||||||
char_u *p;
|
char_u *p = find_shada_parameter(type);
|
||||||
|
|
||||||
p = find_shada_parameter(type);
|
|
||||||
if (p != NULL && ascii_isdigit(*p)) {
|
if (p != NULL && ascii_isdigit(*p)) {
|
||||||
return atoi((char *)p);
|
return atoi((char *)p);
|
||||||
}
|
}
|
||||||
@@ -2661,14 +2648,13 @@ void check_redraw(uint32_t flags)
|
|||||||
int findoption_len(const char *const arg, const size_t len)
|
int findoption_len(const char *const arg, const size_t len)
|
||||||
{
|
{
|
||||||
const char *s;
|
const char *s;
|
||||||
const char *p;
|
|
||||||
static int quick_tab[27] = { 0, 0 }; // quick access table
|
static int quick_tab[27] = { 0, 0 }; // quick access table
|
||||||
|
|
||||||
// For first call: Initialize the quick-access table.
|
// For first call: Initialize the quick-access table.
|
||||||
// It contains the index for the first option that starts with a certain
|
// It contains the index for the first option that starts with a certain
|
||||||
// letter. There are 26 letters, plus the first "t_" option.
|
// letter. There are 26 letters, plus the first "t_" option.
|
||||||
if (quick_tab[1] == 0) {
|
if (quick_tab[1] == 0) {
|
||||||
p = options[0].fullname;
|
const char *p = options[0].fullname;
|
||||||
for (uint16_t i = 1; (s = options[i].fullname) != NULL; i++) {
|
for (uint16_t i = 1; (s = options[i].fullname) != NULL; i++) {
|
||||||
if (s[0] != p[0]) {
|
if (s[0] != p[0]) {
|
||||||
if (s[0] == 't' && s[1] == '_') {
|
if (s[0] == 't' && s[1] == '_') {
|
||||||
@@ -3033,10 +3019,7 @@ char *set_option_value(const char *const name, const long number, const char *co
|
|||||||
return NULL; // Fail silently; many old vimrcs set t_xx options.
|
return NULL; // Fail silently; many old vimrcs set t_xx options.
|
||||||
}
|
}
|
||||||
|
|
||||||
int opt_idx;
|
int opt_idx = findoption(name);
|
||||||
char_u *varp;
|
|
||||||
|
|
||||||
opt_idx = findoption(name);
|
|
||||||
if (opt_idx < 0) {
|
if (opt_idx < 0) {
|
||||||
semsg(_("E355: Unknown option: %s"), name);
|
semsg(_("E355: Unknown option: %s"), name);
|
||||||
} else {
|
} else {
|
||||||
@@ -3054,7 +3037,7 @@ char *set_option_value(const char *const name, const long number, const char *co
|
|||||||
return set_string_option(opt_idx, s, opt_flags);
|
return set_string_option(opt_idx, s, opt_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
varp = (char_u *)get_varp_scope(&(options[opt_idx]), opt_flags);
|
char_u *varp = (char_u *)get_varp_scope(&(options[opt_idx]), opt_flags);
|
||||||
if (varp != NULL) { // hidden option is not changed
|
if (varp != NULL) { // hidden option is not changed
|
||||||
if (number == 0 && string != NULL) {
|
if (number == 0 && string != NULL) {
|
||||||
int idx;
|
int idx;
|
||||||
@@ -3125,7 +3108,6 @@ bool is_string_option(const char *name)
|
|||||||
int find_key_option_len(const char_u *arg_arg, size_t len, bool has_lt)
|
int find_key_option_len(const char_u *arg_arg, size_t len, bool has_lt)
|
||||||
{
|
{
|
||||||
int key = 0;
|
int key = 0;
|
||||||
int modifiers;
|
|
||||||
const char_u *arg = arg_arg;
|
const char_u *arg = arg_arg;
|
||||||
|
|
||||||
// Don't use get_special_key_code() for t_xx, we don't want it to call
|
// Don't use get_special_key_code() for t_xx, we don't want it to call
|
||||||
@@ -3134,7 +3116,7 @@ int find_key_option_len(const char_u *arg_arg, size_t len, bool has_lt)
|
|||||||
key = TERMCAP2KEY(arg[2], arg[3]);
|
key = TERMCAP2KEY(arg[2], arg[3]);
|
||||||
} else if (has_lt) {
|
} else if (has_lt) {
|
||||||
arg--; // put arg at the '<'
|
arg--; // put arg at the '<'
|
||||||
modifiers = 0;
|
int modifiers = 0;
|
||||||
key = find_special_key(&arg, len + 1, &modifiers,
|
key = find_special_key(&arg, len + 1, &modifiers,
|
||||||
FSK_KEYCODE | FSK_KEEP_X_KEY | FSK_SIMPLIFY, NULL);
|
FSK_KEYCODE | FSK_KEEP_X_KEY | FSK_SIMPLIFY, NULL);
|
||||||
if (modifiers) { // can't handle modifiers here
|
if (modifiers) { // can't handle modifiers here
|
||||||
@@ -3155,16 +3137,6 @@ static int find_key_option(const char *arg, bool has_lt)
|
|||||||
/// @param opt_flags OPT_LOCAL and/or OPT_GLOBAL
|
/// @param opt_flags OPT_LOCAL and/or OPT_GLOBAL
|
||||||
static void showoptions(int all, int opt_flags)
|
static void showoptions(int all, int opt_flags)
|
||||||
{
|
{
|
||||||
vimoption_T *p;
|
|
||||||
int col;
|
|
||||||
char_u *varp;
|
|
||||||
int item_count;
|
|
||||||
int run;
|
|
||||||
int row, rows;
|
|
||||||
int cols;
|
|
||||||
int i;
|
|
||||||
int len;
|
|
||||||
|
|
||||||
#define INC 20
|
#define INC 20
|
||||||
#define GAP 3
|
#define GAP 3
|
||||||
|
|
||||||
@@ -3183,16 +3155,16 @@ static void showoptions(int all, int opt_flags)
|
|||||||
// 1. display the short items
|
// 1. display the short items
|
||||||
// 2. display the long items (only strings and numbers)
|
// 2. display the long items (only strings and numbers)
|
||||||
// When "opt_flags" has OPT_ONECOLUMN do everything in run 2.
|
// When "opt_flags" has OPT_ONECOLUMN do everything in run 2.
|
||||||
for (run = 1; run <= 2 && !got_int; run++) {
|
for (int run = 1; run <= 2 && !got_int; run++) {
|
||||||
// collect the items in items[]
|
// collect the items in items[]
|
||||||
item_count = 0;
|
int item_count = 0;
|
||||||
for (p = &options[0]; p->fullname != NULL; p++) {
|
for (vimoption_T *p = &options[0]; p->fullname != NULL; p++) {
|
||||||
// apply :filter /pat/
|
// apply :filter /pat/
|
||||||
if (message_filtered(p->fullname)) {
|
if (message_filtered(p->fullname)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
varp = NULL;
|
char_u *varp = NULL;
|
||||||
if ((opt_flags & (OPT_LOCAL | OPT_GLOBAL)) != 0) {
|
if ((opt_flags & (OPT_LOCAL | OPT_GLOBAL)) != 0) {
|
||||||
if (p->indir != PV_NONE) {
|
if (p->indir != PV_NONE) {
|
||||||
varp = (char_u *)get_varp_scope(p, opt_flags);
|
varp = (char_u *)get_varp_scope(p, opt_flags);
|
||||||
@@ -3202,6 +3174,7 @@ static void showoptions(int all, int opt_flags)
|
|||||||
}
|
}
|
||||||
if (varp != NULL
|
if (varp != NULL
|
||||||
&& (all == 1 || (all == 0 && !optval_default(p, varp)))) {
|
&& (all == 1 || (all == 0 && !optval_default(p, varp)))) {
|
||||||
|
int len;
|
||||||
if (opt_flags & OPT_ONECOLUMN) {
|
if (opt_flags & OPT_ONECOLUMN) {
|
||||||
len = Columns;
|
len = Columns;
|
||||||
} else if (p->flags & P_BOOL) {
|
} else if (p->flags & P_BOOL) {
|
||||||
@@ -3217,13 +3190,15 @@ static void showoptions(int all, int opt_flags)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int rows;
|
||||||
|
|
||||||
// display the items
|
// display the items
|
||||||
if (run == 1) {
|
if (run == 1) {
|
||||||
assert(Columns <= INT_MAX - GAP
|
assert(Columns <= INT_MAX - GAP
|
||||||
&& Columns + GAP >= INT_MIN + 3
|
&& Columns + GAP >= INT_MIN + 3
|
||||||
&& (Columns + GAP - 3) / INC >= INT_MIN
|
&& (Columns + GAP - 3) / INC >= INT_MIN
|
||||||
&& (Columns + GAP - 3) / INC <= INT_MAX);
|
&& (Columns + GAP - 3) / INC <= INT_MAX);
|
||||||
cols = (Columns + GAP - 3) / INC;
|
int cols = (Columns + GAP - 3) / INC;
|
||||||
if (cols == 0) {
|
if (cols == 0) {
|
||||||
cols = 1;
|
cols = 1;
|
||||||
}
|
}
|
||||||
@@ -3231,13 +3206,13 @@ static void showoptions(int all, int opt_flags)
|
|||||||
} else { // run == 2
|
} else { // run == 2
|
||||||
rows = item_count;
|
rows = item_count;
|
||||||
}
|
}
|
||||||
for (row = 0; row < rows && !got_int; row++) {
|
for (int row = 0; row < rows && !got_int; row++) {
|
||||||
msg_putchar('\n'); // go to next line
|
msg_putchar('\n'); // go to next line
|
||||||
if (got_int) { // 'q' typed in more
|
if (got_int) { // 'q' typed in more
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
col = 0;
|
int col = 0;
|
||||||
for (i = row; i < item_count; i += rows) {
|
for (int i = row; i < item_count; i += rows) {
|
||||||
msg_col = col; // make columns
|
msg_col = col; // make columns
|
||||||
showoneopt(items[i], opt_flags);
|
showoneopt(items[i], opt_flags);
|
||||||
col += INC;
|
col += INC;
|
||||||
@@ -3346,14 +3321,6 @@ static void showoneopt(vimoption_T *p, int opt_flags)
|
|||||||
/// Return FAIL on error, OK otherwise.
|
/// Return FAIL on error, OK otherwise.
|
||||||
int makeset(FILE *fd, int opt_flags, int local_only)
|
int makeset(FILE *fd, int opt_flags, int local_only)
|
||||||
{
|
{
|
||||||
vimoption_T *p;
|
|
||||||
char *varp; // currently used value
|
|
||||||
char_u *varp_fresh; // local value
|
|
||||||
char_u *varp_local = NULL; // fresh value
|
|
||||||
char *cmd;
|
|
||||||
int round;
|
|
||||||
int pri;
|
|
||||||
|
|
||||||
// Some options are never written:
|
// Some options are never written:
|
||||||
// - Options that don't have a default (terminal name, columns, lines).
|
// - Options that don't have a default (terminal name, columns, lines).
|
||||||
// - Terminal options.
|
// - Terminal options.
|
||||||
@@ -3361,8 +3328,8 @@ int makeset(FILE *fd, int opt_flags, int local_only)
|
|||||||
//
|
//
|
||||||
// Do the loop over "options[]" twice: once for options with the
|
// Do the loop over "options[]" twice: once for options with the
|
||||||
// P_PRI_MKRC flag and once without.
|
// P_PRI_MKRC flag and once without.
|
||||||
for (pri = 1; pri >= 0; pri--) {
|
for (int pri = 1; pri >= 0; pri--) {
|
||||||
for (p = &options[0]; p->fullname; p++) {
|
for (vimoption_T *p = &options[0]; p->fullname; p++) {
|
||||||
if (!(p->flags & P_NO_MKRC)
|
if (!(p->flags & P_NO_MKRC)
|
||||||
&& ((pri == 1) == ((p->flags & P_PRI_MKRC) != 0))) {
|
&& ((pri == 1) == ((p->flags & P_PRI_MKRC) != 0))) {
|
||||||
// skip global option when only doing locals
|
// skip global option when only doing locals
|
||||||
@@ -3376,7 +3343,7 @@ int makeset(FILE *fd, int opt_flags, int local_only)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
varp = get_varp_scope(p, opt_flags);
|
char *varp = get_varp_scope(p, opt_flags); // currently used value
|
||||||
// Hidden options are never written.
|
// Hidden options are never written.
|
||||||
if (!varp) {
|
if (!varp) {
|
||||||
continue;
|
continue;
|
||||||
@@ -3391,7 +3358,8 @@ int makeset(FILE *fd, int opt_flags, int local_only)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
round = 2;
|
int round = 2;
|
||||||
|
char_u *varp_local = NULL; // fresh value
|
||||||
if (p->indir != PV_NONE) {
|
if (p->indir != PV_NONE) {
|
||||||
if (p->var == VAR_WIN) {
|
if (p->var == VAR_WIN) {
|
||||||
// skip window-local option when only doing globals
|
// skip window-local option when only doing globals
|
||||||
@@ -3401,7 +3369,7 @@ int makeset(FILE *fd, int opt_flags, int local_only)
|
|||||||
// When fresh value of window-local option is not at the
|
// When fresh value of window-local option is not at the
|
||||||
// default, need to write it too.
|
// default, need to write it too.
|
||||||
if (!(opt_flags & OPT_GLOBAL) && !local_only) {
|
if (!(opt_flags & OPT_GLOBAL) && !local_only) {
|
||||||
varp_fresh = (char_u *)get_varp_scope(p, OPT_GLOBAL);
|
char_u *varp_fresh = (char_u *)get_varp_scope(p, OPT_GLOBAL); // local value
|
||||||
if (!optval_default(p, varp_fresh)) {
|
if (!optval_default(p, varp_fresh)) {
|
||||||
round = 1;
|
round = 1;
|
||||||
varp_local = (char_u *)varp;
|
varp_local = (char_u *)varp;
|
||||||
@@ -3414,6 +3382,7 @@ int makeset(FILE *fd, int opt_flags, int local_only)
|
|||||||
// Round 1: fresh value for window-local options.
|
// Round 1: fresh value for window-local options.
|
||||||
// Round 2: other values
|
// Round 2: other values
|
||||||
for (; round <= 2; varp = (char *)varp_local, round++) {
|
for (; round <= 2; varp = (char *)varp_local, round++) {
|
||||||
|
char *cmd;
|
||||||
if (round == 1 || (opt_flags & OPT_GLOBAL)) {
|
if (round == 1 || (opt_flags & OPT_GLOBAL)) {
|
||||||
cmd = "set";
|
cmd = "set";
|
||||||
} else {
|
} else {
|
||||||
@@ -3477,10 +3446,8 @@ int makefoldset(FILE *fd)
|
|||||||
|
|
||||||
static int put_setstring(FILE *fd, char *cmd, char *name, char **valuep, uint64_t flags)
|
static int put_setstring(FILE *fd, char *cmd, char *name, char **valuep, uint64_t flags)
|
||||||
{
|
{
|
||||||
char_u *s;
|
|
||||||
char_u *buf = NULL;
|
char_u *buf = NULL;
|
||||||
char_u *part = NULL;
|
char_u *part = NULL;
|
||||||
char *p;
|
|
||||||
|
|
||||||
if (fprintf(fd, "%s %s=", cmd, name) < 0) {
|
if (fprintf(fd, "%s %s=", cmd, name) < 0) {
|
||||||
return FAIL;
|
return FAIL;
|
||||||
@@ -3490,7 +3457,7 @@ static int put_setstring(FILE *fd, char *cmd, char *name, char **valuep, uint64_
|
|||||||
// options some characters have to be escaped with
|
// options some characters have to be escaped with
|
||||||
// CTRL-V or backslash
|
// CTRL-V or backslash
|
||||||
if (valuep == &p_pt) {
|
if (valuep == &p_pt) {
|
||||||
s = (char_u *)(*valuep);
|
char_u *s = (char_u *)(*valuep);
|
||||||
while (*s != NUL) {
|
while (*s != NUL) {
|
||||||
if (put_escstr(fd, (char_u *)str2special((const char **)&s, false, false), 2) == FAIL) {
|
if (put_escstr(fd, (char_u *)str2special((const char **)&s, false, false), 2) == FAIL) {
|
||||||
return FAIL;
|
return FAIL;
|
||||||
@@ -3514,7 +3481,7 @@ static int put_setstring(FILE *fd, char *cmd, char *name, char **valuep, uint64_
|
|||||||
if (put_eol(fd) == FAIL) {
|
if (put_eol(fd) == FAIL) {
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
p = (char *)buf;
|
char *p = (char *)buf;
|
||||||
while (*p != NUL) {
|
while (*p != NUL) {
|
||||||
// for each comma separated option part, append value to
|
// for each comma separated option part, append value to
|
||||||
// the option, :set rtp+=value
|
// the option, :set rtp+=value
|
||||||
@@ -4266,7 +4233,6 @@ void buf_copy_options(buf_T *buf, int flags)
|
|||||||
{
|
{
|
||||||
int should_copy = true;
|
int should_copy = true;
|
||||||
char_u *save_p_isk = NULL; // init for GCC
|
char_u *save_p_isk = NULL; // init for GCC
|
||||||
int dont_do_help;
|
|
||||||
int did_isk = false;
|
int did_isk = false;
|
||||||
|
|
||||||
// Skip this when the option defaults have not been set yet. Happens when
|
// Skip this when the option defaults have not been set yet. Happens when
|
||||||
@@ -4297,7 +4263,7 @@ void buf_copy_options(buf_T *buf, int flags)
|
|||||||
// Don't copy the options specific to a help buffer when
|
// Don't copy the options specific to a help buffer when
|
||||||
// BCO_NOHELP is given or the options were initialized already
|
// BCO_NOHELP is given or the options were initialized already
|
||||||
// (jumping back to a help file with CTRL-T or CTRL-O)
|
// (jumping back to a help file with CTRL-T or CTRL-O)
|
||||||
dont_do_help = ((flags & BCO_NOHELP) && buf->b_help) || buf->b_p_initialized;
|
bool dont_do_help = ((flags & BCO_NOHELP) && buf->b_help) || buf->b_p_initialized;
|
||||||
if (dont_do_help) { // don't free b_p_isk
|
if (dont_do_help) { // don't free b_p_isk
|
||||||
save_p_isk = (char_u *)buf->b_p_isk;
|
save_p_isk = (char_u *)buf->b_p_isk;
|
||||||
buf->b_p_isk = NULL;
|
buf->b_p_isk = NULL;
|
||||||
@@ -4567,13 +4533,10 @@ static int expand_option_flags = 0;
|
|||||||
/// @param opt_flags OPT_GLOBAL and/or OPT_LOCAL
|
/// @param opt_flags OPT_GLOBAL and/or OPT_LOCAL
|
||||||
void set_context_in_set_cmd(expand_T *xp, char *arg, int opt_flags)
|
void set_context_in_set_cmd(expand_T *xp, char *arg, int opt_flags)
|
||||||
{
|
{
|
||||||
char nextchar;
|
|
||||||
uint32_t flags = 0; // init for GCC
|
uint32_t flags = 0; // init for GCC
|
||||||
int opt_idx = 0; // init for GCC
|
int opt_idx = 0; // init for GCC
|
||||||
char *p;
|
char *p;
|
||||||
char *s;
|
|
||||||
int is_term_option = false;
|
int is_term_option = false;
|
||||||
int key;
|
|
||||||
|
|
||||||
expand_option_flags = opt_flags;
|
expand_option_flags = opt_flags;
|
||||||
|
|
||||||
@@ -4588,7 +4551,7 @@ void set_context_in_set_cmd(expand_T *xp, char *arg, int opt_flags)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
while (p > arg) {
|
while (p > arg) {
|
||||||
s = p;
|
char *s = p;
|
||||||
// count number of backslashes before ' ' or ','
|
// count number of backslashes before ' ' or ','
|
||||||
if (*p == ' ' || *p == ',') {
|
if (*p == ' ' || *p == ',') {
|
||||||
while (s > arg && *(s - 1) == '\\') {
|
while (s > arg && *(s - 1) == '\\') {
|
||||||
@@ -4612,13 +4575,16 @@ void set_context_in_set_cmd(expand_T *xp, char *arg, int opt_flags)
|
|||||||
}
|
}
|
||||||
xp->xp_pattern = p;
|
xp->xp_pattern = p;
|
||||||
arg = p;
|
arg = p;
|
||||||
|
|
||||||
|
char nextchar;
|
||||||
|
|
||||||
if (*arg == '<') {
|
if (*arg == '<') {
|
||||||
while (*p != '>') {
|
while (*p != '>') {
|
||||||
if (*p++ == NUL) { // expand terminal option name
|
if (*p++ == NUL) { // expand terminal option name
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
key = get_special_key_code((char_u *)arg + 1);
|
int key = get_special_key_code((char_u *)arg + 1);
|
||||||
if (key == 0) { // unknown name
|
if (key == 0) { // unknown name
|
||||||
xp->xp_context = EXPAND_NOTHING;
|
xp->xp_context = EXPAND_NOTHING;
|
||||||
return;
|
return;
|
||||||
@@ -4721,7 +4687,7 @@ void set_context_in_set_cmd(expand_T *xp, char *arg, int opt_flags)
|
|||||||
for (p = arg + strlen(arg) - 1; p > xp->xp_pattern; p--) {
|
for (p = arg + strlen(arg) - 1; p > xp->xp_pattern; p--) {
|
||||||
// count number of backslashes before ' ' or ','
|
// count number of backslashes before ' ' or ','
|
||||||
if (*p == ' ' || *p == ',') {
|
if (*p == ' ' || *p == ',') {
|
||||||
s = p;
|
char *s = p;
|
||||||
while (s > xp->xp_pattern && *(s - 1) == '\\') {
|
while (s > xp->xp_pattern && *(s - 1) == '\\') {
|
||||||
s--;
|
s--;
|
||||||
}
|
}
|
||||||
@@ -4744,17 +4710,15 @@ void set_context_in_set_cmd(expand_T *xp, char *arg, int opt_flags)
|
|||||||
int ExpandSettings(expand_T *xp, regmatch_T *regmatch, int *num_file, char ***file)
|
int ExpandSettings(expand_T *xp, regmatch_T *regmatch, int *num_file, char ***file)
|
||||||
{
|
{
|
||||||
int num_normal = 0; // Nr of matching non-term-code settings
|
int num_normal = 0; // Nr of matching non-term-code settings
|
||||||
int match;
|
|
||||||
int count = 0;
|
int count = 0;
|
||||||
char *str;
|
|
||||||
int loop;
|
|
||||||
static char *(names[]) = { "all" };
|
static char *(names[]) = { "all" };
|
||||||
int ic = regmatch->rm_ic; // remember the ignore-case flag
|
int ic = regmatch->rm_ic; // remember the ignore-case flag
|
||||||
|
|
||||||
// do this loop twice:
|
// do this loop twice:
|
||||||
// loop == 0: count the number of matching options
|
// loop == 0: count the number of matching options
|
||||||
// loop == 1: copy the matching options into allocated memory
|
// loop == 1: copy the matching options into allocated memory
|
||||||
for (loop = 0; loop <= 1; loop++) {
|
for (int loop = 0; loop <= 1; loop++) {
|
||||||
|
int match;
|
||||||
regmatch->rm_ic = ic;
|
regmatch->rm_ic = ic;
|
||||||
if (xp->xp_context != EXPAND_BOOL_SETTINGS) {
|
if (xp->xp_context != EXPAND_BOOL_SETTINGS) {
|
||||||
for (match = 0; match < (int)ARRAY_SIZE(names);
|
for (match = 0; match < (int)ARRAY_SIZE(names);
|
||||||
@@ -4768,6 +4732,7 @@ int ExpandSettings(expand_T *xp, regmatch_T *regmatch, int *num_file, char ***fi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
char *str;
|
||||||
for (size_t opt_idx = 0; (str = options[opt_idx].fullname) != NULL;
|
for (size_t opt_idx = 0; (str = options[opt_idx].fullname) != NULL;
|
||||||
opt_idx++) {
|
opt_idx++) {
|
||||||
if (options[opt_idx].var == NULL) {
|
if (options[opt_idx].var == NULL) {
|
||||||
@@ -5090,15 +5055,12 @@ void reset_option_was_set(const char *name)
|
|||||||
/// fill_breakat_flags() -- called when 'breakat' changes value.
|
/// fill_breakat_flags() -- called when 'breakat' changes value.
|
||||||
void fill_breakat_flags(void)
|
void fill_breakat_flags(void)
|
||||||
{
|
{
|
||||||
char_u *p;
|
for (int i = 0; i < 256; i++) {
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < 256; i++) {
|
|
||||||
breakat_flags[i] = false;
|
breakat_flags[i] = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p_breakat != NULL) {
|
if (p_breakat != NULL) {
|
||||||
for (p = (char_u *)p_breakat; *p; p++) {
|
for (char_u *p = (char_u *)p_breakat; *p; p++) {
|
||||||
breakat_flags[*p] = true;
|
breakat_flags[*p] = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user