To: vim_dev@googlegroups.com Subject: Patch 8.2.1705 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.1705 Problem: "verbose hi Name" reports incorrect info after ":hi clear". Solution: Store the script context. (Antony Scriven, closes #6975) Files: src/highlight.c, src/testdir/test_highlight.vim *** ../vim-8.2.1704/src/highlight.c 2020-09-17 19:59:20.520623502 +0200 --- src/highlight.c 2020-09-18 18:22:54.772033221 +0200 *************** *** 76,81 **** --- 76,82 ---- int sg_deflink; // default link; restored in highlight_clear() int sg_set; // combination of SG_* flags #ifdef FEAT_EVAL + sctx_T sg_deflink_sctx; // script where the default link was set sctx_T sg_script_ctx; // script in which the group was last set #endif } hl_group_T; *************** *** 746,752 **** --- 747,759 ---- { hlgroup = &HL_TABLE()[from_id - 1]; if (dodefault && (forceit || hlgroup->sg_deflink == 0)) + { hlgroup->sg_deflink = to_id; + #ifdef FEAT_EVAL + hlgroup->sg_deflink_sctx = current_sctx; + hlgroup->sg_deflink_sctx.sc_lnum += SOURCING_LNUM; + #endif + } } if (from_id > 0 && (!init || hlgroup->sg_set == 0)) *************** *** 1691,1706 **** VIM_CLEAR(HL_TABLE()[idx].sg_font_name); HL_TABLE()[idx].sg_gui_attr = 0; #endif ! #ifdef FEAT_EVAL ! // Restore any default link. HL_TABLE()[idx].sg_link = HL_TABLE()[idx].sg_deflink; ! // Clear the script ID only when there is no link, since that is not ! // cleared. ! if (HL_TABLE()[idx].sg_link == 0) ! { ! HL_TABLE()[idx].sg_script_ctx.sc_sid = 0; ! HL_TABLE()[idx].sg_script_ctx.sc_lnum = 0; ! } #endif } --- 1698,1709 ---- VIM_CLEAR(HL_TABLE()[idx].sg_font_name); HL_TABLE()[idx].sg_gui_attr = 0; #endif ! // Restore default link and context if they exist. Otherwise clears. HL_TABLE()[idx].sg_link = HL_TABLE()[idx].sg_deflink; ! #ifdef FEAT_EVAL ! // Since we set the default link, set the location to where the default ! // link was set. ! HL_TABLE()[idx].sg_script_ctx = HL_TABLE()[idx].sg_deflink_sctx; #endif } *** ../vim-8.2.1704/src/testdir/test_highlight.vim 2020-09-17 19:59:20.520623502 +0200 --- src/testdir/test_highlight.vim 2020-09-18 18:18:05.862083905 +0200 *************** *** 3,8 **** --- 3,9 ---- source view_util.vim source screendump.vim source check.vim + source script_util.vim func Test_highlight() " basic test if ":highlight" doesn't crash *************** *** 870,875 **** --- 871,909 ---- call assert_equal(HighlightArgs('aaa'), hl_aaa_ddd) endfunc + func Test_highlight_clear_restores_context() + func FuncContextDefault() + hi def link Context ContextDefault + endfun + + func FuncContextRelink() + " Dummy line + hi link Context ContextRelink + endfunc + + let scriptContextDefault = MakeScript("FuncContextDefault") + let scriptContextRelink = MakeScript("FuncContextRelink") + let patContextDefault = fnamemodify(scriptContextDefault, ':t') .. ' line 1' + let patContextRelink = fnamemodify(scriptContextRelink, ':t') .. ' line 2' + + exec "source" scriptContextDefault + let hlContextDefault = execute("verbose hi Context") + call assert_match(patContextDefault, hlContextDefault) + + exec "source" scriptContextRelink + let hlContextRelink = execute("verbose hi Context") + call assert_match(patContextRelink, hlContextRelink) + + hi clear + let hlContextAfterClear = execute("verbose hi Context") + call assert_match(patContextDefault, hlContextAfterClear) + + delfunc FuncContextDefault + delfunc FuncContextRelink + call delete(scriptContextDefault) + call delete(scriptContextRelink) + endfunc + func Test_highlight_default_colorscheme_restores_links() hi link TestLink Identifier hi TestHi ctermbg=red *** ../vim-8.2.1704/src/version.c 2020-09-17 21:28:59.943951831 +0200 --- src/version.c 2020-09-18 18:21:07.612762350 +0200 *************** *** 752,753 **** --- 752,755 ---- { /* Add new patch number below this line */ + /**/ + 1705, /**/ -- SOLDIER: What? Ridden on a horse? ARTHUR: Yes! SOLDIER: You're using coconuts! "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///