diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-08-09 20:35:34 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-09 20:35:34 +0800 |
commit | 24bf0490ea3a16c14494358fe45437e43ca8d1d1 (patch) | |
tree | 31c21d2cbc273a1a1586ab0b05ddf78c21ef40a6 /src/nvim/option.c | |
parent | 33ddca6fa0534df2605699070fdd1e5c6e4a7bcf (diff) | |
download | rneovim-24bf0490ea3a16c14494358fe45437e43ca8d1d1.tar.gz rneovim-24bf0490ea3a16c14494358fe45437e43ca8d1d1.tar.bz2 rneovim-24bf0490ea3a16c14494358fe45437e43ca8d1d1.zip |
vim-patch:9.0.0176: checking character options is duplicated and incomplete (#19690)
Problem: Checking character options is duplicated and incomplete.
Solution: Move checking to check_chars_options(). (closes vim/vim#10863)
https://github.com/vim/vim/commit/8ca29b6a3599b82b8822b7697cad63d0244c2d59
Diffstat (limited to 'src/nvim/option.c')
-rw-r--r-- | src/nvim/option.c | 39 |
1 files changed, 27 insertions, 12 deletions
diff --git a/src/nvim/option.c b/src/nvim/option.c index d7443bc593..8eb3b64e5b 100644 --- a/src/nvim/option.c +++ b/src/nvim/option.c @@ -339,6 +339,9 @@ static char_u SHM_ALL[] = { static char e_unclosed_expression_sequence[] = N_("E540: Unclosed expression sequence"); static char e_unbalanced_groups[] = N_("E542: unbalanced groups"); +static char e_conflicts_with_value_of_listchars[] = N_("E834: Conflicts with value of 'listchars'"); +static char e_conflicts_with_value_of_fillchars[] = N_("E835: Conflicts with value of 'fillchars'"); + #ifdef INCLUDE_GENERATED_DECLARATIONS # include "option.c.generated.h" #endif @@ -2578,18 +2581,7 @@ static char *did_set_string_option(int opt_idx, char_u **varp, char_u *oldval, c if (check_opt_strings(p_ambw, p_ambw_values, false) != OK) { errmsg = e_invarg; } else { - FOR_ALL_TAB_WINDOWS(tp, wp) { - if (set_chars_option(wp, &wp->w_p_lcs, true) != NULL) { - errmsg = _(e_conflicts_with_value_of_listchars); - goto ambw_end; - } - if (set_chars_option(wp, &wp->w_p_fcs, true) != NULL) { - errmsg = _(e_conflicts_with_value_of_fillchars); - goto ambw_end; - } - } -ambw_end: - {} // clint prefers {} over ; as an empty statement + errmsg = check_chars_options(); } } else if (varp == &p_bg) { // 'background' if (check_opt_strings(p_bg, p_bg_values, false) == OK) { @@ -3823,6 +3815,29 @@ char *set_chars_option(win_T *wp, char_u **varp, bool set) return NULL; // no error } +/// Check all global and local values of 'listchars' and 'fillchars'. +/// May set different defaults in case character widths change. +/// +/// @return an untranslated error message if any of them is invalid, NULL otherwise. +char *check_chars_options(void) +{ + if (set_chars_option(curwin, &p_lcs, false) != NULL) { + return e_conflicts_with_value_of_listchars; + } + if (set_chars_option(curwin, &p_fcs, false) != NULL) { + return e_conflicts_with_value_of_fillchars; + } + FOR_ALL_TAB_WINDOWS(tp, wp) { + if (set_chars_option(wp, &wp->w_p_lcs, true) != NULL) { + return e_conflicts_with_value_of_listchars; + } + if (set_chars_option(wp, &wp->w_p_fcs, true) != NULL) { + return e_conflicts_with_value_of_fillchars; + } + } + return NULL; +} + /// Check validity of options with the 'statusline' format. /// Return an untranslated error message or NULL. char *check_stl_option(char *s) |