From 6cc6e11929ad76a2dc5204aed95cb9ed1dafde23 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Tue, 23 Aug 2022 22:00:19 +0800 Subject: vim-patch:9.0.0206: redraw flags are not named specifically (#19913) Problem: Redraw flags are not named specifically. Solution: Prefix "UPD_" to the flags, for UPDate_screen(). https://github.com/vim/vim/commit/a4d158b3c839e96ed98ff87c7b7124ff4518c4ff --- src/nvim/optionstr.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/nvim/optionstr.c') diff --git a/src/nvim/optionstr.c b/src/nvim/optionstr.c index 3287abdd9c..78ae7e41ab 100644 --- a/src/nvim/optionstr.c +++ b/src/nvim/optionstr.c @@ -895,7 +895,7 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er // Redraw needed when switching to/from "mac": a CR in the text // will be displayed differently. if (get_fileformat(curbuf) == EOL_MAC || *oldval == 'm') { - redraw_curbuf_later(NOT_VALID); + redraw_curbuf_later(UPD_NOT_VALID); } } } else if (varp == (char_u **)&p_ffs) { // 'fileformats' @@ -962,7 +962,7 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er // here, so ignore the return value. (void)set_chars_option(wp, &wp->w_p_lcs, true); } - redraw_all_later(NOT_VALID); + redraw_all_later(UPD_NOT_VALID); } } else if (varp == &curwin->w_p_lcs) { // local 'listchars' errmsg = set_chars_option(curwin, varp, true); @@ -979,7 +979,7 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er // here, so ignore the return value. (void)set_chars_option(wp, &wp->w_p_fcs, true); } - redraw_all_later(NOT_VALID); + redraw_all_later(UPD_NOT_VALID); } } else if (varp == &curwin->w_p_fcs) { // local 'fillchars' errmsg = set_chars_option(curwin, varp, true); @@ -1158,7 +1158,7 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er } else { if (curwin->w_status_height || global_stl_height()) { curwin->w_redr_status = true; - redraw_later(curwin, VALID); + redraw_later(curwin, UPD_VALID); } curbuf->b_help = (curbuf->b_p_bt[0] == 'h'); redraw_titles(); -- cgit From 40855b0143a864739a6037921e15699445dcf8a7 Mon Sep 17 00:00:00 2001 From: Dundar Goc Date: Sun, 31 Jul 2022 16:20:57 +0200 Subject: refactor: replace char_u with char Work on https://github.com/neovim/neovim/issues/459 --- src/nvim/optionstr.c | 105 ++++++++++++++++++++++++++------------------------- 1 file changed, 53 insertions(+), 52 deletions(-) (limited to 'src/nvim/optionstr.c') diff --git a/src/nvim/optionstr.c b/src/nvim/optionstr.c index 78ae7e41ab..e1538e0491 100644 --- a/src/nvim/optionstr.c +++ b/src/nvim/optionstr.c @@ -254,14 +254,14 @@ void check_buf_options(buf_T *buf) /// memory, vim_strsave() returned NULL, which was replaced by empty_option by /// check_options(). /// Does NOT check for P_ALLOCED flag! -void free_string_option(char_u *p) +void free_string_option(char *p) { if (p != empty_option) { xfree(p); } } -void clear_string_option(char_u **pp) +void clear_string_option(char **pp) { if (*pp != empty_option) { xfree(*pp); @@ -269,7 +269,7 @@ void clear_string_option(char_u **pp) *pp = empty_option; } -void check_string_option(char_u **pp) +void check_string_option(char **pp) { if (*pp == NULL) { *pp = empty_option; @@ -292,7 +292,7 @@ static void set_string_option_global(int opt_idx, char_u **varp) } if (!is_global_option(opt_idx) && p != varp) { s = vim_strsave(*varp); - free_string_option(*p); + free_string_option((char *)(*p)); *p = s; } } @@ -332,7 +332,7 @@ void set_string_option_direct(const char *name, int opt_idx, const char *val, in { varp = (char **)get_option_varp_scope(idx, both ? OPT_LOCAL : opt_flags); if ((opt_flags & OPT_FREE) && (get_option_flags(idx) & P_ALLOCED)) { - free_string_option((char_u *)(*varp)); + free_string_option(*varp); } *varp = s; @@ -346,8 +346,8 @@ void set_string_option_direct(const char *name, int opt_idx, const char *val, in // When setting both values of a global option with a local value, // make the local value empty, so that the global value is used. if (is_global_local_option(idx) && both) { - free_string_option((char_u *)(*varp)); - *varp = (char *)empty_option; + free_string_option(*varp); + *varp = empty_option; } if (set_sid != SID_NONE) { sctx_T script_ctx; @@ -662,7 +662,7 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er unsigned int *flags = &bkc_flags; if (opt_flags & OPT_LOCAL) { - bkc = curbuf->b_p_bkc; + bkc = (char_u *)curbuf->b_p_bkc; flags = &curbuf->b_bkc_flags; } @@ -687,12 +687,12 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er *p_pm == '.' ? p_pm + 1 : p_pm) == 0) { errmsg = e_backupext_and_patchmode_are_equal; } - } else if (varp == &curwin->w_p_briopt) { // 'breakindentopt' + } else if (varp == (char_u **)&curwin->w_p_briopt) { // 'breakindentopt' if (briopt_check(curwin) == FAIL) { errmsg = e_invarg; } } else if (varp == &p_isi - || varp == &(curbuf->b_p_isk) + || varp == (char_u **)&(curbuf->b_p_isk) || varp == &p_isp || varp == &p_isf) { // 'isident', 'iskeyword', 'isprint or 'isfname' option: refill g_chartab[] @@ -712,12 +712,12 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er } } else if (varp == &p_rtp || varp == &p_pp) { // 'runtimepath' 'packpath' runtime_search_path_invalidate(); - } else if (varp == &curwin->w_p_culopt - || gvarp == &curwin->w_allbuf_opt.wo_culopt) { // 'cursorlineopt' + } else if (varp == (char_u **)&curwin->w_p_culopt + || gvarp == (char_u **)&curwin->w_allbuf_opt.wo_culopt) { // 'cursorlineopt' if (**varp == NUL || fill_culopt_flags(*varp, curwin) != OK) { errmsg = e_invarg; } - } else if (varp == &curwin->w_p_cc) { // 'colorcolumn' + } else if (varp == (char_u **)&curwin->w_p_cc) { // 'colorcolumn' errmsg = check_colorcolumn(curwin); } else if (varp == &p_hlg) { // 'helplang' // Check for "", "ab", "ab,cd", etc. @@ -780,9 +780,9 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er // value, that's not what we want here. Disable the color // scheme and set the colors again. do_unlet(S_LEN("g:colors_name"), true); - free_string_option(p_bg); + free_string_option((char *)p_bg); p_bg = vim_strsave((char_u *)(dark ? "dark" : "light")); - check_string_option(&p_bg); + check_string_option((char **)&p_bg); init_highlight(false, false); } } else { @@ -841,7 +841,7 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er p = (char *)enc_canonize(p_penc); xfree(p_penc); p_penc = (char_u *)p; - } else if (varp == &curbuf->b_p_keymap) { + } else if (varp == (char_u **)&curbuf->b_p_keymap) { if (!valid_filetype(*varp)) { errmsg = e_invarg; } else { @@ -960,11 +960,11 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er FOR_ALL_TAB_WINDOWS(tp, wp) { // If no error was returned above, we don't expect an error // here, so ignore the return value. - (void)set_chars_option(wp, &wp->w_p_lcs, true); + (void)set_chars_option(wp, (char_u **)&wp->w_p_lcs, true); } redraw_all_later(UPD_NOT_VALID); } - } else if (varp == &curwin->w_p_lcs) { // local 'listchars' + } else if (varp == (char_u **)&curwin->w_p_lcs) { // local 'listchars' errmsg = set_chars_option(curwin, varp, true); } else if (varp == &p_fcs) { // global 'fillchars' errmsg = set_chars_option(curwin, varp, false); @@ -977,11 +977,11 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er FOR_ALL_TAB_WINDOWS(tp, wp) { // If no error was returned above, we don't expect an error // here, so ignore the return value. - (void)set_chars_option(wp, &wp->w_p_fcs, true); + (void)set_chars_option(wp, (char_u **)&wp->w_p_fcs, true); } redraw_all_later(UPD_NOT_VALID); } - } else if (varp == &curwin->w_p_fcs) { // local 'fillchars' + } else if (varp == (char_u **)&curwin->w_p_fcs) { // local 'fillchars' errmsg = set_chars_option(curwin, varp, true); } else if (varp == &p_cedit) { // 'cedit' errmsg = check_cedit(); @@ -1117,11 +1117,11 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er if (opt_strings_flags(p_cb, p_cb_values, &cb_flags, true) != OK) { errmsg = e_invarg; } - } else if (varp == &(curwin->w_s->b_p_spl) // 'spell' - || varp == &(curwin->w_s->b_p_spf)) { + } else if (varp == (char_u **)&(curwin->w_s->b_p_spl) // 'spell' + || varp == (char_u **)&(curwin->w_s->b_p_spf)) { // When 'spelllang' or 'spellfile' is set and there is a window for this // buffer in which 'spell' is set load the wordlists. - const bool is_spellfile = varp == &(curwin->w_s->b_p_spf); + const bool is_spellfile = varp == (char_u **)&(curwin->w_s->b_p_spf); if ((is_spellfile && !valid_spellfile(*varp)) || (!is_spellfile && !valid_spelllang(*varp))) { @@ -1129,10 +1129,10 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er } else { errmsg = did_set_spell_option(is_spellfile); } - } else if (varp == &(curwin->w_s->b_p_spc)) { + } else if (varp == (char_u **)&(curwin->w_s->b_p_spc)) { // When 'spellcapcheck' is set compile the regexp program. errmsg = compile_cap_prog(curwin->w_s); - } else if (varp == &(curwin->w_s->b_p_spo)) { // 'spelloptions' + } else if (varp == (char_u **)&(curwin->w_s->b_p_spo)) { // 'spelloptions' if (**varp != NUL && STRCMP("camel", *varp) != 0) { errmsg = e_invarg; } @@ -1146,14 +1146,14 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er } } else if (gvarp == &p_bh) { // When 'bufhidden' is set, check for valid value. - if (check_opt_strings(curbuf->b_p_bh, p_bufhidden_values, false) != OK) { + if (check_opt_strings((char_u *)curbuf->b_p_bh, p_bufhidden_values, false) != OK) { errmsg = e_invarg; } } else if (gvarp == &p_bt) { // When 'buftype' is set, check for valid value. if ((curbuf->terminal && curbuf->b_p_bt[0] != 't') || (!curbuf->terminal && curbuf->b_p_bt[0] == 't') - || check_opt_strings(curbuf->b_p_bt, p_buftype_values, false) != OK) { + || check_opt_strings((char_u *)curbuf->b_p_bt, p_buftype_values, false) != OK) { errmsg = e_invarg; } else { if (curwin->w_status_height || global_stl_height()) { @@ -1241,7 +1241,7 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er errmsg = e_invarg; } #endif - } else if (varp == &curwin->w_p_scl) { // 'signcolumn' + } else if (varp == (char_u **)&curwin->w_p_scl) { // 'signcolumn' if (check_signcolumn(*varp) != OK) { errmsg = e_invarg; } @@ -1252,7 +1252,8 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er && (curwin->w_p_nu || curwin->w_p_rnu)) { curwin->w_nrwidth_line_count = 0; } - } else if (varp == &curwin->w_p_fdc || varp == &curwin->w_allbuf_opt.wo_fdc) { + } else if (varp == (char_u **)&curwin->w_p_fdc + || varp == (char_u **)&curwin->w_allbuf_opt.wo_fdc) { // 'foldcolumn' if (**varp == NUL || check_opt_strings(*varp, p_fdc_values, false) != OK) { errmsg = e_invarg; @@ -1266,7 +1267,7 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er &p, REPTERM_FROM_PART | REPTERM_DO_LT, NULL, CPO_TO_CPO_FLAGS); if (p != NULL) { - free_string_option(p_pt); + free_string_option((char *)p_pt); p_pt = (char_u *)p; } } @@ -1286,7 +1287,7 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er unsigned int *flags; if (opt_flags & OPT_LOCAL) { - p = (char *)curbuf->b_p_tc; + p = curbuf->b_p_tc; flags = &curbuf->b_tc_flags; } else { p = (char *)p_tc; @@ -1308,7 +1309,7 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er if (diffopt_changed() == FAIL) { errmsg = e_invarg; } - } else if (gvarp == &curwin->w_allbuf_opt.wo_fdm) { // 'foldmethod' + } else if (gvarp == (char_u **)&curwin->w_allbuf_opt.wo_fdm) { // 'foldmethod' if (check_opt_strings(*varp, p_fdm_values, false) != OK || *curwin->w_p_fdm == NUL) { errmsg = e_invarg; @@ -1318,11 +1319,11 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er newFoldLevel(); } } - } else if (varp == &curwin->w_p_fde) { // 'foldexpr' + } else if (varp == (char_u **)&curwin->w_p_fde) { // 'foldexpr' if (foldmethodIsExpr(curwin)) { foldUpdateAll(curwin); } - } else if (gvarp == &curwin->w_allbuf_opt.wo_fmr) { // 'foldmarker' + } else if (gvarp == (char_u **)&curwin->w_allbuf_opt.wo_fmr) { // 'foldmarker' p = vim_strchr((char *)(*varp), ','); if (p == NULL) { errmsg = N_("E536: comma required"); @@ -1343,7 +1344,7 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er if (check_opt_strings(p_fcl, p_fcl_values, true) != OK) { errmsg = e_invarg; } - } else if (gvarp == &curwin->w_allbuf_opt.wo_fdi) { // 'foldignore' + } else if (gvarp == (char_u **)&curwin->w_allbuf_opt.wo_fdi) { // 'foldignore' if (foldmethodIsIndent(curwin)) { foldUpdateAll(curwin); } @@ -1352,7 +1353,7 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er unsigned int *flags = &ve_flags; if (opt_flags & OPT_LOCAL) { - ve = curwin->w_p_ve; + ve = (char_u *)curwin->w_p_ve; flags = &curwin->w_ve_flags; } @@ -1413,7 +1414,7 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er // even when the value comes from a modeline. *value_checked = true; } - } else if (varp == &curwin->w_p_winhl) { + } else if (varp == (char_u **)&curwin->w_p_winhl) { if (!parse_winhl_opt(curwin)) { errmsg = e_invarg; } @@ -1421,7 +1422,7 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er if (opt_strings_flags(p_tpf, p_tpf_values, &tpf_flags, true) != OK) { errmsg = e_invarg; } - } else if (varp == &(curbuf->b_p_vsts)) { // 'varsofttabstop' + } else if (varp == (char_u **)&(curbuf->b_p_vsts)) { // 'varsofttabstop' char_u *cp; if (!(*varp)[0] || ((*varp)[0] == '0' && !(*varp)[1])) { @@ -1446,7 +1447,7 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er } } } - } else if (varp == &(curbuf->b_p_vts)) { // 'vartabstop' + } else if (varp == (char_u **)&(curbuf->b_p_vts)) { // 'vartabstop' char_u *cp; if (!(*varp)[0] || ((*varp)[0] == '0' && !(*varp)[1])) { @@ -1492,9 +1493,9 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er p = (char *)SHM_ALL; } else if (varp == (char_u **)&(p_cpo)) { // 'cpoptions' p = CPO_VI; - } else if (varp == &(curbuf->b_p_fo)) { // 'formatoptions' + } else if (varp == (char_u **)&(curbuf->b_p_fo)) { // 'formatoptions' p = FO_ALL; - } else if (varp == &curwin->w_p_cocu) { // 'concealcursor' + } else if (varp == (char_u **)&curwin->w_p_cocu) { // 'concealcursor' p = COCU_ALL; } else if (varp == &p_mouse) { // 'mouse' p = MOUSE_ALL; @@ -1511,7 +1512,7 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er // If error detected, restore the previous value. if (errmsg != NULL) { - free_string_option(*varp); + free_string_option((char *)(*varp)); *varp = oldval; // When resetting some values, need to act on it. if (did_chartab) { @@ -1524,7 +1525,7 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er // Use "free_oldval", because recursiveness may change the flags under // our fingers (esp. init_highlight()). if (free_oldval) { - free_string_option(oldval); + free_string_option((char *)oldval); } set_option_flag(opt_idx, P_ALLOCED); @@ -1533,8 +1534,8 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er // global option with local value set to use global value; free // the local value and make it empty p = (char *)get_option_varp_scope(opt_idx, OPT_LOCAL); - free_string_option(*(char_u **)p); - *(char_u **)p = empty_option; + free_string_option(*(char **)p); + *(char **)p = empty_option; } else if (!(opt_flags & OPT_LOCAL) && opt_flags != OPT_GLOBAL) { // May set global value for local option. set_string_option_global(opt_idx, varp); @@ -1542,17 +1543,17 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er // Trigger the autocommand only after setting the flags. // When 'syntax' is set, load the syntax of that name - if (varp == &(curbuf->b_p_syn)) { + if (varp == (char_u **)&(curbuf->b_p_syn)) { static int syn_recursive = 0; syn_recursive++; // Only pass true for "force" when the value changed or not used // recursively, to avoid endless recurrence. - apply_autocmds(EVENT_SYNTAX, (char *)curbuf->b_p_syn, curbuf->b_fname, + apply_autocmds(EVENT_SYNTAX, curbuf->b_p_syn, curbuf->b_fname, value_changed || syn_recursive == 1, curbuf); curbuf->b_flags |= BF_SYN_SET; syn_recursive--; - } else if (varp == &(curbuf->b_p_ft)) { + } else if (varp == (char_u **)&(curbuf->b_p_ft)) { // 'filetype' is set, trigger the FileType autocommand // Skip this when called from a modeline and the filetype was // already set to this value. @@ -1568,19 +1569,19 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er did_filetype = true; // Only pass true for "force" when the value changed or not // used recursively, to avoid endless recurrence. - apply_autocmds(EVENT_FILETYPE, (char *)curbuf->b_p_ft, curbuf->b_fname, + apply_autocmds(EVENT_FILETYPE, curbuf->b_p_ft, curbuf->b_fname, value_changed || ft_recursive == 1, curbuf); ft_recursive--; // Just in case the old "curbuf" is now invalid - if (varp != &(curbuf->b_p_ft)) { + if (varp != (char_u **)&(curbuf->b_p_ft)) { varp = NULL; } secure = secure_save; } } - if (varp == &(curwin->w_s->b_p_spl)) { + if (varp == (char_u **)&(curwin->w_s->b_p_spl)) { char_u fname[200]; - char_u *q = curwin->w_s->b_p_spl; + char_u *q = (char_u *)curwin->w_s->b_p_spl; // Skip the first name if it is "cjk". if (STRNCMP(q, "cjk,", 4) == 0) { -- cgit From fa1c761d62667c28e4d3a81f379abeddb878f3cd Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Fri, 26 Aug 2022 08:25:36 +0800 Subject: vim-patch:9.0.0036: 'fillchars' cannot have window-local values Problem: 'fillchars' cannot have window-local values. Solution: Make 'fillchars' global-local. (closes vim/vim#5206) https://github.com/vim/vim/commit/96ba25ac01279f73c0ecb5d4aa4ff37aa359e5eb Cherry-pick g:run_nr from patch 8.2.0454. N/A patches for version.c: vim-patch:9.0.0037: build error Problem: Build error. Solution: Add missing change. https://github.com/vim/vim/commit/510f03738dfcadfe2099c5b6a58cb75f64dbaa82 --- src/nvim/optionstr.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/nvim/optionstr.c') diff --git a/src/nvim/optionstr.c b/src/nvim/optionstr.c index e1538e0491..e6847c3ea5 100644 --- a/src/nvim/optionstr.c +++ b/src/nvim/optionstr.c @@ -960,7 +960,9 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er FOR_ALL_TAB_WINDOWS(tp, wp) { // If no error was returned above, we don't expect an error // here, so ignore the return value. - (void)set_chars_option(wp, (char_u **)&wp->w_p_lcs, true); + if (*wp->w_p_lcs == NUL) { + (void)set_chars_option(wp, (char_u **)&wp->w_p_lcs, true); + } } redraw_all_later(UPD_NOT_VALID); } @@ -977,7 +979,9 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er FOR_ALL_TAB_WINDOWS(tp, wp) { // If no error was returned above, we don't expect an error // here, so ignore the return value. - (void)set_chars_option(wp, (char_u **)&wp->w_p_fcs, true); + if (*wp->w_p_fcs == NUL) { + (void)set_chars_option(wp, (char_u **)&wp->w_p_fcs, true); + } } redraw_all_later(UPD_NOT_VALID); } -- cgit From 752d397cae994e496cbfaad386f39d24d7fa8203 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Fri, 26 Aug 2022 09:03:45 +0800 Subject: vim-patch:9.0.0038: 'listchars' test fails Problem: 'listchars' test fails. Solution: Use window-local value after setting the global value https://github.com/vim/vim/commit/5ed26faace574f6b36744f9e17075d7e806aa877 --- src/nvim/optionstr.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'src/nvim/optionstr.c') diff --git a/src/nvim/optionstr.c b/src/nvim/optionstr.c index e6847c3ea5..604fc54f7c 100644 --- a/src/nvim/optionstr.c +++ b/src/nvim/optionstr.c @@ -952,17 +952,17 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er } else if (varp == &p_lcs) { // global 'listchars' errmsg = set_chars_option(curwin, varp, false); if (errmsg == NULL) { - // The current window is set to use the global 'listchars' value. - // So clear the window-local value. + // If the current window is set to use the global 'listchars' + // value, clear the window-local value. if (!(opt_flags & OPT_GLOBAL)) { clear_string_option(&curwin->w_p_lcs); } FOR_ALL_TAB_WINDOWS(tp, wp) { + // If the current window has a local value need to apply it + // again, it was changed when setting the global value. // If no error was returned above, we don't expect an error // here, so ignore the return value. - if (*wp->w_p_lcs == NUL) { - (void)set_chars_option(wp, (char_u **)&wp->w_p_lcs, true); - } + (void)set_chars_option(wp, (char_u **)&wp->w_p_lcs, true); } redraw_all_later(UPD_NOT_VALID); } @@ -971,17 +971,17 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er } else if (varp == &p_fcs) { // global 'fillchars' errmsg = set_chars_option(curwin, varp, false); if (errmsg == NULL) { - // The current window is set to use the global 'fillchars' value. - // So clear the window-local value. + // If the current window is set to use the global 'fillchars' + // value clear the window-local value. if (!(opt_flags & OPT_GLOBAL)) { clear_string_option(&curwin->w_p_fcs); } FOR_ALL_TAB_WINDOWS(tp, wp) { + // If the current window has a local value need to apply it + // again, it was changed when setting the global value. // If no error was returned above, we don't expect an error // here, so ignore the return value. - if (*wp->w_p_fcs == NUL) { - (void)set_chars_option(wp, (char_u **)&wp->w_p_fcs, true); - } + (void)set_chars_option(wp, (char_u **)&wp->w_p_fcs, true); } redraw_all_later(UPD_NOT_VALID); } -- cgit From 36fdad557583216c93cf85d94400eaf6996dced7 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Fri, 26 Aug 2022 09:25:17 +0800 Subject: vim-patch:9.0.0040: use of set_chars_option() is confusing Problem: Use of set_chars_option() is confusing. Solution: Add "apply" argument to store the result or not. Merge similar code. https://github.com/vim/vim/commit/b67f0c8e495cfbfc09d6c7ff670b8162faf07b01 --- src/nvim/optionstr.c | 34 +++++++++++----------------------- 1 file changed, 11 insertions(+), 23 deletions(-) (limited to 'src/nvim/optionstr.c') diff --git a/src/nvim/optionstr.c b/src/nvim/optionstr.c index 604fc54f7c..ec62c4b8ad 100644 --- a/src/nvim/optionstr.c +++ b/src/nvim/optionstr.c @@ -949,42 +949,30 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er } s = (char *)skip_to_option_part((char_u *)s); } - } else if (varp == &p_lcs) { // global 'listchars' - errmsg = set_chars_option(curwin, varp, false); + } else if (varp == &p_lcs || varp == &p_fcs) { // global 'listchars' or 'fillchars' + char **local_ptr = varp == &p_lcs ? &curwin->w_p_lcs : &curwin->w_p_fcs; + // only apply the global value to "curwin" when it does not have a local value + errmsg = set_chars_option(curwin, varp, **local_ptr == NUL || !(opt_flags & OPT_GLOBAL)); if (errmsg == NULL) { - // If the current window is set to use the global 'listchars' - // value, clear the window-local value. + // If the current window is set to use the global + // 'listchars'/'fillchars' value, clear the window-local value. if (!(opt_flags & OPT_GLOBAL)) { - clear_string_option(&curwin->w_p_lcs); + clear_string_option(local_ptr); } FOR_ALL_TAB_WINDOWS(tp, wp) { // If the current window has a local value need to apply it // again, it was changed when setting the global value. // If no error was returned above, we don't expect an error // here, so ignore the return value. - (void)set_chars_option(wp, (char_u **)&wp->w_p_lcs, true); + local_ptr = varp == &p_lcs ? &wp->w_p_lcs : &wp->w_p_fcs; + if (**local_ptr == NUL) { + (void)set_chars_option(wp, (char_u **)local_ptr, true); + } } redraw_all_later(UPD_NOT_VALID); } } else if (varp == (char_u **)&curwin->w_p_lcs) { // local 'listchars' errmsg = set_chars_option(curwin, varp, true); - } else if (varp == &p_fcs) { // global 'fillchars' - errmsg = set_chars_option(curwin, varp, false); - if (errmsg == NULL) { - // If the current window is set to use the global 'fillchars' - // value clear the window-local value. - if (!(opt_flags & OPT_GLOBAL)) { - clear_string_option(&curwin->w_p_fcs); - } - FOR_ALL_TAB_WINDOWS(tp, wp) { - // If the current window has a local value need to apply it - // again, it was changed when setting the global value. - // If no error was returned above, we don't expect an error - // here, so ignore the return value. - (void)set_chars_option(wp, (char_u **)&wp->w_p_fcs, true); - } - redraw_all_later(UPD_NOT_VALID); - } } else if (varp == (char_u **)&curwin->w_p_fcs) { // local 'fillchars' errmsg = set_chars_option(curwin, varp, true); } else if (varp == &p_cedit) { // 'cedit' -- cgit From 6547f4397fe643f194763306f8fcdfc6f6ce4b24 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Fri, 26 Aug 2022 18:49:29 +0800 Subject: vim-patch:8.1.2331: the option.c file is still very big (#19954) Problem: The option.c file is still very big. Solution: Move a few functions to where they fit better. (Yegappan Lakshmanan, closes vim/vim#4895) https://github.com/vim/vim/commit/7bae0b1bc84a95d565ffab38cf7f82ad21c656b6 vim-patch:9.0.0271: using INIT() in non-header files Problem: Using INIT() in non-header files. Solution: Remove INIT(). (closes vim/vim#10981) https://github.com/vim/vim/commit/9b7d2a959646560f5770329f4428c4739eed4656 --- src/nvim/optionstr.c | 1 + 1 file changed, 1 insertion(+) (limited to 'src/nvim/optionstr.c') diff --git a/src/nvim/optionstr.c b/src/nvim/optionstr.c index ec62c4b8ad..e4cdf883fe 100644 --- a/src/nvim/optionstr.c +++ b/src/nvim/optionstr.c @@ -18,6 +18,7 @@ #include "nvim/drawscreen.h" #include "nvim/eval.h" #include "nvim/eval/vars.h" +#include "nvim/ex_getln.h" #include "nvim/hardcopy.h" #include "nvim/highlight_group.h" #include "nvim/indent.h" -- cgit From 395277036014189c03b8969fc0a5cd2bdc5c8631 Mon Sep 17 00:00:00 2001 From: Dundar Göc Date: Fri, 26 Aug 2022 10:36:35 +0200 Subject: refactor: replace char_u with char Work on https://github.com/neovim/neovim/issues/459 --- src/nvim/optionstr.c | 295 ++++++++++++++++++++++++++------------------------- 1 file changed, 148 insertions(+), 147 deletions(-) (limited to 'src/nvim/optionstr.c') diff --git a/src/nvim/optionstr.c b/src/nvim/optionstr.c index e4cdf883fe..808a70c8cb 100644 --- a/src/nvim/optionstr.c +++ b/src/nvim/optionstr.c @@ -122,21 +122,21 @@ static char_u SHM_ALL[] = { SHM_RO, SHM_MOD, SHM_FILE, SHM_LAST, SHM_TEXT, SHM_L /// option values. void didset_string_options(void) { - (void)opt_strings_flags(p_cmp, p_cmp_values, &cmp_flags, true); - (void)opt_strings_flags(p_bkc, p_bkc_values, &bkc_flags, true); - (void)opt_strings_flags(p_bo, p_bo_values, &bo_flags, true); - (void)opt_strings_flags(p_ssop, p_ssop_values, &ssop_flags, true); - (void)opt_strings_flags(p_vop, p_ssop_values, &vop_flags, true); - (void)opt_strings_flags(p_fdo, p_fdo_values, &fdo_flags, true); - (void)opt_strings_flags(p_dy, p_dy_values, &dy_flags, true); - (void)opt_strings_flags(p_rdb, p_rdb_values, &rdb_flags, true); - (void)opt_strings_flags(p_tc, p_tc_values, &tc_flags, false); - (void)opt_strings_flags(p_tpf, p_tpf_values, &tpf_flags, true); + (void)opt_strings_flags((char_u *)p_cmp, p_cmp_values, &cmp_flags, true); + (void)opt_strings_flags((char_u *)p_bkc, p_bkc_values, &bkc_flags, true); + (void)opt_strings_flags((char_u *)p_bo, p_bo_values, &bo_flags, true); + (void)opt_strings_flags((char_u *)p_ssop, p_ssop_values, &ssop_flags, true); + (void)opt_strings_flags((char_u *)p_vop, p_ssop_values, &vop_flags, true); + (void)opt_strings_flags((char_u *)p_fdo, p_fdo_values, &fdo_flags, true); + (void)opt_strings_flags((char_u *)p_dy, p_dy_values, &dy_flags, true); + (void)opt_strings_flags((char_u *)p_rdb, p_rdb_values, &rdb_flags, true); + (void)opt_strings_flags((char_u *)p_tc, p_tc_values, &tc_flags, false); + (void)opt_strings_flags((char_u *)p_tpf, p_tpf_values, &tpf_flags, true); (void)opt_strings_flags(p_ve, p_ve_values, &ve_flags, true); - (void)opt_strings_flags(p_swb, p_swb_values, &swb_flags, true); - (void)opt_strings_flags(p_wop, p_wop_values, &wop_flags, true); - (void)opt_strings_flags(p_jop, p_jop_values, &jop_flags, true); - (void)opt_strings_flags(p_cb, p_cb_values, &cb_flags, true); + (void)opt_strings_flags((char_u *)p_swb, p_swb_values, &swb_flags, true); + (void)opt_strings_flags((char_u *)p_wop, p_wop_values, &wop_flags, true); + (void)opt_strings_flags((char_u *)p_jop, p_jop_values, &jop_flags, true); + (void)opt_strings_flags((char_u *)p_cb, p_cb_values, &cb_flags, true); } /// Trigger the OptionSet autocommand. @@ -281,19 +281,19 @@ void check_string_option(char **pp) /// /// @param opt_idx option index /// @param varp pointer to option variable -static void set_string_option_global(int opt_idx, char_u **varp) +static void set_string_option_global(int opt_idx, char **varp) { - char_u **p, *s; + char **p; // the global value is always allocated if (is_window_local_option(opt_idx)) { - p = (char_u **)GLOBAL_WO(varp); + p = (char **)GLOBAL_WO(varp); } else { - p = (char_u **)get_option_var(opt_idx); + p = (char **)get_option_var(opt_idx); } if (!is_global_option(opt_idx) && p != varp) { - s = vim_strsave(*varp); - free_string_option((char *)(*p)); + char *s = xstrdup(*varp); + free_string_option(*p); *p = s; } } @@ -339,7 +339,7 @@ void set_string_option_direct(const char *name, int opt_idx, const char *val, in // For buffer/window local option may also set the global value. if (both) { - set_string_option_global(idx, (char_u **)varp); + set_string_option_global(idx, varp); } set_option_flag(idx, P_ALLOCED); @@ -420,7 +420,7 @@ char *set_string_option(const int opt_idx, const char *const value, const int op char *const saved_newval = xstrdup(s); int value_checked = false; - char *const errmsg = did_set_string_option(opt_idx, (char_u **)varp, (char_u *)oldval, + char *const errmsg = did_set_string_option(opt_idx, varp, oldval, NULL, 0, opt_flags, &value_checked); if (errmsg == NULL) { @@ -631,8 +631,8 @@ static int shada_idx = -1; /// @param value_checked value was checked to be safe, no need to set P_INSECURE /// /// @return NULL for success, or an untranslated error message for an error -char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *errbuf, - size_t errbuflen, int opt_flags, int *value_checked) +char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf, size_t errbuflen, + int opt_flags, int *value_checked) { char *errmsg = NULL; char *s, *p; @@ -650,20 +650,19 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er && (get_option_flags(opt_idx) & P_SECURE)) { errmsg = e_secure; } else if (((get_option_flags(opt_idx) & P_NFNAME) - && strpbrk((char *)(*varp), - (secure ? "/\\*?[|;&<>\r\n" : "/\\*?[<>\r\n")) != NULL) + && strpbrk(*varp, (secure ? "/\\*?[|;&<>\r\n" : "/\\*?[<>\r\n")) != NULL) || ((get_option_flags(opt_idx) & P_NDNAME) - && strpbrk((char *)(*varp), "*?[|;&<>\r\n") != NULL)) { + && strpbrk(*varp, "*?[|;&<>\r\n") != NULL)) { // Check for a "normal" directory or file name in some options. Disallow a // path separator (slash and/or backslash), wildcards and characters that // are often illegal in a file name. Be more permissive if "secure" is off. errmsg = e_invarg; - } else if (gvarp == &p_bkc) { // 'backupcopy' - char_u *bkc = p_bkc; + } else if (gvarp == (char_u **)&p_bkc) { // 'backupcopy' + char *bkc = p_bkc; unsigned int *flags = &bkc_flags; if (opt_flags & OPT_LOCAL) { - bkc = (char_u *)curbuf->b_p_bkc; + bkc = curbuf->b_p_bkc; flags = &curbuf->b_bkc_flags; } @@ -671,7 +670,7 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er // make the local value empty: use the global value *flags = 0; } else { - if (opt_strings_flags(bkc, p_bkc_values, flags, true) != OK) { + if (opt_strings_flags((char_u *)bkc, p_bkc_values, flags, true) != OK) { errmsg = e_invarg; } @@ -679,7 +678,7 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er + ((*flags & BKC_YES) != 0) + ((*flags & BKC_NO) != 0) != 1) { // Must have exactly one of "auto", "yes" and "no". - (void)opt_strings_flags(oldval, p_bkc_values, flags, true); + (void)opt_strings_flags((char_u *)oldval, p_bkc_values, flags, true); errmsg = e_invarg; } } @@ -688,12 +687,12 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er *p_pm == '.' ? p_pm + 1 : p_pm) == 0) { errmsg = e_backupext_and_patchmode_are_equal; } - } else if (varp == (char_u **)&curwin->w_p_briopt) { // 'breakindentopt' + } else if (varp == &curwin->w_p_briopt) { // 'breakindentopt' if (briopt_check(curwin) == FAIL) { errmsg = e_invarg; } } else if (varp == &p_isi - || varp == (char_u **)&(curbuf->b_p_isk) + || varp == &(curbuf->b_p_isk) || varp == &p_isp || varp == &p_isf) { // 'isident', 'iskeyword', 'isprint or 'isfname' option: refill g_chartab[] @@ -713,14 +712,14 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er } } else if (varp == &p_rtp || varp == &p_pp) { // 'runtimepath' 'packpath' runtime_search_path_invalidate(); - } else if (varp == (char_u **)&curwin->w_p_culopt + } else if (varp == &curwin->w_p_culopt || gvarp == (char_u **)&curwin->w_allbuf_opt.wo_culopt) { // 'cursorlineopt' - if (**varp == NUL || fill_culopt_flags(*varp, curwin) != OK) { + if (**varp == NUL || fill_culopt_flags((char_u *)(*varp), curwin) != OK) { errmsg = e_invarg; } - } else if (varp == (char_u **)&curwin->w_p_cc) { // 'colorcolumn' + } else if (varp == &curwin->w_p_cc) { // 'colorcolumn' errmsg = check_colorcolumn(curwin); - } else if (varp == &p_hlg) { // 'helplang' + } else if (varp == (char **)&p_hlg) { // 'helplang' // Check for "", "ab", "ab,cd", etc. for (s = (char *)p_hlg; *s != NUL; s += 3) { if (s[1] == NUL || ((s[2] != ',' || s[3] == NUL) && s[2] != NUL)) { @@ -736,42 +735,42 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er errmsg = e_unsupportedoption; } } else if (varp == &p_jop) { // 'jumpoptions' - if (opt_strings_flags(p_jop, p_jop_values, &jop_flags, true) != OK) { + if (opt_strings_flags((char_u *)p_jop, p_jop_values, &jop_flags, true) != OK) { errmsg = e_invarg; } } else if (gvarp == &p_nf) { // 'nrformats' - if (check_opt_strings(*varp, p_nf_values, true) != OK) { + if (check_opt_strings((char_u *)(*varp), p_nf_values, true) != OK) { errmsg = e_invarg; } } else if (varp == &p_ssop) { // 'sessionoptions' - if (opt_strings_flags(p_ssop, p_ssop_values, &ssop_flags, true) != OK) { + if (opt_strings_flags((char_u *)p_ssop, p_ssop_values, &ssop_flags, true) != OK) { errmsg = e_invarg; } if ((ssop_flags & SSOP_CURDIR) && (ssop_flags & SSOP_SESDIR)) { // Don't allow both "sesdir" and "curdir". - (void)opt_strings_flags(oldval, p_ssop_values, &ssop_flags, true); + (void)opt_strings_flags((char_u *)oldval, p_ssop_values, &ssop_flags, true); errmsg = e_invarg; } } else if (varp == &p_vop) { // 'viewoptions' - if (opt_strings_flags(p_vop, p_ssop_values, &vop_flags, true) != OK) { + if (opt_strings_flags((char_u *)p_vop, p_ssop_values, &vop_flags, true) != OK) { errmsg = e_invarg; } } else if (varp == &p_rdb) { // 'redrawdebug' - if (opt_strings_flags(p_rdb, p_rdb_values, &rdb_flags, true) != OK) { + if (opt_strings_flags((char_u *)p_rdb, p_rdb_values, &rdb_flags, true) != OK) { errmsg = e_invarg; } - } else if (varp == (char_u **)&p_sbo) { // 'scrollopt' + } else if (varp == &p_sbo) { // 'scrollopt' if (check_opt_strings((char_u *)p_sbo, p_scbopt_values, true) != OK) { errmsg = e_invarg; } } else if (varp == &p_ambw || (int *)varp == &p_emoji) { // 'ambiwidth' - if (check_opt_strings(p_ambw, p_ambw_values, false) != OK) { + if (check_opt_strings((char_u *)p_ambw, p_ambw_values, false) != OK) { errmsg = e_invarg; } else { errmsg = check_chars_options(); } } else if (varp == &p_bg) { // 'background' - if (check_opt_strings(p_bg, p_bg_values, false) == OK) { + if (check_opt_strings((char_u *)p_bg, p_bg_values, false) == OK) { int dark = (*p_bg == 'd'); init_highlight(false, false); @@ -781,9 +780,9 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er // value, that's not what we want here. Disable the color // scheme and set the colors again. do_unlet(S_LEN("g:colors_name"), true); - free_string_option((char *)p_bg); - p_bg = vim_strsave((char_u *)(dark ? "dark" : "light")); - check_string_option((char **)&p_bg); + free_string_option(p_bg); + p_bg = xstrdup((dark ? "dark" : "light")); + check_string_option(&p_bg); init_highlight(false, false); } } else { @@ -794,24 +793,24 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er errmsg = e_invarg; } } else if (varp == &p_wop) { // 'wildoptions' - if (opt_strings_flags(p_wop, p_wop_values, &wop_flags, true) != OK) { + if (opt_strings_flags((char_u *)p_wop, p_wop_values, &wop_flags, true) != OK) { errmsg = e_invarg; } } else if (varp == &p_wak) { // 'winaltkeys' if (*p_wak == NUL - || check_opt_strings(p_wak, p_wak_values, false) != OK) { + || check_opt_strings((char_u *)p_wak, p_wak_values, false) != OK) { errmsg = e_invarg; } } else if (varp == &p_ei) { // 'eventignore' if (check_ei() == FAIL) { errmsg = e_invarg; } - } else if (varp == &p_enc || gvarp == &p_fenc || gvarp == &p_menc) { + } else if (varp == &p_enc || gvarp == (char_u **)&p_fenc || gvarp == &p_menc) { // 'encoding', 'fileencoding' and 'makeencoding' - if (gvarp == &p_fenc) { + if (gvarp == (char_u **)&p_fenc) { if (!MODIFIABLE(curbuf) && opt_flags != OPT_GLOBAL) { errmsg = e_modifiable; - } else if (vim_strchr((char *)(*varp), ',') != NULL) { + } else if (vim_strchr(*varp, ',') != NULL) { // No comma allowed in 'fileencoding'; catches confusing it // with 'fileencodings'. errmsg = e_invarg; @@ -825,9 +824,9 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er if (errmsg == NULL) { // canonize the value, so that STRCMP() can be used on it - p = (char *)enc_canonize(*varp); + p = (char *)enc_canonize((char_u *)(*varp)); xfree(*varp); - *varp = (char_u *)p; + *varp = p; if (varp == &p_enc) { // only encoding=utf-8 allowed if (STRCMP(p_enc, "utf-8") != 0) { @@ -839,11 +838,11 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er } } else if (varp == &p_penc) { // Canonize printencoding if VIM standard one - p = (char *)enc_canonize(p_penc); + p = (char *)enc_canonize((char_u *)p_penc); xfree(p_penc); - p_penc = (char_u *)p; - } else if (varp == (char_u **)&curbuf->b_p_keymap) { - if (!valid_filetype(*varp)) { + p_penc = p; + } else if (varp == &curbuf->b_p_keymap) { + if (!valid_filetype((char_u *)(*varp))) { errmsg = e_invarg; } else { int secure_save = secure; @@ -884,10 +883,10 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er } status_redraw_curbuf(); } - } else if (gvarp == &p_ff) { // 'fileformat' + } else if (gvarp == (char_u **)&p_ff) { // 'fileformat' if (!MODIFIABLE(curbuf) && !(opt_flags & OPT_GLOBAL)) { errmsg = e_modifiable; - } else if (check_opt_strings(*varp, p_ff_values, false) != OK) { + } else if (check_opt_strings((char_u *)(*varp), p_ff_values, false) != OK) { errmsg = e_invarg; } else { redraw_titles(); @@ -899,12 +898,12 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er redraw_curbuf_later(UPD_NOT_VALID); } } - } else if (varp == (char_u **)&p_ffs) { // 'fileformats' + } else if (varp == &p_ffs) { // 'fileformats' if (check_opt_strings((char_u *)p_ffs, p_ff_values, true) != OK) { errmsg = e_invarg; } } else if (gvarp == &p_mps) { // 'matchpairs' - for (p = (char *)(*varp); *p != NUL; p++) { + for (p = *varp; *p != NUL; p++) { int x2 = -1; int x3 = -1; @@ -924,8 +923,8 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er break; } } - } else if (gvarp == &p_com) { // 'comments' - for (s = (char *)(*varp); *s;) { + } else if (gvarp == (char_u **)&p_com) { // 'comments' + for (s = *varp; *s;) { while (*s && *s != ':') { if (vim_strchr(COM_ALL, *s) == NULL && !ascii_isdigit(*s) && *s != '-') { @@ -953,7 +952,8 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er } else if (varp == &p_lcs || varp == &p_fcs) { // global 'listchars' or 'fillchars' char **local_ptr = varp == &p_lcs ? &curwin->w_p_lcs : &curwin->w_p_fcs; // only apply the global value to "curwin" when it does not have a local value - errmsg = set_chars_option(curwin, varp, **local_ptr == NUL || !(opt_flags & OPT_GLOBAL)); + errmsg = + set_chars_option(curwin, (char_u **)varp, **local_ptr == NUL || !(opt_flags & OPT_GLOBAL)); if (errmsg == NULL) { // If the current window is set to use the global // 'listchars'/'fillchars' value, clear the window-local value. @@ -972,13 +972,13 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er } redraw_all_later(UPD_NOT_VALID); } - } else if (varp == (char_u **)&curwin->w_p_lcs) { // local 'listchars' - errmsg = set_chars_option(curwin, varp, true); - } else if (varp == (char_u **)&curwin->w_p_fcs) { // local 'fillchars' - errmsg = set_chars_option(curwin, varp, true); + } else if (varp == &curwin->w_p_lcs) { // local 'listchars' + errmsg = set_chars_option(curwin, (char_u **)varp, true); + } else if (varp == &curwin->w_p_fcs) { // local 'fillchars' + errmsg = set_chars_option(curwin, (char_u **)varp, true); } else if (varp == &p_cedit) { // 'cedit' errmsg = check_cedit(); - } else if (varp == &p_vfile) { // 'verbosefile' + } else if (varp == (char **)&p_vfile) { // 'verbosefile' verbose_stop(); if (*p_vfile != NUL && verbose_open() == FAIL) { errmsg = e_invarg; @@ -993,7 +993,7 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er // there would be a disconnect between the check for P_ALLOCED at the start // of the function and the set of P_ALLOCED at the end of the function. free_oldval = (get_option_flags(opt_idx) & P_ALLOCED); - for (s = (char *)p_shada; *s;) { + for (s = p_shada; *s;) { // Check it's a valid character if (vim_strchr("!\"%'/:<@cfhnrs", *s) == NULL) { errmsg = illegal_char(errbuf, errbuflen, *s); @@ -1037,8 +1037,8 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er if (*p_shada && errmsg == NULL && get_shada_parameter('\'') < 0) { errmsg = N_("E528: Must specify a ' value"); } - } else if (gvarp == &p_sbr) { // 'showbreak' - for (s = (char *)(*varp); *s;) { + } else if (gvarp == (char_u **)&p_sbr) { // 'showbreak' + for (s = *varp; *s;) { if (ptr2cells(s) != 1) { errmsg = e_showbreak_contains_unprintable_or_wide_character; } @@ -1052,14 +1052,14 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er errmsg = parse_printmbfont(); } else if (varp == &p_langmap) { // 'langmap' langmap_set(); - } else if (varp == &p_breakat) { // 'breakat' + } else if (varp == (char **)&p_breakat) { // 'breakat' fill_breakat_flags(); } else if (varp == &p_titlestring || varp == &p_iconstring) { // 'titlestring' and 'iconstring' int flagval = (varp == &p_titlestring) ? STL_IN_TITLE : STL_IN_ICON; // NULL => statusline syntax - if (vim_strchr((char *)(*varp), '%') && check_stl_option((char *)(*varp)) == NULL) { + if (vim_strchr(*varp, '%') && check_stl_option(*varp) == NULL) { stl_syntax |= flagval; } else { stl_syntax &= ~flagval; @@ -1067,65 +1067,65 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er did_set_title(); } else if (varp == &p_sel) { // 'selection' if (*p_sel == NUL - || check_opt_strings(p_sel, p_sel_values, false) != OK) { + || check_opt_strings((char_u *)p_sel, p_sel_values, false) != OK) { errmsg = e_invarg; } } else if (varp == &p_slm) { // 'selectmode' - if (check_opt_strings(p_slm, p_slm_values, true) != OK) { + if (check_opt_strings((char_u *)p_slm, p_slm_values, true) != OK) { errmsg = e_invarg; } } else if (varp == &p_km) { // 'keymodel' - if (check_opt_strings(p_km, p_km_values, true) != OK) { + if (check_opt_strings((char_u *)p_km, p_km_values, true) != OK) { errmsg = e_invarg; } else { - km_stopsel = (vim_strchr((char *)p_km, 'o') != NULL); - km_startsel = (vim_strchr((char *)p_km, 'a') != NULL); + km_stopsel = (vim_strchr(p_km, 'o') != NULL); + km_startsel = (vim_strchr(p_km, 'a') != NULL); } } else if (varp == &p_mousem) { // 'mousemodel' - if (check_opt_strings(p_mousem, p_mousem_values, false) != OK) { + if (check_opt_strings((char_u *)p_mousem, p_mousem_values, false) != OK) { errmsg = e_invarg; } } else if (varp == &p_mousescroll) { // 'mousescroll' - errmsg = check_mousescroll((char *)p_mousescroll); + errmsg = check_mousescroll(p_mousescroll); } else if (varp == &p_swb) { // 'switchbuf' - if (opt_strings_flags(p_swb, p_swb_values, &swb_flags, true) != OK) { + if (opt_strings_flags((char_u *)p_swb, p_swb_values, &swb_flags, true) != OK) { errmsg = e_invarg; } } else if (varp == &p_debug) { // 'debug' - if (check_opt_strings(p_debug, p_debug_values, true) != OK) { + if (check_opt_strings((char_u *)p_debug, p_debug_values, true) != OK) { errmsg = e_invarg; } } else if (varp == &p_dy) { // 'display' - if (opt_strings_flags(p_dy, p_dy_values, &dy_flags, true) != OK) { + if (opt_strings_flags((char_u *)p_dy, p_dy_values, &dy_flags, true) != OK) { errmsg = e_invarg; } else { (void)init_chartab(); msg_grid_validate(); } } else if (varp == &p_ead) { // 'eadirection' - if (check_opt_strings(p_ead, p_ead_values, false) != OK) { + if (check_opt_strings((char_u *)p_ead, p_ead_values, false) != OK) { errmsg = e_invarg; } } else if (varp == &p_cb) { // 'clipboard' - if (opt_strings_flags(p_cb, p_cb_values, &cb_flags, true) != OK) { + if (opt_strings_flags((char_u *)p_cb, p_cb_values, &cb_flags, true) != OK) { errmsg = e_invarg; } - } else if (varp == (char_u **)&(curwin->w_s->b_p_spl) // 'spell' - || varp == (char_u **)&(curwin->w_s->b_p_spf)) { + } else if (varp == &(curwin->w_s->b_p_spl) // 'spell' + || varp == &(curwin->w_s->b_p_spf)) { // When 'spelllang' or 'spellfile' is set and there is a window for this // buffer in which 'spell' is set load the wordlists. - const bool is_spellfile = varp == (char_u **)&(curwin->w_s->b_p_spf); + const bool is_spellfile = varp == &(curwin->w_s->b_p_spf); - if ((is_spellfile && !valid_spellfile(*varp)) - || (!is_spellfile && !valid_spelllang(*varp))) { + if ((is_spellfile && !valid_spellfile((char_u *)(*varp))) + || (!is_spellfile && !valid_spelllang((char_u *)(*varp)))) { errmsg = e_invarg; } else { errmsg = did_set_spell_option(is_spellfile); } - } else if (varp == (char_u **)&(curwin->w_s->b_p_spc)) { + } else if (varp == &(curwin->w_s->b_p_spc)) { // When 'spellcapcheck' is set compile the regexp program. errmsg = compile_cap_prog(curwin->w_s); - } else if (varp == (char_u **)&(curwin->w_s->b_p_spo)) { // 'spelloptions' + } else if (varp == &(curwin->w_s->b_p_spo)) { // 'spelloptions' if (**varp != NUL && STRCMP("camel", *varp) != 0) { errmsg = e_invarg; } @@ -1156,24 +1156,25 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er curbuf->b_help = (curbuf->b_p_bt[0] == 'h'); redraw_titles(); } - } else if (gvarp == &p_stl || gvarp == (char_u **)&p_wbr || varp == &p_tal || varp == &p_ruf) { + } else if (gvarp == (char_u **)&p_stl || gvarp == (char_u **)&p_wbr || varp == &p_tal + || varp == &p_ruf) { // 'statusline', 'winbar', 'tabline' or 'rulerformat' int wid; if (varp == &p_ruf) { // reset ru_wid first ru_wid = 0; } - s = (char *)(*varp); + s = *varp; if (varp == &p_ruf && *s == '%') { // set ru_wid if 'ruf' starts with "%99(" if (*++s == '-') { // ignore a '-' s++; } wid = getdigits_int(&s, true, 0); - if (wid && *s == '(' && (errmsg = check_stl_option((char *)p_ruf)) == NULL) { + if (wid && *s == '(' && (errmsg = check_stl_option(p_ruf)) == NULL) { ru_wid = wid; } else { - errmsg = check_stl_option((char *)p_ruf); + errmsg = check_stl_option(p_ruf); } } else if (varp == &p_ruf || s[0] != '%' || s[1] != '!') { // check 'statusline', 'winbar' or 'tabline' only if it doesn't start with "%!" @@ -1188,7 +1189,7 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er } } else if (gvarp == &p_cpt) { // check if it is a valid value for 'complete' -- Acevedo - for (s = (char *)(*varp); *s;) { + for (s = *varp; *s;) { while (*s == ',' || *s == ' ') { s++; } @@ -1222,7 +1223,7 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er } } } else if (varp == &p_cot) { // 'completeopt' - if (check_opt_strings(p_cot, p_cot_values, true) != OK) { + if (check_opt_strings((char_u *)p_cot, p_cot_values, true) != OK) { errmsg = e_invarg; } else { completeopt_was_set(); @@ -1234,8 +1235,8 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er errmsg = e_invarg; } #endif - } else if (varp == (char_u **)&curwin->w_p_scl) { // 'signcolumn' - if (check_signcolumn(*varp) != OK) { + } else if (varp == &curwin->w_p_scl) { // 'signcolumn' + if (check_signcolumn((char_u *)(*varp)) != OK) { errmsg = e_invarg; } // When changing the 'signcolumn' to or from 'number', recompute the @@ -1245,13 +1246,13 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er && (curwin->w_p_nu || curwin->w_p_rnu)) { curwin->w_nrwidth_line_count = 0; } - } else if (varp == (char_u **)&curwin->w_p_fdc - || varp == (char_u **)&curwin->w_allbuf_opt.wo_fdc) { + } else if (varp == &curwin->w_p_fdc + || varp == &curwin->w_allbuf_opt.wo_fdc) { // 'foldcolumn' - if (**varp == NUL || check_opt_strings(*varp, p_fdc_values, false) != OK) { + if (**varp == NUL || check_opt_strings((char_u *)(*varp), p_fdc_values, false) != OK) { errmsg = e_invarg; } - } else if (varp == &p_pt) { + } else if (varp == (char **)&p_pt) { // 'pastetoggle': translate key codes like in a mapping if (*p_pt) { p = NULL; @@ -1269,21 +1270,21 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er if (*p_bs > '3' || p_bs[1] != NUL) { errmsg = e_invarg; } - } else if (check_opt_strings(p_bs, p_bs_values, true) != OK) { + } else if (check_opt_strings((char_u *)p_bs, p_bs_values, true) != OK) { errmsg = e_invarg; } } else if (varp == &p_bo) { - if (opt_strings_flags(p_bo, p_bo_values, &bo_flags, true) != OK) { + if (opt_strings_flags((char_u *)p_bo, p_bo_values, &bo_flags, true) != OK) { errmsg = e_invarg; } - } else if (gvarp == &p_tc) { // 'tagcase' + } else if (gvarp == (char_u **)&p_tc) { // 'tagcase' unsigned int *flags; if (opt_flags & OPT_LOCAL) { p = curbuf->b_p_tc; flags = &curbuf->b_tc_flags; } else { - p = (char *)p_tc; + p = p_tc; flags = &tc_flags; } @@ -1295,7 +1296,7 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er errmsg = e_invarg; } } else if (varp == &p_cmp) { // 'casemap' - if (opt_strings_flags(p_cmp, p_cmp_values, &cmp_flags, true) != OK) { + if (opt_strings_flags((char_u *)p_cmp, p_cmp_values, &cmp_flags, true) != OK) { errmsg = e_invarg; } } else if (varp == &p_dip) { // 'diffopt' @@ -1303,7 +1304,7 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er errmsg = e_invarg; } } else if (gvarp == (char_u **)&curwin->w_allbuf_opt.wo_fdm) { // 'foldmethod' - if (check_opt_strings(*varp, p_fdm_values, false) != OK + if (check_opt_strings((char_u *)(*varp), p_fdm_values, false) != OK || *curwin->w_p_fdm == NUL) { errmsg = e_invarg; } else { @@ -1312,29 +1313,29 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er newFoldLevel(); } } - } else if (varp == (char_u **)&curwin->w_p_fde) { // 'foldexpr' + } else if (varp == &curwin->w_p_fde) { // 'foldexpr' if (foldmethodIsExpr(curwin)) { foldUpdateAll(curwin); } } else if (gvarp == (char_u **)&curwin->w_allbuf_opt.wo_fmr) { // 'foldmarker' - p = vim_strchr((char *)(*varp), ','); + p = vim_strchr(*varp, ','); if (p == NULL) { errmsg = N_("E536: comma required"); - } else if ((char_u *)p == *varp || p[1] == NUL) { + } else if (p == *varp || p[1] == NUL) { errmsg = e_invarg; } else if (foldmethodIsMarker(curwin)) { foldUpdateAll(curwin); } } else if (gvarp == &p_cms) { // 'commentstring' - if (**varp != NUL && strstr((char *)(*varp), "%s") == NULL) { + if (**varp != NUL && strstr(*varp, "%s") == NULL) { errmsg = N_("E537: 'commentstring' must be empty or contain %s"); } } else if (varp == &p_fdo) { // 'foldopen' - if (opt_strings_flags(p_fdo, p_fdo_values, &fdo_flags, true) != OK) { + if (opt_strings_flags((char_u *)p_fdo, p_fdo_values, &fdo_flags, true) != OK) { errmsg = e_invarg; } } else if (varp == &p_fcl) { // 'foldclose' - if (check_opt_strings(p_fcl, p_fcl_values, true) != OK) { + if (check_opt_strings((char_u *)p_fcl, p_fcl_values, true) != OK) { errmsg = e_invarg; } } else if (gvarp == (char_u **)&curwin->w_allbuf_opt.wo_fdi) { // 'foldignore' @@ -1365,7 +1366,7 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er } } else if (varp == &p_csqf) { if (p_csqf != NULL) { - p = (char *)p_csqf; + p = p_csqf; while (*p != NUL) { if (vim_strchr(CSQF_CMDS, *p) == NULL || p[1] == NUL @@ -1380,15 +1381,15 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er } } } - } else if (gvarp == &p_cino) { // 'cinoptions' + } else if (gvarp == (char_u **)&p_cino) { // 'cinoptions' // TODO(vim): recognize errors parse_cino(curbuf); } else if (varp == &p_icm) { // 'inccommand' - if (check_opt_strings(p_icm, p_icm_values, false) != OK) { + if (check_opt_strings((char_u *)p_icm, p_icm_values, false) != OK) { errmsg = e_invarg; } - } else if (gvarp == &p_ft) { - if (!valid_filetype(*varp)) { + } else if (gvarp == (char_u **)&p_ft) { + if (!valid_filetype((char_u *)(*varp))) { errmsg = e_invarg; } else { value_changed = STRCMP(oldval, *varp) != 0; @@ -1398,7 +1399,7 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er *value_checked = true; } } else if (gvarp == &p_syn) { - if (!valid_filetype(*varp)) { + if (!valid_filetype((char_u *)(*varp))) { errmsg = e_invarg; } else { value_changed = STRCMP(oldval, *varp) != 0; @@ -1407,25 +1408,25 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er // even when the value comes from a modeline. *value_checked = true; } - } else if (varp == (char_u **)&curwin->w_p_winhl) { + } else if (varp == &curwin->w_p_winhl) { if (!parse_winhl_opt(curwin)) { errmsg = e_invarg; } } else if (varp == &p_tpf) { - if (opt_strings_flags(p_tpf, p_tpf_values, &tpf_flags, true) != OK) { + if (opt_strings_flags((char_u *)p_tpf, p_tpf_values, &tpf_flags, true) != OK) { errmsg = e_invarg; } - } else if (varp == (char_u **)&(curbuf->b_p_vsts)) { // 'varsofttabstop' + } else if (varp == &(curbuf->b_p_vsts)) { // 'varsofttabstop' char_u *cp; if (!(*varp)[0] || ((*varp)[0] == '0' && !(*varp)[1])) { XFREE_CLEAR(curbuf->b_p_vsts_array); } else { - for (cp = *varp; *cp; cp++) { + for (cp = (char_u *)(*varp); *cp; cp++) { if (ascii_isdigit(*cp)) { continue; } - if (*cp == ',' && cp > *varp && *(cp - 1) != ',') { + if (*cp == ',' && cp > (char_u *)(*varp) && *(cp - 1) != ',') { continue; } errmsg = e_invarg; @@ -1433,24 +1434,24 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er } if (errmsg == NULL) { long *oldarray = curbuf->b_p_vsts_array; - if (tabstop_set(*varp, &(curbuf->b_p_vsts_array))) { + if (tabstop_set((char_u *)(*varp), &(curbuf->b_p_vsts_array))) { xfree(oldarray); } else { errmsg = e_invarg; } } } - } else if (varp == (char_u **)&(curbuf->b_p_vts)) { // 'vartabstop' + } else if (varp == &(curbuf->b_p_vts)) { // 'vartabstop' char_u *cp; if (!(*varp)[0] || ((*varp)[0] == '0' && !(*varp)[1])) { XFREE_CLEAR(curbuf->b_p_vts_array); } else { - for (cp = *varp; *cp; cp++) { + for (cp = (char_u *)(*varp); *cp; cp++) { if (ascii_isdigit(*cp)) { continue; } - if (*cp == ',' && cp > *varp && *(cp - 1) != ',') { + if (*cp == ',' && cp > (char_u *)(*varp) && *(cp - 1) != ',') { continue; } errmsg = e_invarg; @@ -1458,7 +1459,7 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er } if (errmsg == NULL) { long *oldarray = curbuf->b_p_vts_array; - if (tabstop_set(*varp, &(curbuf->b_p_vts_array))) { + if (tabstop_set((char_u *)(*varp), &(curbuf->b_p_vts_array))) { xfree(oldarray); if (foldmethodIsIndent(curwin)) { foldUpdateAll(curwin); @@ -1484,17 +1485,17 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er } if (varp == &p_shm) { // 'shortmess' p = (char *)SHM_ALL; - } else if (varp == (char_u **)&(p_cpo)) { // 'cpoptions' + } else if (varp == &(p_cpo)) { // 'cpoptions' p = CPO_VI; - } else if (varp == (char_u **)&(curbuf->b_p_fo)) { // 'formatoptions' + } else if (varp == &(curbuf->b_p_fo)) { // 'formatoptions' p = FO_ALL; - } else if (varp == (char_u **)&curwin->w_p_cocu) { // 'concealcursor' + } else if (varp == &curwin->w_p_cocu) { // 'concealcursor' p = COCU_ALL; } else if (varp == &p_mouse) { // 'mouse' p = MOUSE_ALL; } if (p != NULL) { - for (s = (char *)(*varp); *s; s++) { + for (s = *varp; *s; s++) { if (vim_strchr(p, *s) == NULL) { errmsg = illegal_char(errbuf, errbuflen, *s); break; @@ -1505,7 +1506,7 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er // If error detected, restore the previous value. if (errmsg != NULL) { - free_string_option((char *)(*varp)); + free_string_option(*varp); *varp = oldval; // When resetting some values, need to act on it. if (did_chartab) { @@ -1518,7 +1519,7 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er // Use "free_oldval", because recursiveness may change the flags under // our fingers (esp. init_highlight()). if (free_oldval) { - free_string_option((char *)oldval); + free_string_option(oldval); } set_option_flag(opt_idx, P_ALLOCED); @@ -1536,7 +1537,7 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er // Trigger the autocommand only after setting the flags. // When 'syntax' is set, load the syntax of that name - if (varp == (char_u **)&(curbuf->b_p_syn)) { + if (varp == &(curbuf->b_p_syn)) { static int syn_recursive = 0; syn_recursive++; @@ -1546,7 +1547,7 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er value_changed || syn_recursive == 1, curbuf); curbuf->b_flags |= BF_SYN_SET; syn_recursive--; - } else if (varp == (char_u **)&(curbuf->b_p_ft)) { + } else if (varp == &(curbuf->b_p_ft)) { // 'filetype' is set, trigger the FileType autocommand // Skip this when called from a modeline and the filetype was // already set to this value. @@ -1566,13 +1567,13 @@ char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, char *er value_changed || ft_recursive == 1, curbuf); ft_recursive--; // Just in case the old "curbuf" is now invalid - if (varp != (char_u **)&(curbuf->b_p_ft)) { + if (varp != &(curbuf->b_p_ft)) { varp = NULL; } secure = secure_save; } } - if (varp == (char_u **)&(curwin->w_s->b_p_spl)) { + if (varp == &(curwin->w_s->b_p_spl)) { char_u fname[200]; char_u *q = (char_u *)curwin->w_s->b_p_spl; -- cgit From 691f4715c0cf4bc11ea2280db8777e6dd174a8ac Mon Sep 17 00:00:00 2001 From: Dundar Göc Date: Fri, 26 Aug 2022 23:11:25 +0200 Subject: refactor: replace char_u with char Work on https://github.com/neovim/neovim/issues/459 --- src/nvim/optionstr.c | 230 +++++++++++++++++++++++++-------------------------- 1 file changed, 114 insertions(+), 116 deletions(-) (limited to 'src/nvim/optionstr.c') diff --git a/src/nvim/optionstr.c b/src/nvim/optionstr.c index 808a70c8cb..1bdfcbecb9 100644 --- a/src/nvim/optionstr.c +++ b/src/nvim/optionstr.c @@ -113,30 +113,30 @@ static char *(p_tpf_values[]) = { "BS", "HT", "FF", "ESC", "DEL", "C0", "C1", NU static char *(p_rdb_values[]) = { "compositor", "nothrottle", "invalid", "nodelta", NULL }; /// All possible flags for 'shm'. -static char_u SHM_ALL[] = { SHM_RO, SHM_MOD, SHM_FILE, SHM_LAST, SHM_TEXT, SHM_LINES, SHM_NEW, - SHM_WRI, SHM_ABBREVIATIONS, SHM_WRITE, SHM_TRUNC, SHM_TRUNCALL, - SHM_OVER, SHM_OVERALL, SHM_SEARCH, SHM_ATTENTION, SHM_INTRO, - SHM_COMPLETIONMENU, SHM_RECORDING, SHM_FILEINFO, SHM_SEARCHCOUNT, 0, }; +static char SHM_ALL[] = { SHM_RO, SHM_MOD, SHM_FILE, SHM_LAST, SHM_TEXT, SHM_LINES, SHM_NEW, + SHM_WRI, SHM_ABBREVIATIONS, SHM_WRITE, SHM_TRUNC, SHM_TRUNCALL, + SHM_OVER, SHM_OVERALL, SHM_SEARCH, SHM_ATTENTION, SHM_INTRO, + SHM_COMPLETIONMENU, SHM_RECORDING, SHM_FILEINFO, SHM_SEARCHCOUNT, 0, }; /// After setting various option values: recompute variables that depend on /// option values. void didset_string_options(void) { - (void)opt_strings_flags((char_u *)p_cmp, p_cmp_values, &cmp_flags, true); - (void)opt_strings_flags((char_u *)p_bkc, p_bkc_values, &bkc_flags, true); - (void)opt_strings_flags((char_u *)p_bo, p_bo_values, &bo_flags, true); - (void)opt_strings_flags((char_u *)p_ssop, p_ssop_values, &ssop_flags, true); - (void)opt_strings_flags((char_u *)p_vop, p_ssop_values, &vop_flags, true); - (void)opt_strings_flags((char_u *)p_fdo, p_fdo_values, &fdo_flags, true); - (void)opt_strings_flags((char_u *)p_dy, p_dy_values, &dy_flags, true); - (void)opt_strings_flags((char_u *)p_rdb, p_rdb_values, &rdb_flags, true); - (void)opt_strings_flags((char_u *)p_tc, p_tc_values, &tc_flags, false); - (void)opt_strings_flags((char_u *)p_tpf, p_tpf_values, &tpf_flags, true); + (void)opt_strings_flags(p_cmp, p_cmp_values, &cmp_flags, true); + (void)opt_strings_flags(p_bkc, p_bkc_values, &bkc_flags, true); + (void)opt_strings_flags(p_bo, p_bo_values, &bo_flags, true); + (void)opt_strings_flags(p_ssop, p_ssop_values, &ssop_flags, true); + (void)opt_strings_flags(p_vop, p_ssop_values, &vop_flags, true); + (void)opt_strings_flags(p_fdo, p_fdo_values, &fdo_flags, true); + (void)opt_strings_flags(p_dy, p_dy_values, &dy_flags, true); + (void)opt_strings_flags(p_rdb, p_rdb_values, &rdb_flags, true); + (void)opt_strings_flags(p_tc, p_tc_values, &tc_flags, false); + (void)opt_strings_flags(p_tpf, p_tpf_values, &tpf_flags, true); (void)opt_strings_flags(p_ve, p_ve_values, &ve_flags, true); - (void)opt_strings_flags((char_u *)p_swb, p_swb_values, &swb_flags, true); - (void)opt_strings_flags((char_u *)p_wop, p_wop_values, &wop_flags, true); - (void)opt_strings_flags((char_u *)p_jop, p_jop_values, &jop_flags, true); - (void)opt_strings_flags((char_u *)p_cb, p_cb_values, &cb_flags, true); + (void)opt_strings_flags(p_swb, p_swb_values, &swb_flags, true); + (void)opt_strings_flags(p_wop, p_wop_values, &wop_flags, true); + (void)opt_strings_flags(p_jop, p_jop_values, &jop_flags, true); + (void)opt_strings_flags(p_cb, p_cb_values, &cb_flags, true); } /// Trigger the OptionSet autocommand. @@ -448,7 +448,7 @@ char *set_string_option(const int opt_idx, const char *const value, const int op /// Return true if "val" is a valid 'filetype' name. /// Also used for 'syntax' and 'keymap'. -static bool valid_filetype(const char_u *val) +static bool valid_filetype(const char *val) FUNC_ATTR_NONNULL_ALL FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT { return valid_name(val, ".-_"); @@ -520,7 +520,7 @@ static char *check_mousescroll(char *string) /// Handle setting 'signcolumn' for value 'val' /// /// @return OK when the value is valid, FAIL otherwise -static int check_signcolumn(char_u *val) +static int check_signcolumn(char *val) { if (*val == NUL) { return FAIL; @@ -637,13 +637,12 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf char *errmsg = NULL; char *s, *p; int did_chartab = false; - char_u **gvarp; bool free_oldval = (get_option_flags(opt_idx) & P_ALLOCED); bool value_changed = false; // Get the global option to compare with, otherwise we would have to check // two values for all local options. - gvarp = (char_u **)get_option_varp_scope(opt_idx, OPT_GLOBAL); + char **gvarp = (char **)get_option_varp_scope(opt_idx, OPT_GLOBAL); // Disallow changing some options from secure mode if ((secure || sandbox != 0) @@ -657,7 +656,7 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf // path separator (slash and/or backslash), wildcards and characters that // are often illegal in a file name. Be more permissive if "secure" is off. errmsg = e_invarg; - } else if (gvarp == (char_u **)&p_bkc) { // 'backupcopy' + } else if (gvarp == &p_bkc) { // 'backupcopy' char *bkc = p_bkc; unsigned int *flags = &bkc_flags; @@ -670,7 +669,7 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf // make the local value empty: use the global value *flags = 0; } else { - if (opt_strings_flags((char_u *)bkc, p_bkc_values, flags, true) != OK) { + if (opt_strings_flags(bkc, p_bkc_values, flags, true) != OK) { errmsg = e_invarg; } @@ -678,7 +677,7 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf + ((*flags & BKC_YES) != 0) + ((*flags & BKC_NO) != 0) != 1) { // Must have exactly one of "auto", "yes" and "no". - (void)opt_strings_flags((char_u *)oldval, p_bkc_values, flags, true); + (void)opt_strings_flags(oldval, p_bkc_values, flags, true); errmsg = e_invarg; } } @@ -713,8 +712,8 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf } else if (varp == &p_rtp || varp == &p_pp) { // 'runtimepath' 'packpath' runtime_search_path_invalidate(); } else if (varp == &curwin->w_p_culopt - || gvarp == (char_u **)&curwin->w_allbuf_opt.wo_culopt) { // 'cursorlineopt' - if (**varp == NUL || fill_culopt_flags((char_u *)(*varp), curwin) != OK) { + || gvarp == &curwin->w_allbuf_opt.wo_culopt) { // 'cursorlineopt' + if (**varp == NUL || fill_culopt_flags(*varp, curwin) != OK) { errmsg = e_invarg; } } else if (varp == &curwin->w_p_cc) { // 'colorcolumn' @@ -735,42 +734,42 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf errmsg = e_unsupportedoption; } } else if (varp == &p_jop) { // 'jumpoptions' - if (opt_strings_flags((char_u *)p_jop, p_jop_values, &jop_flags, true) != OK) { + if (opt_strings_flags(p_jop, p_jop_values, &jop_flags, true) != OK) { errmsg = e_invarg; } } else if (gvarp == &p_nf) { // 'nrformats' - if (check_opt_strings((char_u *)(*varp), p_nf_values, true) != OK) { + if (check_opt_strings(*varp, p_nf_values, true) != OK) { errmsg = e_invarg; } } else if (varp == &p_ssop) { // 'sessionoptions' - if (opt_strings_flags((char_u *)p_ssop, p_ssop_values, &ssop_flags, true) != OK) { + if (opt_strings_flags(p_ssop, p_ssop_values, &ssop_flags, true) != OK) { errmsg = e_invarg; } if ((ssop_flags & SSOP_CURDIR) && (ssop_flags & SSOP_SESDIR)) { // Don't allow both "sesdir" and "curdir". - (void)opt_strings_flags((char_u *)oldval, p_ssop_values, &ssop_flags, true); + (void)opt_strings_flags(oldval, p_ssop_values, &ssop_flags, true); errmsg = e_invarg; } } else if (varp == &p_vop) { // 'viewoptions' - if (opt_strings_flags((char_u *)p_vop, p_ssop_values, &vop_flags, true) != OK) { + if (opt_strings_flags(p_vop, p_ssop_values, &vop_flags, true) != OK) { errmsg = e_invarg; } } else if (varp == &p_rdb) { // 'redrawdebug' - if (opt_strings_flags((char_u *)p_rdb, p_rdb_values, &rdb_flags, true) != OK) { + if (opt_strings_flags(p_rdb, p_rdb_values, &rdb_flags, true) != OK) { errmsg = e_invarg; } } else if (varp == &p_sbo) { // 'scrollopt' - if (check_opt_strings((char_u *)p_sbo, p_scbopt_values, true) != OK) { + if (check_opt_strings(p_sbo, p_scbopt_values, true) != OK) { errmsg = e_invarg; } } else if (varp == &p_ambw || (int *)varp == &p_emoji) { // 'ambiwidth' - if (check_opt_strings((char_u *)p_ambw, p_ambw_values, false) != OK) { + if (check_opt_strings(p_ambw, p_ambw_values, false) != OK) { errmsg = e_invarg; } else { errmsg = check_chars_options(); } } else if (varp == &p_bg) { // 'background' - if (check_opt_strings((char_u *)p_bg, p_bg_values, false) == OK) { + if (check_opt_strings(p_bg, p_bg_values, false) == OK) { int dark = (*p_bg == 'd'); init_highlight(false, false); @@ -793,21 +792,21 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf errmsg = e_invarg; } } else if (varp == &p_wop) { // 'wildoptions' - if (opt_strings_flags((char_u *)p_wop, p_wop_values, &wop_flags, true) != OK) { + if (opt_strings_flags(p_wop, p_wop_values, &wop_flags, true) != OK) { errmsg = e_invarg; } } else if (varp == &p_wak) { // 'winaltkeys' if (*p_wak == NUL - || check_opt_strings((char_u *)p_wak, p_wak_values, false) != OK) { + || check_opt_strings(p_wak, p_wak_values, false) != OK) { errmsg = e_invarg; } } else if (varp == &p_ei) { // 'eventignore' if (check_ei() == FAIL) { errmsg = e_invarg; } - } else if (varp == &p_enc || gvarp == (char_u **)&p_fenc || gvarp == &p_menc) { + } else if (varp == &p_enc || gvarp == &p_fenc || gvarp == &p_menc) { // 'encoding', 'fileencoding' and 'makeencoding' - if (gvarp == (char_u **)&p_fenc) { + if (gvarp == &p_fenc) { if (!MODIFIABLE(curbuf) && opt_flags != OPT_GLOBAL) { errmsg = e_modifiable; } else if (vim_strchr(*varp, ',') != NULL) { @@ -824,7 +823,7 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf if (errmsg == NULL) { // canonize the value, so that STRCMP() can be used on it - p = (char *)enc_canonize((char_u *)(*varp)); + p = enc_canonize(*varp); xfree(*varp); *varp = p; if (varp == &p_enc) { @@ -838,11 +837,11 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf } } else if (varp == &p_penc) { // Canonize printencoding if VIM standard one - p = (char *)enc_canonize((char_u *)p_penc); + p = enc_canonize(p_penc); xfree(p_penc); p_penc = p; } else if (varp == &curbuf->b_p_keymap) { - if (!valid_filetype((char_u *)(*varp))) { + if (!valid_filetype(*varp)) { errmsg = e_invarg; } else { int secure_save = secure; @@ -883,10 +882,10 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf } status_redraw_curbuf(); } - } else if (gvarp == (char_u **)&p_ff) { // 'fileformat' + } else if (gvarp == &p_ff) { // 'fileformat' if (!MODIFIABLE(curbuf) && !(opt_flags & OPT_GLOBAL)) { errmsg = e_modifiable; - } else if (check_opt_strings((char_u *)(*varp), p_ff_values, false) != OK) { + } else if (check_opt_strings(*varp, p_ff_values, false) != OK) { errmsg = e_invarg; } else { redraw_titles(); @@ -899,7 +898,7 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf } } } else if (varp == &p_ffs) { // 'fileformats' - if (check_opt_strings((char_u *)p_ffs, p_ff_values, true) != OK) { + if (check_opt_strings(p_ffs, p_ff_values, true) != OK) { errmsg = e_invarg; } } else if (gvarp == &p_mps) { // 'matchpairs' @@ -923,7 +922,7 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf break; } } - } else if (gvarp == (char_u **)&p_com) { // 'comments' + } else if (gvarp == &p_com) { // 'comments' for (s = *varp; *s;) { while (*s && *s != ':') { if (vim_strchr(COM_ALL, *s) == NULL @@ -947,13 +946,13 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf } s++; } - s = (char *)skip_to_option_part((char_u *)s); + s = skip_to_option_part(s); } } else if (varp == &p_lcs || varp == &p_fcs) { // global 'listchars' or 'fillchars' char **local_ptr = varp == &p_lcs ? &curwin->w_p_lcs : &curwin->w_p_fcs; // only apply the global value to "curwin" when it does not have a local value errmsg = - set_chars_option(curwin, (char_u **)varp, **local_ptr == NUL || !(opt_flags & OPT_GLOBAL)); + set_chars_option(curwin, varp, **local_ptr == NUL || !(opt_flags & OPT_GLOBAL)); if (errmsg == NULL) { // If the current window is set to use the global // 'listchars'/'fillchars' value, clear the window-local value. @@ -967,18 +966,18 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf // here, so ignore the return value. local_ptr = varp == &p_lcs ? &wp->w_p_lcs : &wp->w_p_fcs; if (**local_ptr == NUL) { - (void)set_chars_option(wp, (char_u **)local_ptr, true); + (void)set_chars_option(wp, local_ptr, true); } } redraw_all_later(UPD_NOT_VALID); } } else if (varp == &curwin->w_p_lcs) { // local 'listchars' - errmsg = set_chars_option(curwin, (char_u **)varp, true); + errmsg = set_chars_option(curwin, varp, true); } else if (varp == &curwin->w_p_fcs) { // local 'fillchars' - errmsg = set_chars_option(curwin, (char_u **)varp, true); + errmsg = set_chars_option(curwin, varp, true); } else if (varp == &p_cedit) { // 'cedit' errmsg = check_cedit(); - } else if (varp == (char **)&p_vfile) { // 'verbosefile' + } else if (varp == &p_vfile) { // 'verbosefile' verbose_stop(); if (*p_vfile != NUL && verbose_open() == FAIL) { errmsg = e_invarg; @@ -1037,7 +1036,7 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf if (*p_shada && errmsg == NULL && get_shada_parameter('\'') < 0) { errmsg = N_("E528: Must specify a ' value"); } - } else if (gvarp == (char_u **)&p_sbr) { // 'showbreak' + } else if (gvarp == &p_sbr) { // 'showbreak' for (s = *varp; *s;) { if (ptr2cells(s) != 1) { errmsg = e_showbreak_contains_unprintable_or_wide_character; @@ -1052,7 +1051,7 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf errmsg = parse_printmbfont(); } else if (varp == &p_langmap) { // 'langmap' langmap_set(); - } else if (varp == (char **)&p_breakat) { // 'breakat' + } else if (varp == &p_breakat) { // 'breakat' fill_breakat_flags(); } else if (varp == &p_titlestring || varp == &p_iconstring) { // 'titlestring' and 'iconstring' @@ -1067,47 +1066,47 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf did_set_title(); } else if (varp == &p_sel) { // 'selection' if (*p_sel == NUL - || check_opt_strings((char_u *)p_sel, p_sel_values, false) != OK) { + || check_opt_strings(p_sel, p_sel_values, false) != OK) { errmsg = e_invarg; } } else if (varp == &p_slm) { // 'selectmode' - if (check_opt_strings((char_u *)p_slm, p_slm_values, true) != OK) { + if (check_opt_strings(p_slm, p_slm_values, true) != OK) { errmsg = e_invarg; } } else if (varp == &p_km) { // 'keymodel' - if (check_opt_strings((char_u *)p_km, p_km_values, true) != OK) { + if (check_opt_strings(p_km, p_km_values, true) != OK) { errmsg = e_invarg; } else { km_stopsel = (vim_strchr(p_km, 'o') != NULL); km_startsel = (vim_strchr(p_km, 'a') != NULL); } } else if (varp == &p_mousem) { // 'mousemodel' - if (check_opt_strings((char_u *)p_mousem, p_mousem_values, false) != OK) { + if (check_opt_strings(p_mousem, p_mousem_values, false) != OK) { errmsg = e_invarg; } } else if (varp == &p_mousescroll) { // 'mousescroll' errmsg = check_mousescroll(p_mousescroll); } else if (varp == &p_swb) { // 'switchbuf' - if (opt_strings_flags((char_u *)p_swb, p_swb_values, &swb_flags, true) != OK) { + if (opt_strings_flags(p_swb, p_swb_values, &swb_flags, true) != OK) { errmsg = e_invarg; } } else if (varp == &p_debug) { // 'debug' - if (check_opt_strings((char_u *)p_debug, p_debug_values, true) != OK) { + if (check_opt_strings(p_debug, p_debug_values, true) != OK) { errmsg = e_invarg; } } else if (varp == &p_dy) { // 'display' - if (opt_strings_flags((char_u *)p_dy, p_dy_values, &dy_flags, true) != OK) { + if (opt_strings_flags(p_dy, p_dy_values, &dy_flags, true) != OK) { errmsg = e_invarg; } else { (void)init_chartab(); msg_grid_validate(); } } else if (varp == &p_ead) { // 'eadirection' - if (check_opt_strings((char_u *)p_ead, p_ead_values, false) != OK) { + if (check_opt_strings(p_ead, p_ead_values, false) != OK) { errmsg = e_invarg; } } else if (varp == &p_cb) { // 'clipboard' - if (opt_strings_flags((char_u *)p_cb, p_cb_values, &cb_flags, true) != OK) { + if (opt_strings_flags(p_cb, p_cb_values, &cb_flags, true) != OK) { errmsg = e_invarg; } } else if (varp == &(curwin->w_s->b_p_spl) // 'spell' @@ -1116,8 +1115,8 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf // buffer in which 'spell' is set load the wordlists. const bool is_spellfile = varp == &(curwin->w_s->b_p_spf); - if ((is_spellfile && !valid_spellfile((char_u *)(*varp))) - || (!is_spellfile && !valid_spelllang((char_u *)(*varp)))) { + if ((is_spellfile && !valid_spellfile(*varp)) + || (!is_spellfile && !valid_spelllang(*varp))) { errmsg = e_invarg; } else { errmsg = did_set_spell_option(is_spellfile); @@ -1139,14 +1138,14 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf } } else if (gvarp == &p_bh) { // When 'bufhidden' is set, check for valid value. - if (check_opt_strings((char_u *)curbuf->b_p_bh, p_bufhidden_values, false) != OK) { + if (check_opt_strings(curbuf->b_p_bh, p_bufhidden_values, false) != OK) { errmsg = e_invarg; } } else if (gvarp == &p_bt) { // When 'buftype' is set, check for valid value. if ((curbuf->terminal && curbuf->b_p_bt[0] != 't') || (!curbuf->terminal && curbuf->b_p_bt[0] == 't') - || check_opt_strings((char_u *)curbuf->b_p_bt, p_buftype_values, false) != OK) { + || check_opt_strings(curbuf->b_p_bt, p_buftype_values, false) != OK) { errmsg = e_invarg; } else { if (curwin->w_status_height || global_stl_height()) { @@ -1156,7 +1155,7 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf curbuf->b_help = (curbuf->b_p_bt[0] == 'h'); redraw_titles(); } - } else if (gvarp == (char_u **)&p_stl || gvarp == (char_u **)&p_wbr || varp == &p_tal + } else if (gvarp == &p_stl || gvarp == &p_wbr || varp == &p_tal || varp == &p_ruf) { // 'statusline', 'winbar', 'tabline' or 'rulerformat' int wid; @@ -1184,7 +1183,7 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf comp_col(); } // add / remove window bars for 'winbar' - if (gvarp == (char_u **)&p_wbr) { + if (gvarp == &p_wbr) { set_winbar(true); } } else if (gvarp == &p_cpt) { @@ -1223,7 +1222,7 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf } } } else if (varp == &p_cot) { // 'completeopt' - if (check_opt_strings((char_u *)p_cot, p_cot_values, true) != OK) { + if (check_opt_strings(p_cot, p_cot_values, true) != OK) { errmsg = e_invarg; } else { completeopt_was_set(); @@ -1236,7 +1235,7 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf } #endif } else if (varp == &curwin->w_p_scl) { // 'signcolumn' - if (check_signcolumn((char_u *)(*varp)) != OK) { + if (check_signcolumn(*varp) != OK) { errmsg = e_invarg; } // When changing the 'signcolumn' to or from 'number', recompute the @@ -1249,20 +1248,20 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf } else if (varp == &curwin->w_p_fdc || varp == &curwin->w_allbuf_opt.wo_fdc) { // 'foldcolumn' - if (**varp == NUL || check_opt_strings((char_u *)(*varp), p_fdc_values, false) != OK) { + if (**varp == NUL || check_opt_strings(*varp, p_fdc_values, false) != OK) { errmsg = e_invarg; } - } else if (varp == (char **)&p_pt) { + } else if (varp == &p_pt) { // 'pastetoggle': translate key codes like in a mapping if (*p_pt) { p = NULL; - (void)replace_termcodes((char *)p_pt, + (void)replace_termcodes(p_pt, STRLEN(p_pt), &p, REPTERM_FROM_PART | REPTERM_DO_LT, NULL, CPO_TO_CPO_FLAGS); if (p != NULL) { - free_string_option((char *)p_pt); - p_pt = (char_u *)p; + free_string_option(p_pt); + p_pt = p; } } } else if (varp == &p_bs) { // 'backspace' @@ -1270,14 +1269,14 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf if (*p_bs > '3' || p_bs[1] != NUL) { errmsg = e_invarg; } - } else if (check_opt_strings((char_u *)p_bs, p_bs_values, true) != OK) { + } else if (check_opt_strings(p_bs, p_bs_values, true) != OK) { errmsg = e_invarg; } } else if (varp == &p_bo) { - if (opt_strings_flags((char_u *)p_bo, p_bo_values, &bo_flags, true) != OK) { + if (opt_strings_flags(p_bo, p_bo_values, &bo_flags, true) != OK) { errmsg = e_invarg; } - } else if (gvarp == (char_u **)&p_tc) { // 'tagcase' + } else if (gvarp == &p_tc) { // 'tagcase' unsigned int *flags; if (opt_flags & OPT_LOCAL) { @@ -1292,19 +1291,19 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf // make the local value empty: use the global value *flags = 0; } else if (*p == NUL - || opt_strings_flags((char_u *)p, p_tc_values, flags, false) != OK) { + || opt_strings_flags(p, p_tc_values, flags, false) != OK) { errmsg = e_invarg; } } else if (varp == &p_cmp) { // 'casemap' - if (opt_strings_flags((char_u *)p_cmp, p_cmp_values, &cmp_flags, true) != OK) { + if (opt_strings_flags(p_cmp, p_cmp_values, &cmp_flags, true) != OK) { errmsg = e_invarg; } } else if (varp == &p_dip) { // 'diffopt' if (diffopt_changed() == FAIL) { errmsg = e_invarg; } - } else if (gvarp == (char_u **)&curwin->w_allbuf_opt.wo_fdm) { // 'foldmethod' - if (check_opt_strings((char_u *)(*varp), p_fdm_values, false) != OK + } else if (gvarp == &curwin->w_allbuf_opt.wo_fdm) { // 'foldmethod' + if (check_opt_strings(*varp, p_fdm_values, false) != OK || *curwin->w_p_fdm == NUL) { errmsg = e_invarg; } else { @@ -1317,7 +1316,7 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf if (foldmethodIsExpr(curwin)) { foldUpdateAll(curwin); } - } else if (gvarp == (char_u **)&curwin->w_allbuf_opt.wo_fmr) { // 'foldmarker' + } else if (gvarp == &curwin->w_allbuf_opt.wo_fmr) { // 'foldmarker' p = vim_strchr(*varp, ','); if (p == NULL) { errmsg = N_("E536: comma required"); @@ -1331,23 +1330,23 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf errmsg = N_("E537: 'commentstring' must be empty or contain %s"); } } else if (varp == &p_fdo) { // 'foldopen' - if (opt_strings_flags((char_u *)p_fdo, p_fdo_values, &fdo_flags, true) != OK) { + if (opt_strings_flags(p_fdo, p_fdo_values, &fdo_flags, true) != OK) { errmsg = e_invarg; } } else if (varp == &p_fcl) { // 'foldclose' - if (check_opt_strings((char_u *)p_fcl, p_fcl_values, true) != OK) { + if (check_opt_strings(p_fcl, p_fcl_values, true) != OK) { errmsg = e_invarg; } - } else if (gvarp == (char_u **)&curwin->w_allbuf_opt.wo_fdi) { // 'foldignore' + } else if (gvarp == &curwin->w_allbuf_opt.wo_fdi) { // 'foldignore' if (foldmethodIsIndent(curwin)) { foldUpdateAll(curwin); } } else if (gvarp == &p_ve) { // 'virtualedit' - char_u *ve = p_ve; + char *ve = p_ve; unsigned int *flags = &ve_flags; if (opt_flags & OPT_LOCAL) { - ve = (char_u *)curwin->w_p_ve; + ve = curwin->w_p_ve; flags = &curwin->w_ve_flags; } @@ -1381,15 +1380,15 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf } } } - } else if (gvarp == (char_u **)&p_cino) { // 'cinoptions' + } else if (gvarp == &p_cino) { // 'cinoptions' // TODO(vim): recognize errors parse_cino(curbuf); } else if (varp == &p_icm) { // 'inccommand' - if (check_opt_strings((char_u *)p_icm, p_icm_values, false) != OK) { + if (check_opt_strings(p_icm, p_icm_values, false) != OK) { errmsg = e_invarg; } - } else if (gvarp == (char_u **)&p_ft) { - if (!valid_filetype((char_u *)(*varp))) { + } else if (gvarp == &p_ft) { + if (!valid_filetype(*varp)) { errmsg = e_invarg; } else { value_changed = STRCMP(oldval, *varp) != 0; @@ -1399,7 +1398,7 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf *value_checked = true; } } else if (gvarp == &p_syn) { - if (!valid_filetype((char_u *)(*varp))) { + if (!valid_filetype(*varp)) { errmsg = e_invarg; } else { value_changed = STRCMP(oldval, *varp) != 0; @@ -1413,20 +1412,20 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf errmsg = e_invarg; } } else if (varp == &p_tpf) { - if (opt_strings_flags((char_u *)p_tpf, p_tpf_values, &tpf_flags, true) != OK) { + if (opt_strings_flags(p_tpf, p_tpf_values, &tpf_flags, true) != OK) { errmsg = e_invarg; } } else if (varp == &(curbuf->b_p_vsts)) { // 'varsofttabstop' - char_u *cp; + char *cp; if (!(*varp)[0] || ((*varp)[0] == '0' && !(*varp)[1])) { XFREE_CLEAR(curbuf->b_p_vsts_array); } else { - for (cp = (char_u *)(*varp); *cp; cp++) { + for (cp = *varp; *cp; cp++) { if (ascii_isdigit(*cp)) { continue; } - if (*cp == ',' && cp > (char_u *)(*varp) && *(cp - 1) != ',') { + if (*cp == ',' && cp > *varp && *(cp - 1) != ',') { continue; } errmsg = e_invarg; @@ -1434,7 +1433,7 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf } if (errmsg == NULL) { long *oldarray = curbuf->b_p_vsts_array; - if (tabstop_set((char_u *)(*varp), &(curbuf->b_p_vsts_array))) { + if (tabstop_set(*varp, &(curbuf->b_p_vsts_array))) { xfree(oldarray); } else { errmsg = e_invarg; @@ -1442,16 +1441,16 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf } } } else if (varp == &(curbuf->b_p_vts)) { // 'vartabstop' - char_u *cp; + char *cp; if (!(*varp)[0] || ((*varp)[0] == '0' && !(*varp)[1])) { XFREE_CLEAR(curbuf->b_p_vts_array); } else { - for (cp = (char_u *)(*varp); *cp; cp++) { + for (cp = *varp; *cp; cp++) { if (ascii_isdigit(*cp)) { continue; } - if (*cp == ',' && cp > (char_u *)(*varp) && *(cp - 1) != ',') { + if (*cp == ',' && cp > *varp && *(cp - 1) != ',') { continue; } errmsg = e_invarg; @@ -1459,7 +1458,7 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf } if (errmsg == NULL) { long *oldarray = curbuf->b_p_vts_array; - if (tabstop_set((char_u *)(*varp), &(curbuf->b_p_vts_array))) { + if (tabstop_set(*varp, &(curbuf->b_p_vts_array))) { xfree(oldarray); if (foldmethodIsIndent(curwin)) { foldUpdateAll(curwin); @@ -1484,7 +1483,7 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf p = WW_ALL; } if (varp == &p_shm) { // 'shortmess' - p = (char *)SHM_ALL; + p = SHM_ALL; } else if (varp == &(p_cpo)) { // 'cpoptions' p = CPO_VI; } else if (varp == &(curbuf->b_p_fo)) { // 'formatoptions' @@ -1527,7 +1526,7 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf && is_global_local_option(opt_idx)) { // global option with local value set to use global value; free // the local value and make it empty - p = (char *)get_option_varp_scope(opt_idx, OPT_LOCAL); + p = get_option_varp_scope(opt_idx, OPT_LOCAL); free_string_option(*(char **)p); *(char **)p = empty_option; } else if (!(opt_flags & OPT_LOCAL) && opt_flags != OPT_GLOBAL) { @@ -1574,8 +1573,8 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf } } if (varp == &(curwin->w_s->b_p_spl)) { - char_u fname[200]; - char_u *q = (char_u *)curwin->w_s->b_p_spl; + char fname[200]; + char *q = curwin->w_s->b_p_spl; // Skip the first name if it is "cjk". if (STRNCMP(q, "cjk,", 4) == 0) { @@ -1586,15 +1585,14 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf // They could set 'spellcapcheck' depending on the language. // Use the first name in 'spelllang' up to '_region' or // '.encoding'. - for (p = (char *)q; *p != NUL; p++) { + for (p = q; *p != NUL; p++) { if (!ASCII_ISALNUM(*p) && *p != '-') { break; } } - if (p > (char *)q) { - vim_snprintf((char *)fname, sizeof(fname), "spell/%.*s.vim", - (int)(p - (char *)q), q); - source_runtime((char *)fname, DIP_ALL); + if (p > q) { + vim_snprintf(fname, sizeof(fname), "spell/%.*s.vim", (int)(p - q), q); + source_runtime(fname, DIP_ALL); } } } @@ -1618,7 +1616,7 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf /// @param list when true: accept a list of values /// /// @return OK for correct value, FAIL otherwise. Empty is always OK. -static int check_opt_strings(char_u *val, char **values, int list) +static int check_opt_strings(char *val, char **values, int list) { return opt_strings_flags(val, values, NULL, list); } @@ -1631,7 +1629,7 @@ static int check_opt_strings(char_u *val, char **values, int list) /// @param list when true: accept a list of values /// /// @return OK for correct value, FAIL otherwise. Empty is always OK. -static int opt_strings_flags(char_u *val, char **values, unsigned *flagp, bool list) +static int opt_strings_flags(char *val, char **values, unsigned *flagp, bool list) { unsigned int new_flags = 0; @@ -1659,7 +1657,7 @@ static int opt_strings_flags(char_u *val, char **values, unsigned *flagp, bool l } /// @return OK if "p" is a valid fileformat name, FAIL otherwise. -int check_ff_value(char_u *p) +int check_ff_value(char *p) { return check_opt_strings(p, p_ff_values, false); } -- cgit From 75adfefc85bcf0d62d2c0f51a951e6003b595cea Mon Sep 17 00:00:00 2001 From: Thomas Vigouroux Date: Mon, 18 Jul 2022 14:21:40 +0200 Subject: feat(extmarks,ts,spell): full support for spelling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Added 'spell' option to extmarks: Extmarks with this set will have the region spellchecked. - Added 'noplainbuffer' option to 'spelloptions': This is used to tell Neovim not to spellcheck the buffer. The old behaviour was to spell check the whole buffer unless :syntax was set. - Added spelling support to the treesitter highlighter: @spell captures in highlights.scm are used to define regions which should be spell checked. - Added support for navigating spell errors for extmarks: Works for both ephemeral and static extmarks - Added '_on_spell_nav' callback for decoration providers: Since ephemeral callbacks are only drawn for the visible screen, providers must implement this callback to instruct Neovim which regions in the buffer need can be spell checked. The callback takes a start position and an end position. Note: this callback is subject to change hence the _ prefix. - Added spell captures for built-in support languages Co-authored-by: Lewis Russell Co-authored-by: Björn Linse --- src/nvim/optionstr.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/nvim/optionstr.c') diff --git a/src/nvim/optionstr.c b/src/nvim/optionstr.c index 1bdfcbecb9..c226966ef6 100644 --- a/src/nvim/optionstr.c +++ b/src/nvim/optionstr.c @@ -107,6 +107,7 @@ static char *(p_fdc_values[]) = { "auto", "auto:1", "auto:2", "auto:3", "auto:4" "auto:6", "auto:7", "auto:8", "auto:9", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", NULL }; static char *(p_cb_values[]) = { "unnamed", "unnamedplus", NULL }; +static char *(p_spo_values[]) = { "camel", "noplainbuffer", NULL }; static char *(p_icm_values[]) = { "nosplit", "split", NULL }; static char *(p_jop_values[]) = { "stack", "view", NULL }; static char *(p_tpf_values[]) = { "BS", "HT", "FF", "ESC", "DEL", "C0", "C1", NULL }; @@ -1125,7 +1126,8 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf // When 'spellcapcheck' is set compile the regexp program. errmsg = compile_cap_prog(curwin->w_s); } else if (varp == &(curwin->w_s->b_p_spo)) { // 'spelloptions' - if (**varp != NUL && STRCMP("camel", *varp) != 0) { + if (opt_strings_flags(curwin->w_s->b_p_spo, p_spo_values, &(curwin->w_s->b_p_spo_flags), + true) != OK) { errmsg = e_invarg; } } else if (varp == &p_sps) { // 'spellsuggest' -- cgit From 73207cae611a1efb8cd17139e8228772daeb9866 Mon Sep 17 00:00:00 2001 From: Dundar Göc Date: Fri, 26 Aug 2022 23:11:25 +0200 Subject: refactor: replace char_u with char Work on https://github.com/neovim/neovim/issues/459 --- src/nvim/optionstr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/nvim/optionstr.c') diff --git a/src/nvim/optionstr.c b/src/nvim/optionstr.c index c226966ef6..8581dae7a3 100644 --- a/src/nvim/optionstr.c +++ b/src/nvim/optionstr.c @@ -253,7 +253,7 @@ void check_buf_options(buf_T *buf) /// Free the string allocated for an option. /// Checks for the string being empty_option. This may happen if we're out of -/// memory, vim_strsave() returned NULL, which was replaced by empty_option by +/// memory, xstrdup() returned NULL, which was replaced by empty_option by /// check_options(). /// Does NOT check for P_ALLOCED flag! void free_string_option(char *p) -- cgit From c5322e752e9e568de907f7a1ef733bbfe342140c Mon Sep 17 00:00:00 2001 From: Dundar Göc Date: Fri, 26 Aug 2022 23:11:25 +0200 Subject: refactor: replace char_u with char Work on https://github.com/neovim/neovim/issues/459 --- src/nvim/optionstr.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'src/nvim/optionstr.c') diff --git a/src/nvim/optionstr.c b/src/nvim/optionstr.c index 8581dae7a3..9d21603754 100644 --- a/src/nvim/optionstr.c +++ b/src/nvim/optionstr.c @@ -683,7 +683,7 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf } } } else if (varp == &p_bex || varp == &p_pm) { // 'backupext' and 'patchmode' - if (STRCMP(*p_bex == '.' ? p_bex + 1 : p_bex, + if (strcmp(*p_bex == '.' ? p_bex + 1 : p_bex, *p_pm == '.' ? p_pm + 1 : p_pm) == 0) { errmsg = e_backupext_and_patchmode_are_equal; } @@ -731,7 +731,7 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf } } } else if (varp == &p_hl) { // 'highlight' - if (STRCMP(*varp, HIGHLIGHT_INIT) != 0) { + if (strcmp(*varp, HIGHLIGHT_INIT) != 0) { errmsg = e_unsupportedoption; } } else if (varp == &p_jop) { // 'jumpoptions' @@ -823,13 +823,13 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf } if (errmsg == NULL) { - // canonize the value, so that STRCMP() can be used on it + // canonize the value, so that strcmp() can be used on it p = enc_canonize(*varp); xfree(*varp); *varp = p; if (varp == &p_enc) { // only encoding=utf-8 allowed - if (STRCMP(p_enc, "utf-8") != 0) { + if (strcmp(p_enc, "utf-8") != 0) { errmsg = e_unsupportedoption; } else { spell_reload(); @@ -1358,7 +1358,7 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf } else { if (opt_strings_flags(ve, p_ve_values, flags, true) != OK) { errmsg = e_invarg; - } else if (STRCMP(p_ve, oldval) != 0) { + } else if (strcmp(p_ve, oldval) != 0) { // Recompute cursor position in case the new 've' setting // changes something. validate_virtcol(); @@ -1393,7 +1393,7 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf if (!valid_filetype(*varp)) { errmsg = e_invarg; } else { - value_changed = STRCMP(oldval, *varp) != 0; + value_changed = strcmp(oldval, *varp) != 0; // Since we check the value, there is no need to set P_INSECURE, // even when the value comes from a modeline. @@ -1403,7 +1403,7 @@ char *did_set_string_option(int opt_idx, char **varp, char *oldval, char *errbuf if (!valid_filetype(*varp)) { errmsg = e_invarg; } else { - value_changed = STRCMP(oldval, *varp) != 0; + value_changed = strcmp(oldval, *varp) != 0; // Since we check the value, there is no need to set P_INSECURE, // even when the value comes from a modeline. -- cgit