Skip to content

Commit

Permalink
patch 9.0.0176: checking character options is duplicated and incomplete
Browse files Browse the repository at this point in the history
Problem:    Checking character options is duplicated and incomplete.
Solution:   Move checking to check_chars_options(). (closes #10863)
  • Loading branch information
zeertzjq authored and brammool committed Aug 9, 2022
1 parent afa23d1 commit 8ca29b6
Show file tree
Hide file tree
Showing 6 changed files with 42 additions and 44 deletions.
28 changes: 3 additions & 25 deletions src/mbyte.c
Original file line number Diff line number Diff line change
Expand Up @@ -5645,31 +5645,9 @@ f_setcellwidths(typval_T *argvars, typval_T *rettv UNUSED)
cw_table = table;
cw_table_size = l->lv_len;

// Check that the new value does not conflict with 'fillchars' or
// 'listchars'.
if (set_chars_option(curwin, &p_fcs, FALSE) != NULL)
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;
}
}
}
// Check that the new value does not conflict with 'listchars' or
// 'fillchars'.
error = check_chars_options();
if (error != NULL)
{
emsg(_(error));
Expand Down
18 changes: 1 addition & 17 deletions src/optionstr.c
Original file line number Diff line number Diff line change
Expand Up @@ -866,24 +866,8 @@ did_set_string_option(
{
if (check_opt_strings(p_ambw, p_ambw_values, FALSE) != OK)
errmsg = e_invalid_argument;
else if (set_chars_option(curwin, &p_fcs, FALSE) != NULL)
errmsg = e_conflicts_with_value_of_fillchars;
else
{
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:
{}
errmsg = check_chars_options();
}

// 'background'
Expand Down
1 change: 1 addition & 0 deletions src/proto/screen.pro
Original file line number Diff line number Diff line change
Expand Up @@ -56,4 +56,5 @@ int number_width(win_T *wp);
int screen_screencol(void);
int screen_screenrow(void);
char *set_chars_option(win_T *wp, char_u **varp, int apply);
char *check_chars_options(void);
/* vim: set ft=c : */
25 changes: 25 additions & 0 deletions src/screen.c
Original file line number Diff line number Diff line change
Expand Up @@ -5155,3 +5155,28 @@ set_chars_option(win_T *wp, char_u **varp, int apply)

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;
}
12 changes: 10 additions & 2 deletions src/testdir/test_options.vim
Original file line number Diff line number Diff line change
Expand Up @@ -466,9 +466,17 @@ func Test_set_errors()
call assert_fails('set sessionoptions=curdir,sesdir', 'E474:')
call assert_fails('set foldmarker={{{,', '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&
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&
call assert_fails('set fileencoding=latin1,utf-8', 'E474:')
set nomodifiable
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Original file line number Diff line number Diff line change
Expand Up @@ -735,6 +735,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
176,
/**/
175,
/**/
Expand Down

0 comments on commit 8ca29b6

Please sign in to comment.