Mercurial > vim
changeset 36372:c794f77cbba5 draft v9.1.0806
patch 9.1.0806: tests: no error check when setting global 'briopt'
Commit: https://github.com/vim/vim/commit/b38700ac81d90a652e5c8495056dd78df5babdde
Author: Milly <milly.ca@gmail.com>
Date: Tue Oct 22 22:59:39 2024 +0200
patch 9.1.0806: tests: no error check when setting global 'briopt'
Problem: tests: no error check when setting global 'briopt'
Solution: also parse and check global 'briopt' value (Milly)
closes: #15911
Signed-off-by: Milly <milly.ca@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Tue, 22 Oct 2024 23:15:05 +0200 |
parents | 3f2ff7e42613 |
children | 7359e1045c43 |
files | src/indent.c src/option.c src/optionstr.c src/proto/indent.pro src/testdir/gen_opt_test.vim src/version.c |
diffstat | 6 files changed, 27 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/src/indent.c +++ b/src/indent.c @@ -869,11 +869,15 @@ get_number_indent(linenr_T lnum) #if defined(FEAT_LINEBREAK) || defined(PROTO) /* + * Check "briopt" as 'breakindentopt' and update the members of "wp". * This is called when 'breakindentopt' is changed and when a window is * initialized. + * Returns FAIL for failure, OK otherwise. */ int -briopt_check(win_T *wp) +briopt_check( + char_u *briopt, // when NULL: use "wp->w_p_briopt" + win_T *wp) // when NULL: only check "briopt" { char_u *p; int bri_shift = 0; @@ -882,7 +886,11 @@ briopt_check(win_T *wp) int bri_list = 0; int bri_vcol = 0; - p = wp->w_p_briopt; + if (briopt != NULL) + p = briopt; + else + p = wp->w_p_briopt; + while (*p != NUL) { // Note: Keep this in sync with p_briopt_values @@ -918,6 +926,9 @@ briopt_check(win_T *wp) ++p; } + if (wp == NULL) + return OK; + wp->w_briopt_shift = bri_shift; wp->w_briopt_min = bri_min; wp->w_briopt_sbr = bri_sbr;
--- a/src/option.c +++ b/src/option.c @@ -6751,7 +6751,7 @@ after_copy_winopt(win_T *wp) else wp->w_skipcol = 0; #ifdef FEAT_LINEBREAK - briopt_check(wp); + briopt_check(NULL, wp); #endif #ifdef FEAT_SYN_HL fill_culopt_flags(NULL, wp);
--- a/src/optionstr.c +++ b/src/optionstr.c @@ -1235,17 +1235,19 @@ did_set_breakat(optset_T *args UNUSED) * The 'breakindentopt' option is changed. */ char * -did_set_breakindentopt(optset_T *args UNUSED) -{ - char *errmsg = NULL; - - if (briopt_check(curwin) == FAIL) - errmsg = e_invalid_argument; +did_set_breakindentopt(optset_T *args) +{ + char_u **varp = (char_u **)args->os_varp; + + if (briopt_check(*varp, varp == &curwin->w_p_briopt ? curwin : NULL) + == FAIL) + return e_invalid_argument; + // list setting requires a redraw - if (curwin->w_briopt_list) + if (varp == &curwin->w_p_briopt && curwin->w_briopt_list) redraw_all_later(UPD_NOT_VALID); - return errmsg; + return NULL; } int
--- a/src/proto/indent.pro +++ b/src/proto/indent.pro @@ -18,7 +18,7 @@ int get_indent_str(char_u *ptr, int ts, int get_indent_str_vtab(char_u *ptr, int ts, int *vts, int no_ts); int set_indent(int size, int flags); int get_number_indent(linenr_T lnum); -int briopt_check(win_T *wp); +int briopt_check(char_u *briopt, win_T *wp); int get_breakindent_win(win_T *wp, char_u *line); int inindent(int extra); void op_reindent(oparg_T *oap, int (*how)(void));
--- a/src/testdir/gen_opt_test.vim +++ b/src/testdir/gen_opt_test.vim @@ -45,7 +45,6 @@ endwhile let skip_setglobal_reasons = #{ \ iminsert: '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', \ conceallevel: 'TODO: fix missing error handling for setglobal', \ foldcolumn: 'TODO: fix missing error handling for setglobal', \ numberwidth: 'TODO: fix missing error handling for setglobal',