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:
parent
afa23d1b99
commit
8ca29b6a35
28
src/mbyte.c
28
src/mbyte.c
@ -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));
|
||||
|
@ -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'
|
||||
|
@ -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
src/screen.c
25
src/screen.c
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -735,6 +735,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
176,
|
||||
/**/
|
||||
175,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user