0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 9.0.0176: checking character options is duplicated and incomplete

Problem:    Checking character options is duplicated and incomplete.
Solution:   Move checking to check_chars_options(). (closes #10863)
This commit is contained in:
zeertzjq 2022-08-09 12:53:14 +01:00 committed by Bram Moolenaar
parent afa23d1b99
commit 8ca29b6a35
6 changed files with 42 additions and 44 deletions

View File

@ -5645,31 +5645,9 @@ f_setcellwidths(typval_T *argvars, typval_T *rettv UNUSED)
cw_table = table; cw_table = table;
cw_table_size = l->lv_len; cw_table_size = l->lv_len;
// Check that the new value does not conflict with 'fillchars' or // Check that the new value does not conflict with 'listchars' or
// 'listchars'. // 'fillchars'.
if (set_chars_option(curwin, &p_fcs, FALSE) != NULL) error = check_chars_options();
error = e_conflicts_with_value_of_fillchars;
else if (set_chars_option(curwin, &p_lcs, FALSE) != NULL)
error = e_conflicts_with_value_of_listchars;
else
{
tabpage_T *tp;
win_T *wp;
FOR_ALL_TAB_WINDOWS(tp, wp)
{
if (set_chars_option(wp, &wp->w_p_lcs, FALSE) != NULL)
{
error = e_conflicts_with_value_of_listchars;
break;
}
if (set_chars_option(wp, &wp->w_p_fcs, FALSE) != NULL)
{
error = e_conflicts_with_value_of_fillchars;
break;
}
}
}
if (error != NULL) if (error != NULL)
{ {
emsg(_(error)); emsg(_(error));

View File

@ -866,24 +866,8 @@ did_set_string_option(
{ {
if (check_opt_strings(p_ambw, p_ambw_values, FALSE) != OK) if (check_opt_strings(p_ambw, p_ambw_values, FALSE) != OK)
errmsg = e_invalid_argument; errmsg = e_invalid_argument;
else if (set_chars_option(curwin, &p_fcs, FALSE) != NULL)
errmsg = e_conflicts_with_value_of_fillchars;
else else
{ errmsg = check_chars_options();
tabpage_T *tp;
win_T *wp;
FOR_ALL_TAB_WINDOWS(tp, wp)
{
if (set_chars_option(wp, &wp->w_p_lcs, FALSE) != NULL)
{
errmsg = e_conflicts_with_value_of_listchars;
goto ambw_end;
}
}
}
ambw_end:
{}
} }
// 'background' // 'background'

View File

@ -56,4 +56,5 @@ int number_width(win_T *wp);
int screen_screencol(void); int screen_screencol(void);
int screen_screenrow(void); int screen_screenrow(void);
char *set_chars_option(win_T *wp, char_u **varp, int apply); char *set_chars_option(win_T *wp, char_u **varp, int apply);
char *check_chars_options(void);
/* vim: set ft=c : */ /* vim: set ft=c : */

View File

@ -5155,3 +5155,28 @@ set_chars_option(win_T *wp, char_u **varp, int apply)
return NULL; // no error return NULL; // no error
} }
/*
* Check all global and local values of 'listchars' and 'fillchars'.
* Return an untranslated error messages if any of them is invalid, NULL
* otherwise.
*/
char *
check_chars_options(void)
{
tabpage_T *tp;
win_T *wp;
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, FALSE) != NULL)
return e_conflicts_with_value_of_listchars;
if (set_chars_option(wp, &wp->w_p_fcs, FALSE) != NULL)
return e_conflicts_with_value_of_fillchars;
}
return NULL;
}

View File

@ -466,9 +466,17 @@ func Test_set_errors()
call assert_fails('set sessionoptions=curdir,sesdir', 'E474:') call assert_fails('set sessionoptions=curdir,sesdir', 'E474:')
call assert_fails('set foldmarker={{{,', 'E474:') call assert_fails('set foldmarker={{{,', 'E474:')
call assert_fails('set sessionoptions=sesdir,curdir', 'E474:') call assert_fails('set sessionoptions=sesdir,curdir', 'E474:')
call assert_fails('set listchars=trail:· ambiwidth=double', 'E834:') setlocal listchars=trail
call assert_fails('set ambiwidth=double', 'E834:')
setlocal listchars=trail:-
setglobal listchars=trail
call assert_fails('set ambiwidth=double', 'E834:')
set listchars& set listchars&
call assert_fails('set fillchars=stl:· ambiwidth=double', 'E835:') setlocal fillchars=stl
call assert_fails('set ambiwidth=double', 'E835:')
setlocal fillchars=stl:-
setglobal fillchars=stl
call assert_fails('set ambiwidth=double', 'E835:')
set fillchars& set fillchars&
call assert_fails('set fileencoding=latin1,utf-8', 'E474:') call assert_fails('set fileencoding=latin1,utf-8', 'E474:')
set nomodifiable set nomodifiable

View File

@ -735,6 +735,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
176,
/**/ /**/
175, 175,
/**/ /**/