1
0
forked from aniani/vim

patch 9.1.0804: tests: no error check when setting global 'cc'

Problem:  tests: no error check when setting global 'cc'
Solution: also parse and check global 'cc' value (Milly)

closes: #15914

Signed-off-by: Milly <milly.ca@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Milly 2024-10-22 22:43:01 +02:00 committed by Christian Brabandt
parent 5e7a6a4a10
commit a441a3eaab
No known key found for this signature in database
GPG Key ID: F3F92DA383FDDE09
7 changed files with 36 additions and 15 deletions

View File

@ -214,7 +214,7 @@ open_buffer(
enter_buffer(curbuf); enter_buffer(curbuf);
#ifdef FEAT_SYN_HL #ifdef FEAT_SYN_HL
if (old_tw != curbuf->b_p_tw) if (old_tw != curbuf->b_p_tw)
check_colorcolumn(curwin); check_colorcolumn(NULL, curwin);
#endif #endif
return FAIL; return FAIL;
} }
@ -1213,7 +1213,7 @@ handle_swap_exists(bufref_T *old_curbuf)
#ifdef FEAT_SYN_HL #ifdef FEAT_SYN_HL
if (old_tw != curbuf->b_p_tw) if (old_tw != curbuf->b_p_tw)
check_colorcolumn(curwin); check_colorcolumn(NULL, curwin);
#endif #endif
} }
// If "old_curbuf" is NULL we are in big trouble here... // If "old_curbuf" is NULL we are in big trouble here...
@ -1911,7 +1911,7 @@ set_curbuf(buf_T *buf, int action)
enter_buffer(buf); enter_buffer(buf);
#ifdef FEAT_SYN_HL #ifdef FEAT_SYN_HL
if (old_tw != curbuf->b_p_tw) if (old_tw != curbuf->b_p_tw)
check_colorcolumn(curwin); check_colorcolumn(NULL, curwin);
#endif #endif
} }
} }

View File

@ -4328,7 +4328,7 @@ did_set_textwidth(optset_T *args UNUSED)
tabpage_T *tp; tabpage_T *tp;
FOR_ALL_TAB_WINDOWS(tp, wp) FOR_ALL_TAB_WINDOWS(tp, wp)
check_colorcolumn(wp); check_colorcolumn(NULL, wp);
} }
#endif #endif
@ -6755,7 +6755,7 @@ after_copy_winopt(win_T *wp)
#endif #endif
#ifdef FEAT_SYN_HL #ifdef FEAT_SYN_HL
fill_culopt_flags(NULL, wp); fill_culopt_flags(NULL, wp);
check_colorcolumn(wp); check_colorcolumn(NULL, wp);
#endif #endif
set_listchars_option(wp, wp->w_p_lcs, TRUE, NULL, 0); set_listchars_option(wp, wp->w_p_lcs, TRUE, NULL, 0);
set_fillchars_option(wp, wp->w_p_fcs, TRUE, NULL, 0); set_fillchars_option(wp, wp->w_p_fcs, TRUE, NULL, 0);

View File

@ -1478,9 +1478,11 @@ did_set_cinoptions(optset_T *args UNUSED)
* The 'colorcolumn' option is changed. * The 'colorcolumn' option is changed.
*/ */
char * char *
did_set_colorcolumn(optset_T *args UNUSED) did_set_colorcolumn(optset_T *args)
{ {
return check_colorcolumn(curwin); char_u **varp = (char_u **)args->os_varp;
return check_colorcolumn(*varp, varp == &curwin->w_p_cc ? curwin : NULL);
} }
#endif #endif

View File

