refactor(optionstr.c): break up did_set_string_option 48

This commit is contained in:
Lewis Russell
2023-01-23 11:07:40 +00:00
parent f1ac5aec23
commit 01e51d3bd1

View File

@@ -1358,6 +1358,20 @@ static void did_set_signcolumn(win_T *win, char **varp, const char *oldval, char
} }
} }
static void did_set_showcmdloc(char **errmsg)
{
if (check_opt_strings(p_sloc, p_sloc_values, false) != OK) {
*errmsg = e_invarg;
}
}
static void did_set_foldcolumn(char **varp, char **errmsg)
{
if (**varp == NUL || check_opt_strings(*varp, p_fdc_values, false) != OK) {
*errmsg = e_invarg;
}
}
static void did_set_pastetoggle(void) static void did_set_pastetoggle(void)
{ {
// 'pastetoggle': translate key codes like in a mapping // 'pastetoggle': translate key codes like in a mapping
@@ -1374,6 +1388,24 @@ static void did_set_pastetoggle(void)
} }
} }
static void did_set_backspace(char **errmsg)
{
if (ascii_isdigit(*p_bs)) {
if (*p_bs > '3' || p_bs[1] != NUL) {
*errmsg = e_invarg;
}
} else if (check_opt_strings(p_bs, p_bs_values, true) != OK) {
*errmsg = e_invarg;
}
}
static void did_set_belloff(char **errmsg)
{
if (opt_strings_flags(p_bo, p_bo_values, &bo_flags, true) != OK) {
*errmsg = e_invarg;
}
}
static void did_set_tagcase(buf_T *buf, int opt_flags, char **errmsg) static void did_set_tagcase(buf_T *buf, int opt_flags, char **errmsg)
{ {
unsigned int *flags; unsigned int *flags;
@@ -1396,6 +1428,45 @@ static void did_set_tagcase(buf_T *buf, int opt_flags, char **errmsg)
} }
} }
static void did_set_casemap(char **errmsg)
{
if (opt_strings_flags(p_cmp, p_cmp_values, &cmp_flags, true) != OK) {
*errmsg = e_invarg;
}
}
static void did_set_diffopt(char **errmsg)
{
if (diffopt_changed() == FAIL) {
*errmsg = e_invarg;
}
}
static void did_set_foldmethod(win_T *win, char **varp, char **errmsg)
{
if (check_opt_strings(*varp, p_fdm_values, false) != OK
|| *win->w_p_fdm == NUL) {
*errmsg = e_invarg;
} else {
foldUpdateAll(win);
if (foldmethodIsDiff(win)) {
newFoldLevel();
}
}
}
static void did_set_foldmarker(win_T *win, char **varp, char **errmsg)
{
char *p = vim_strchr(*varp, ',');
if (p == NULL) {
*errmsg = N_("E536: comma required");
} else if (p == *varp || p[1] == NUL) {
*errmsg = e_invarg;
} else if (foldmethodIsMarker(win)) {
foldUpdateAll(win);
}
}
static void did_set_virtualedit(win_T *win, int opt_flags, char *oldval, char **errmsg) static void did_set_virtualedit(win_T *win, int opt_flags, char *oldval, char **errmsg)
{ {
char *ve = p_ve; char *ve = p_ve;
@@ -1751,58 +1822,27 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf
} else if (varp == &curwin->w_p_scl) { // 'signcolumn' } else if (varp == &curwin->w_p_scl) { // 'signcolumn'
did_set_signcolumn(curwin, varp, oldval, &errmsg); did_set_signcolumn(curwin, varp, oldval, &errmsg);
} else if (varp == &p_sloc) { // 'showcmdloc' } else if (varp == &p_sloc) { // 'showcmdloc'
if (check_opt_strings(p_sloc, p_sloc_values, false) != OK) { did_set_showcmdloc(&errmsg);
errmsg = e_invarg;
}
} else if (varp == &curwin->w_p_fdc } else if (varp == &curwin->w_p_fdc
|| varp == &curwin->w_allbuf_opt.wo_fdc) { || varp == &curwin->w_allbuf_opt.wo_fdc) {
// 'foldcolumn' // 'foldcolumn'
if (**varp == NUL || check_opt_strings(*varp, p_fdc_values, false) != OK) { did_set_foldcolumn(varp, &errmsg);
errmsg = e_invarg;
}
} else if (varp == &p_pt) { // 'pastetoggle' } else if (varp == &p_pt) { // 'pastetoggle'
did_set_pastetoggle(); did_set_pastetoggle();
} else if (varp == &p_bs) { // 'backspace' } else if (varp == &p_bs) { // 'backspace'
if (ascii_isdigit(*p_bs)) { did_set_backspace(&errmsg);
if (*p_bs > '3' || p_bs[1] != NUL) {
errmsg = e_invarg;
}
} else if (check_opt_strings(p_bs, p_bs_values, true) != OK) {
errmsg = e_invarg;
}
} else if (varp == &p_bo) { } else if (varp == &p_bo) {
if (opt_strings_flags(p_bo, p_bo_values, &bo_flags, true) != OK) { did_set_belloff(&errmsg);
errmsg = e_invarg;
}
} else if (gvarp == &p_tc) { // 'tagcase' } else if (gvarp == &p_tc) { // 'tagcase'
did_set_tagcase(curbuf, opt_flags, &errmsg); did_set_tagcase(curbuf, opt_flags, &errmsg);
} else if (varp == &p_cmp) { // 'casemap' } else if (varp == &p_cmp) { // 'casemap'
if (opt_strings_flags(p_cmp, p_cmp_values, &cmp_flags, true) != OK) { did_set_casemap(&errmsg);
errmsg = e_invarg;
}
} else if (varp == &p_dip) { // 'diffopt' } else if (varp == &p_dip) { // 'diffopt'
if (diffopt_changed() == FAIL) { did_set_diffopt(&errmsg);
errmsg = e_invarg;
}
} else if (gvarp == &curwin->w_allbuf_opt.wo_fdm) { // 'foldmethod' } else if (gvarp == &curwin->w_allbuf_opt.wo_fdm) { // 'foldmethod'
if (check_opt_strings(*varp, p_fdm_values, false) != OK did_set_foldmethod(curwin, varp, &errmsg);
|| *curwin->w_p_fdm == NUL) {
errmsg = e_invarg;
} else {
foldUpdateAll(curwin);
if (foldmethodIsDiff(curwin)) {
newFoldLevel();
}
}
} else if (gvarp == &curwin->w_allbuf_opt.wo_fmr) { // 'foldmarker' } else if (gvarp == &curwin->w_allbuf_opt.wo_fmr) { // 'foldmarker'
char *p = vim_strchr(*varp, ','); did_set_foldmarker(curwin, varp, &errmsg);
if (p == NULL) {
errmsg = N_("E536: comma required");
} else if (p == *varp || p[1] == NUL) {
errmsg = e_invarg;
} else if (foldmethodIsMarker(curwin)) {
foldUpdateAll(curwin);
}
} else if (gvarp == &p_cms) { // 'commentstring' } else if (gvarp == &p_cms) { // 'commentstring'
if (**varp != NUL && strstr(*varp, "%s") == NULL) { if (**varp != NUL && strstr(*varp, "%s") == NULL) {
errmsg = N_("E537: 'commentstring' must be empty or contain %s"); errmsg = N_("E537: 'commentstring' must be empty or contain %s");