]> granicus.if.org Git - vim/commitdiff
patch 8.0.1777: cannot cleanup before loading another colorscheme v8.0.1777
authorBram Moolenaar <Bram@vim.org>
Mon, 30 Apr 2018 13:40:48 +0000 (15:40 +0200)
committerBram Moolenaar <Bram@vim.org>
Mon, 30 Apr 2018 13:40:48 +0000 (15:40 +0200)
Problem:    Cannot cleanup before loading another colorscheme.
Solution:   Add the ColorSchemePre autocommand event.

runtime/colors/README.txt
src/fileio.c
src/syntax.c
src/testdir/test_gui.vim
src/version.c
src/vim.h

index a435c2dd1976f2c04dc77ad0a367a0b60db83d71..4511748daf14ac4eb9a7e119dd4c5192aa0b9ddc 100644 (file)
@@ -42,7 +42,16 @@ this autocmd might be useful:
 Replace "blue_sky" with the name of the colorscheme.
 
 In case you want to tweak a colorscheme after it was loaded, check out the
-ColorScheme autocmd event.
+ColorScheme autocommand event.
+
+To clean up just before loading another colorscheme, use the ColorSchemePre
+autocommand event.  For example:
+       let g:term_ansi_colors = ...
+       augroup MyColorscheme
+         au!
+         au ColorSchemePre * unlet g:term_ansi_colors
+         au ColorSchemePre * au! MyColorscheme
+       augroup END
 
 To customize a colorscheme use another name, e.g.  "~/.vim/colors/mine.vim",
 and use `:runtime` to load the original colorscheme:
index 6b48c39d3220bce446e31cc2891a596d197badca..63cc61c43244953302b7f02354acf21d5bfab46f 100644 (file)
@@ -7734,6 +7734,7 @@ static struct event_name
     {"CmdwinLeave",    EVENT_CMDWINLEAVE},
     {"CmdUndefined",   EVENT_CMDUNDEFINED},
     {"ColorScheme",    EVENT_COLORSCHEME},
+    {"ColorSchemePre", EVENT_COLORSCHEMEPRE},
     {"CompleteDone",   EVENT_COMPLETEDONE},
     {"CursorHold",     EVENT_CURSORHOLD},
     {"CursorHoldI",    EVENT_CURSORHOLDI},
@@ -9479,7 +9480,8 @@ apply_autocmds_group(
      */
     if (fname_io == NULL)
     {
-       if (event == EVENT_COLORSCHEME || event == EVENT_OPTIONSET)
+       if (event == EVENT_COLORSCHEME || event == EVENT_COLORSCHEMEPRE
+                                                  || event == EVENT_OPTIONSET)
            autocmd_fname = NULL;
        else if (fname != NULL && !ends_excmd(*fname))
            autocmd_fname = fname;
@@ -9549,6 +9551,7 @@ apply_autocmds_group(
                || event == EVENT_SPELLFILEMISSING
                || event == EVENT_QUICKFIXCMDPRE
                || event == EVENT_COLORSCHEME
+               || event == EVENT_COLORSCHEMEPRE
                || event == EVENT_OPTIONSET
                || event == EVENT_QUICKFIXCMDPOST
                || event == EVENT_DIRCHANGED)
index e945dac04549ce9cf89eeed62a21c666cb960ed6..bb695b573493953b77bcbc42bc82390a9afb0bf1 100644 (file)
@@ -7224,6 +7224,8 @@ load_colors(char_u *name)
     buf = alloc((unsigned)(STRLEN(name) + 12));
     if (buf != NULL)
     {
+       apply_autocmds(EVENT_COLORSCHEMEPRE, name,
+                                              curbuf->b_fname, FALSE, curbuf);
        sprintf((char *)buf, "colors/%s.vim", name);
        retval = source_runtime(buf, DIP_START + DIP_OPT);
        vim_free(buf);
index 50a629b2ee26ff9120f2a6de0d06170b0f6e0189..9d8a36f188bdc9627fadaa69fbb0bfac4b3301bf 100644 (file)
@@ -33,13 +33,25 @@ endfunc
 
 func Test_colorscheme()
   let colorscheme_saved = exists('g:colors_name') ? g:colors_name : 'default'
+  let g:color_count = 0
+  augroup TestColors
+    au!
+    au ColorScheme * let g:color_count += 1| let g:after_colors = g:color_count
+    au ColorSchemePre * let g:color_count += 1 |let g:before_colors = g:color_count
+  augroup END
 
   colorscheme torte
   redraw!
   sleep 200m
   call assert_equal('dark', &background)
+  call assert_equal(1, g:before_colors)
+  call assert_equal(2, g:after_colors)
 
   exec 'colorscheme' colorscheme_saved
+  augroup TestColors
+    au!
+  augroup END
+  unlet g:color_count g:after_colors g:before_colors
   redraw!
 endfunc
 
index 9881dae868d382d0f5d6b65da50f79867af30d9b..d6be02f0a1207e1e7b3016138d6ac06aa68bcd13 100644 (file)
@@ -761,6 +761,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1777,
 /**/
     1776,
 /**/
index af01f1a51b04d98ea47f3ca0080191fc1236b0e2..0a4a4901866241da2f104fc10a88a90f6727603d 100644 (file)
--- a/src/vim.h
+++ b/src/vim.h
@@ -1277,6 +1277,7 @@ enum auto_event
     EVENT_CMDWINENTER,         /* after entering the cmdline window */
     EVENT_CMDWINLEAVE,         /* before leaving the cmdline window */
     EVENT_COLORSCHEME,         /* after loading a colorscheme */
+    EVENT_COLORSCHEMEPRE,      /* before loading a colorscheme */
     EVENT_COMPLETEDONE,                /* after finishing insert complete */
     EVENT_CURSORHOLD,          /* cursor in same position for a while */
     EVENT_CURSORHOLDI,         /* idem, in Insert mode */