diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/option.c | 175 |
1 files changed, 101 insertions, 74 deletions
diff --git a/src/nvim/option.c b/src/nvim/option.c index f622efeb0b..248b5205ec 100644 --- a/src/nvim/option.c +++ b/src/nvim/option.c @@ -4004,9 +4004,7 @@ static char *set_num_option(int opt_idx, char_u *varp, long value, curbuf->b_p_sw = curbuf->b_p_ts; } - /* - * Number options that need some action when changed - */ + // Number options that need some validation when changed. if (pp == &p_wh || pp == &p_hh) { if (p_wh < 1) { errmsg = e_positive; @@ -4020,14 +4018,6 @@ static char *set_num_option(int opt_idx, char_u *varp, long value, errmsg = e_positive; p_hh = 0; } - - /* Change window height NOW */ - if (lastwin != firstwin) { - if (pp == &p_wh && curwin->w_height < p_wh) - win_setheight((int)p_wh); - if (pp == &p_hh && curbuf->b_help && curwin->w_height < p_hh) - win_setheight((int)p_hh); - } } /* 'winminheight' */ else if (pp == &p_wmh) { @@ -4039,7 +4029,6 @@ static char *set_num_option(int opt_idx, char_u *varp, long value, errmsg = e_winheight; p_wmh = p_wh; } - win_setminheight(); } else if (pp == &p_wiw) { if (p_wiw < 1) { errmsg = e_positive; @@ -4049,10 +4038,6 @@ static char *set_num_option(int opt_idx, char_u *varp, long value, errmsg = e_winwidth; p_wiw = p_wmw; } - - /* Change window width NOW */ - if (lastwin != firstwin && curwin->w_width < p_wiw) - win_setwidth((int)p_wiw); } /* 'winminwidth' */ else if (pp == &p_wmw) { @@ -4064,29 +4049,11 @@ static char *set_num_option(int opt_idx, char_u *varp, long value, errmsg = e_winwidth; p_wmw = p_wiw; } - win_setminheight(); - } else if (pp == &p_ls) { - /* (re)set last window status line */ - last_status(false); - } - /* (re)set tab page line */ - else if (pp == &p_stal) { - shell_new_rows(); /* recompute window positions and heights */ } /* 'foldlevel' */ else if (pp == &curwin->w_p_fdl) { if (curwin->w_p_fdl < 0) curwin->w_p_fdl = 0; - newFoldLevel(); - } - /* 'foldminlines' */ - else if (pp == &curwin->w_p_fml) { - foldUpdateAll(curwin); - } - /* 'foldnestmax' */ - else if (pp == &curwin->w_p_fdn) { - if (foldmethodIsSyntax(curwin) || foldmethodIsIndent(curwin)) - foldUpdateAll(curwin); } /* 'foldcolumn' */ else if (pp == &curwin->w_p_fdc) { @@ -4097,16 +4064,6 @@ static char *set_num_option(int opt_idx, char_u *varp, long value, errmsg = e_invarg; curwin->w_p_fdc = 12; } - // 'shiftwidth' or 'tabstop' - } else if (pp == &curbuf->b_p_sw || pp == (long *)&curbuf->b_p_ts) { - if (foldmethodIsIndent(curwin)) { - foldUpdateAll(curwin); - } - // When 'shiftwidth' changes, or it's zero and 'tabstop' changes: - // parse 'cinoptions'. - if (pp == &curbuf->b_p_sw || curbuf->b_p_sw == 0) { - parse_cino(curbuf); - } } /* 'maxcombine' */ else if (pp == &p_mco) { @@ -4114,15 +4071,11 @@ static char *set_num_option(int opt_idx, char_u *varp, long value, p_mco = MAX_MCO; else if (p_mco < 0) p_mco = 0; - screenclear(); /* will re-allocate the screen */ } else if (pp == &curbuf->b_p_iminsert) { if (curbuf->b_p_iminsert < 0 || curbuf->b_p_iminsert > B_IMODE_LAST) { errmsg = e_invarg; curbuf->b_p_iminsert = B_IMODE_NONE; } - showmode(); - /* Show/unshow value of 'keymap' in status lines. */ - status_redraw_curbuf(); } else if (pp == &p_window) { if (p_window < 1) p_window = 1; @@ -4140,8 +4093,6 @@ static char *set_num_option(int opt_idx, char_u *varp, long value, errmsg = e_positive; p_titlelen = 85; } - if (starting != NO_SCREEN && old_value != p_titlelen) - need_maketitle = TRUE; } /* if p_ch changed value, change the command line height */ else if (pp == &p_ch) { @@ -4151,12 +4102,6 @@ static char *set_num_option(int opt_idx, char_u *varp, long value, } if (p_ch > Rows - min_rows() + 1) p_ch = Rows - min_rows() + 1; - - /* Only compute the new window layout when startup has been - * completed. Otherwise the frame sizes may be wrong. */ - if (p_ch != old_value && full_screen - ) - command_height(); } /* when 'updatecount' changes from zero to non-zero, open swap files */ else if (pp == &p_uc) { @@ -4164,8 +4109,6 @@ static char *set_num_option(int opt_idx, char_u *varp, long value, errmsg = e_positive; p_uc = 100; } - if (p_uc && !old_value) - ml_open_files(); } else if (pp == &curwin->w_p_cole) { if (curwin->w_p_cole < 0) { errmsg = e_positive; @@ -4175,18 +4118,6 @@ static char *set_num_option(int opt_idx, char_u *varp, long value, curwin->w_p_cole = 3; } } - /* sync undo before 'undolevels' changes */ - else if (pp == &p_ul) { - /* use the old value, otherwise u_sync() may not work properly */ - p_ul = old_value; - u_sync(TRUE); - p_ul = value; - } else if (pp == &curbuf->b_p_ul) { - /* use the old value, otherwise u_sync() may not work properly */ - curbuf->b_p_ul = old_value; - u_sync(TRUE); - curbuf->b_p_ul = value; - } /* 'numberwidth' must be positive */ else if (pp == &curwin->w_p_nuw) { if (curwin->w_p_nuw < 1) { @@ -4203,10 +4134,6 @@ static char *set_num_option(int opt_idx, char_u *varp, long value, errmsg = e_positive; curbuf->b_p_tw = 0; } - - FOR_ALL_TAB_WINDOWS(tp, wp) { - check_colorcolumn(wp); - } } else if (pp == &curbuf->b_p_scbk || pp == &p_scbk) { // 'scrollback' if (*pp < -1 || *pp > SB_MAX @@ -4219,6 +4146,106 @@ static char *set_num_option(int opt_idx, char_u *varp, long value, } } + // Number options that need some action when changed + if (pp == &p_wh || pp == &p_hh) { + /* Change window height NOW */ + if (lastwin != firstwin) { + if (pp == &p_wh && curwin->w_height < p_wh) + win_setheight((int)p_wh); + if (pp == &p_hh && curbuf->b_help && curwin->w_height < p_hh) + win_setheight((int)p_hh); + } + } + else if (pp == &p_wmh) { + win_setminheight(); + } else if (pp == &p_wiw) { + /* Change window width NOW */ + if (lastwin != firstwin && curwin->w_width < p_wiw) + win_setwidth((int)p_wiw); + } + else if (pp == &p_wmw) { + win_setminheight(); + } else if (pp == &p_ls) { + /* (re)set last window status line */ + last_status(false); + } + /* (re)set tab page line */ + else if (pp == &p_stal) { + shell_new_rows(); /* recompute window positions and heights */ + } + else if (pp == &curwin->w_p_fdl) { + newFoldLevel(); + } + /* 'foldminlines' */ + else if (pp == &curwin->w_p_fml) { + foldUpdateAll(curwin); + } + /* 'foldnestmax' */ + else if (pp == &curwin->w_p_fdn) { + if (foldmethodIsSyntax(curwin) || foldmethodIsIndent(curwin)) + foldUpdateAll(curwin); + // 'shiftwidth' or 'tabstop' + } else if (pp == &curbuf->b_p_sw || pp == (long *)&curbuf->b_p_ts) { + if (foldmethodIsIndent(curwin)) { + foldUpdateAll(curwin); + } + // When 'shiftwidth' changes, or it's zero and 'tabstop' changes: + // parse 'cinoptions'. + if (pp == &curbuf->b_p_sw || curbuf->b_p_sw == 0) { + parse_cino(curbuf); + } + } + /* 'maxcombine' */ + else if (pp == &p_mco) { + screenclear(); /* will re-allocate the screen */ + } else if (pp == &curbuf->b_p_iminsert) { + showmode(); + /* Show/unshow value of 'keymap' in status lines. */ + status_redraw_curbuf(); + } + /* if 'titlelen' has changed, redraw the title */ + else if (pp == &p_titlelen) { + if (starting != NO_SCREEN && old_value != p_titlelen) + need_maketitle = TRUE; + } + /* if p_ch changed value, change the command line height */ + else if (pp == &p_ch) { + + /* Only compute the new window layout when startup has been + * completed. Otherwise the frame sizes may be wrong. */ + if (p_ch != old_value && full_screen + ) + command_height(); + } + /* when 'updatecount' changes from zero to non-zero, open swap files */ + else if (pp == &p_uc) { + if (p_uc && !old_value) + ml_open_files(); + } + /* sync undo before 'undolevels' changes */ + else if (pp == &p_ul) { + /* use the old value, otherwise u_sync() may not work properly */ + p_ul = old_value; + u_sync(TRUE); + p_ul = value; + } else if (pp == &curbuf->b_p_ul) { + /* use the old value, otherwise u_sync() may not work properly */ + curbuf->b_p_ul = old_value; + u_sync(TRUE); + curbuf->b_p_ul = value; + } else if (pp == &curbuf->b_p_tw) { + FOR_ALL_TAB_WINDOWS(tp, wp) { + check_colorcolumn(wp); + } + } + else if (pp == &curbuf->b_p_scbk || pp == &p_scbk) { + if (curbuf->terminal) { + // Force the scrollback to take effect. + terminal_resize(curbuf->terminal, UINT16_MAX, UINT16_MAX); + } + } + + /* * Check the bounds for numeric options here */ |