0
0
mirror of https://github.com/vim/vim.git synced 2025-09-25 03:54:15 -04:00

patch 9.1.0004: reloading colorscheme when not changing 'background'

Problem:  reloading colorscheme when not changing 'background'
Solution: Check, if the background option value actually changed,
          if not, return early.

Only reload colorscheme when bg is changed

Currently the highlight groups are re-initialized and the colorscheme
(if any) is reloaded anytime 'background' is set, even if it is not
changed. This is unnecessary, because if the value was not changed then
there is no need to change highlight groups or do anything with the
colorscheme. Instead, only reload the colorscheme if the value of
'background' was actually changed.

closes: #13700

Signed-off-by: Gregory Anders <greg@gpanders.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Gregory Anders
2024-01-03 19:48:51 +01:00
committed by Christian Brabandt
parent 443657b32b
commit 83ad2726ff
3 changed files with 12 additions and 6 deletions

View File

@@ -1,4 +1,4 @@
*options.txt* For Vim version 9.1. Last change: 2023 Dec 20 *options.txt* For Vim version 9.1. Last change: 2024 Jan 03
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -997,11 +997,11 @@ A jump table for the options with a short description can be found at |Q_op|.
what the background color looks like. For changing the background what the background color looks like. For changing the background
color, see |:hi-normal|. color, see |:hi-normal|.
When 'background' is set Vim will adjust the default color groups for When 'background' is changed Vim will adjust the default color groups
the new value. But the colors used for syntax highlighting will not for the new value. But the colors used for syntax highlighting will
change. *g:colors_name* not change. *g:colors_name*
When a color scheme is loaded (the "g:colors_name" variable is set) When a color scheme is loaded (the "g:colors_name" variable is set)
setting 'background' will cause the color scheme to be reloaded. If changing 'background' will cause the color scheme to be reloaded. If
the color scheme adjusts to the value of 'background' this will work. the color scheme adjusts to the value of 'background' this will work.
However, if the color scheme sets 'background' itself the effect may However, if the color scheme sets 'background' itself the effect may
be undone. First delete the "g:colors_name" variable when needed. be undone. First delete the "g:colors_name" variable when needed.

View File

@@ -1050,11 +1050,15 @@ expand_set_ambiwidth(optexpand_T *args, int *numMatches, char_u ***matches)
* The 'background' option is changed. * The 'background' option is changed.
*/ */
char * char *
did_set_background(optset_T *args UNUSED) did_set_background(optset_T *args)
{ {
if (check_opt_strings(p_bg, p_bg_values, FALSE) == FAIL) if (check_opt_strings(p_bg, p_bg_values, FALSE) == FAIL)
return e_invalid_argument; return e_invalid_argument;
if (args->os_oldval.string != NULL && args->os_oldval.string[0] == *p_bg)
// Value was not changed
return NULL;
#ifdef FEAT_EVAL #ifdef FEAT_EVAL
int dark = (*p_bg == 'd'); int dark = (*p_bg == 'd');
#endif #endif

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 */
/**/
4,
/**/ /**/
3, 3,
/**/ /**/