@ -98,7 +98,7 @@ void restore_snapshot(int idx, int close_curwin);
int win_hasvertsplit(void); int win_hasvertsplit(void);
int get_win_number(win_T *wp, win_T *first_win); int get_win_number(win_T *wp, win_T *first_win);
int get_tab_number(tabpage_T *tp); int get_tab_number(tabpage_T *tp);
char *check_colorcolumn(win_T *wp); char *check_colorcolumn(char_u *cc, win_T *wp);
int get_last_winid(void); int get_last_winid(void);
int win_locked(win_T *wp); int win_locked(win_T *wp);
/* vim: set ft=c : */ /* vim: set ft=c : */

View File

@ -46,7 +46,6 @@ let skip_setglobal_reasons = #{
\ iminsert: 'The global value is always overwritten by the local value', \ iminsert: 'The global value is always overwritten by the local value',
\ imsearch: 'The global value is always overwritten by the local value', \ imsearch: 'The global value is always overwritten by the local value',
\ breakindentopt: 'TODO: fix missing error handling for setglobal', \ breakindentopt: 'TODO: fix missing error handling for setglobal',
\ colorcolumn: 'TODO: fix missing error handling for setglobal',
\ conceallevel: 'TODO: fix missing error handling for setglobal', \ conceallevel: 'TODO: fix missing error handling for setglobal',
\ foldcolumn: 'TODO: fix missing error handling for setglobal', \ foldcolumn: 'TODO: fix missing error handling for setglobal',
\ numberwidth: 'TODO: fix missing error handling for setglobal', \ numberwidth: 'TODO: fix missing error handling for setglobal',

View File

@ -704,6 +704,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 */
/**/
804,
/**/ /**/
803, 803,
/**/ /**/

View File

@ -7925,23 +7925,38 @@ int_cmp(const void *pa, const void *pb)
} }
/* /*
* Handle setting 'colorcolumn' or 'textwidth' in window "wp". * Check "cc" as 'colorcolumn' and update the members of "wp".
* This is called when 'colorcolumn' or 'textwidth' is changed.
* Returns error message, NULL if it's OK. * Returns error message, NULL if it's OK.
*/ */
char * char *
check_colorcolumn(win_T *wp) check_colorcolumn(
char_u *cc, // when NULL: use "wp->w_p_cc"
win_T *wp) // when NULL: only parse "cc"
{ {
char_u *s; char_u *s;
int tw;
int col; int col;
int count = 0; int count = 0;
int color_cols[256]; int color_cols[256];
int i; int i;
int j = 0; int j = 0;
if (wp->w_buffer == NULL) if (wp != NULL && wp->w_buffer == NULL)
return NULL; // buffer was closed return NULL; // buffer was closed
for (s = wp->w_p_cc; *s != NUL && count < 255;) if (cc != NULL)
s = cc;
else
s = wp->w_p_cc;
if (wp != NULL)
tw = wp->w_buffer->b_p_tw;
else
// buffer-local value not set, assume zero
tw = 0;
while (*s != NUL && count < 255)
{ {
if (*s == '-' || *s == '+') if (*s == '-' || *s == '+')
{ {
@ -7951,9 +7966,9 @@ check_colorcolumn(win_T *wp)
if (!VIM_ISDIGIT(*s)) if (!VIM_ISDIGIT(*s))
return e_invalid_argument; return e_invalid_argument;
col = col * getdigits(&s); col = col * getdigits(&s);
if (wp->w_buffer->b_p_tw == 0) if (tw == 0)
goto skip; // 'textwidth' not set, skip this item goto skip; // 'textwidth' not set, skip this item
col += wp->w_buffer->b_p_tw; col += tw;
if (col < 0) if (col < 0)
goto skip; goto skip;
} }
@ -7971,6 +7986,9 @@ skip:
return e_invalid_argument; // illegal trailing comma as in "set cc=80," return e_invalid_argument; // illegal trailing comma as in "set cc=80,"
} }
if (wp == NULL)
return NULL; // only parse "cc"
vim_free(wp->w_p_cc_cols); vim_free(wp->w_p_cc_cols);
if (count == 0) if (count == 0)
wp->w_p_cc_cols = NULL; wp->w_p_cc_cols = NULL;