# HG changeset patch # User Bram Moolenaar # Date 1383881420 -3600 # Node ID 6ae816249627b34aee618b49c4169b7ca1f54ff3 # Parent 59d9ccde8b566ccbc48619e0f8b3465714c9a018 updated for version 7.4.079 Problem: A script cannot detect whether 'hlsearch' highlighting is actually displayed. Solution: Add the "v:hlsearch" variable. (ZyX) diff --git a/src/eval.c b/src/eval.c --- a/src/eval.c +++ b/src/eval.c @@ -356,6 +356,7 @@ static struct vimvar {VV_NAME("mouse_col", VAR_NUMBER), 0}, {VV_NAME("operator", VAR_STRING), VV_RO}, {VV_NAME("searchforward", VAR_NUMBER), 0}, + {VV_NAME("hlsearch", VAR_NUMBER), 0}, {VV_NAME("oldfiles", VAR_LIST), 0}, {VV_NAME("windowid", VAR_NUMBER), VV_RO}, }; @@ -871,6 +872,7 @@ eval_init() hash_add(&compat_hashtab, p->vv_di.di_key); } set_vim_var_nr(VV_SEARCHFORWARD, 1L); + set_vim_var_nr(VV_HLSEARCH, 1L); set_reg_var(0); /* default for v:register is not 0 but '"' */ #ifdef EBCDIC @@ -20613,6 +20615,13 @@ set_var(name, tv, copy) v->di_tv.vval.v_number = get_tv_number(tv); if (STRCMP(varname, "searchforward") == 0) set_search_direction(v->di_tv.vval.v_number ? '/' : '?'); +#ifdef FEAT_SEARCH_EXTRA + else if (STRCMP(varname, "hlsearch") == 0) + { + no_hlsearch = !v->di_tv.vval.v_number; + redraw_all_later(SOME_VALID); + } +#endif } return; } diff --git a/src/ex_docmd.c b/src/ex_docmd.c --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -11389,7 +11389,7 @@ ex_set(eap) ex_nohlsearch(eap) exarg_T *eap UNUSED; { - no_hlsearch = TRUE; + SET_NO_HLSEARCH(TRUE); redraw_all_later(SOME_VALID); } diff --git a/src/option.c b/src/option.c --- a/src/option.c +++ b/src/option.c @@ -7811,7 +7811,7 @@ set_bool_option(opt_idx, varp, value, op /* when 'hlsearch' is set or reset: reset no_hlsearch */ else if ((int *)varp == &p_hls) { - no_hlsearch = FALSE; + SET_NO_HLSEARCH(FALSE); } #endif diff --git a/src/screen.c b/src/screen.c --- a/src/screen.c +++ b/src/screen.c @@ -7447,7 +7447,7 @@ next_search_hl(win, shl, lnum, mincol) { /* don't free regprog in the match list, it's a copy */ vim_regfree(shl->rm.regprog); - no_hlsearch = TRUE; + SET_NO_HLSEARCH(TRUE); } shl->rm.regprog = NULL; shl->lnum = 0; diff --git a/src/search.c b/src/search.c --- a/src/search.c +++ b/src/search.c @@ -289,7 +289,7 @@ save_re_pat(idx, pat, magic) /* If 'hlsearch' set and search pat changed: need redraw. */ if (p_hls) redraw_all_later(SOME_VALID); - no_hlsearch = FALSE; + SET_NO_HLSEARCH(FALSE); #endif } } @@ -333,7 +333,7 @@ restore_search_patterns() spats[1] = saved_spats[1]; last_idx = saved_last_idx; # ifdef FEAT_SEARCH_EXTRA - no_hlsearch = saved_no_hlsearch; + SET_NO_HLSEARCH(saved_no_hlsearch); # endif } } @@ -1148,7 +1148,7 @@ do_search(oap, dirc, pat, count, options if (no_hlsearch && !(options & SEARCH_KEEP)) { redraw_all_later(SOME_VALID); - no_hlsearch = FALSE; + SET_NO_HLSEARCH(FALSE); } #endif @@ -5561,7 +5561,9 @@ read_viminfo_search_pattern(virp, force) spats[idx].off.off = off; #ifdef FEAT_SEARCH_EXTRA if (setlast) - no_hlsearch = !hlsearch_on; + { + SET_NO_HLSEARCH(!hlsearch_on); + } #endif } } diff --git a/src/tag.c b/src/tag.c --- a/src/tag.c +++ b/src/tag.c @@ -3330,7 +3330,9 @@ jumpto_tag(lbuf, forceit, keep_help) #ifdef FEAT_SEARCH_EXTRA /* restore no_hlsearch when keeping the old search pattern */ if (search_options) - no_hlsearch = save_no_hlsearch; + { + SET_NO_HLSEARCH(save_no_hlsearch); + } #endif /* Return OK if jumped to another file (at least we found the file!). */ diff --git a/src/testdir/Make_amiga.mak b/src/testdir/Make_amiga.mak --- a/src/testdir/Make_amiga.mak +++ b/src/testdir/Make_amiga.mak @@ -34,7 +34,7 @@ SCRIPTS = test1.out test3.out test4.out test81.out test82.out test83.out test84.out test88.out \ test89.out test90.out test91.out test92.out test93.out \ test94.out test95.out test96.out test97.out test98.out \ - test99.out test100.out + test99.out test100.out test101.out .SUFFIXES: .in .out @@ -151,3 +151,4 @@ test97.out: test97.in test98.out: test98.in test99.out: test99.in test100.out: test100.in +test101.out: test101.in diff --git a/src/testdir/Make_dos.mak b/src/testdir/Make_dos.mak --- a/src/testdir/Make_dos.mak +++ b/src/testdir/Make_dos.mak @@ -33,7 +33,7 @@ SCRIPTS = test3.out test4.out test5.out test84.out test85.out test86.out test87.out test88.out \ test89.out test90.out test91.out test92.out test93.out \ test94.out test95.out test96.out test98.out test99.out \ - test100.out + test100.out test101.out SCRIPTS32 = test50.out test70.out diff --git a/src/testdir/Make_ming.mak b/src/testdir/Make_ming.mak --- a/src/testdir/Make_ming.mak +++ b/src/testdir/Make_ming.mak @@ -53,7 +53,7 @@ SCRIPTS = test3.out test4.out test5.out test84.out test85.out test86.out test87.out test88.out \ test89.out test90.out test91.out test92.out test93.out \ test94.out test95.out test96.out test98.out test99.out \ - test100out + test100out test101.out SCRIPTS32 = test50.out test70.out diff --git a/src/testdir/Make_os2.mak b/src/testdir/Make_os2.mak --- a/src/testdir/Make_os2.mak +++ b/src/testdir/Make_os2.mak @@ -35,7 +35,7 @@ SCRIPTS = test1.out test3.out test4.out test81.out test82.out test83.out test84.out test88.out \ test89.out test90.out test91.out test92.out test93.out \ test94.out test95.out test96.out test98.out test99.out \ - test100.out + test100.out test101.out .SUFFIXES: .in .out diff --git a/src/testdir/Make_vms.mms b/src/testdir/Make_vms.mms --- a/src/testdir/Make_vms.mms +++ b/src/testdir/Make_vms.mms @@ -4,7 +4,7 @@ # Authors: Zoltan Arpadffy, # Sandor Kopanyi, # -# Last change: 2013 Nov 07 +# Last change: 2013 Nov 08 # # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64. # Edit the lines in the Configuration section below to select. @@ -79,7 +79,7 @@ SCRIPT = test1.out test2.out test3.out test82.out test83.out test84.out test88.out test89.out \ test90.out test91.out test92.out test93.out test94.out \ test95.out test96.out test97.out test98.out test99.out \ - test100.out + test100.out test101.out # Known problems: # Test 30: a problem around mac format - unknown reason diff --git a/src/testdir/Makefile b/src/testdir/Makefile --- a/src/testdir/Makefile +++ b/src/testdir/Makefile @@ -30,7 +30,7 @@ SCRIPTS = test1.out test2.out test3.out test84.out test85.out test86.out test87.out test88.out \ test89.out test90.out test91.out test92.out test93.out \ test94.out test95.out test96.out test97.out test98.out \ - test99.out test100.out + test99.out test100.out test101.out SCRIPTS_GUI = test16.out diff --git a/src/testdir/test101.in b/src/testdir/test101.in new file mode 100644 --- /dev/null +++ b/src/testdir/test101.in @@ -0,0 +1,45 @@ +Test for v:hlsearch vim: set ft=vim : + +STARTTEST +:" Last abc: Q +:so small.vim +:new +:call setline(1, repeat(['aaa'], 10)) +:set hlsearch nolazyredraw +:let r=[] +:command -nargs=0 -bar AddR :call add(r, [screenattr(1, 1), v:hlsearch]) +/aaa +:AddR +:nohlsearch +:AddR +:let v:hlsearch=1 +:AddR +:let v:hlsearch=0 +:AddR +:set hlsearch +:AddR +:let v:hlsearch=0 +:AddR +n:AddR +:let v:hlsearch=0 +:AddR +/ +:AddR +:let r1=r[0][0] +:" I guess it is not guaranteed that screenattr outputs always the same character +:call map(r, 'v:val[1].":".(v:val[0]==r1?"highlighted":"not highlighted")') +:try +: let v:hlsearch=[] +:catch +: call add(r, matchstr(v:exception,'^Vim(let):E\d\+:')) +:endtry +:bwipeout! +:$put=r +:call garbagecollect(1) +:" +:/^start:/,$wq! test.out +:" vim: et ts=4 isk-=\: +:call getchar() +ENDTEST + +start: diff --git a/src/testdir/test101.ok b/src/testdir/test101.ok new file mode 100644 --- /dev/null +++ b/src/testdir/test101.ok @@ -0,0 +1,11 @@ +start: +1:highlighted +0:not highlighted +1:highlighted +0:not highlighted +1:highlighted +0:not highlighted +1:highlighted +0:not highlighted +1:highlighted +Vim(let):E706: diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -739,6 +739,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 79, +/**/ 78, /**/ 77, diff --git a/src/vim.h b/src/vim.h --- a/src/vim.h +++ b/src/vim.h @@ -1864,9 +1864,10 @@ typedef int proftime_T; /* dummy for #define VV_MOUSE_COL 51 #define VV_OP 52 #define VV_SEARCHFORWARD 53 -#define VV_OLDFILES 54 -#define VV_WINDOWID 55 -#define VV_LEN 56 /* number of v: vars */ +#define VV_HLSEARCH 54 +#define VV_OLDFILES 55 +#define VV_WINDOWID 56 +#define VV_LEN 57 /* number of v: vars */ #ifdef FEAT_CLIPBOARD @@ -2246,4 +2247,10 @@ typedef int VimClipboard; /* This is req /* Character used as separated in autoload function/variable names. */ #define AUTOLOAD_CHAR '#' +#ifdef FEAT_EVAL +# define SET_NO_HLSEARCH(flag) no_hlsearch = (flag); set_vim_var_nr(VV_HLSEARCH, !no_hlsearch) +#else +# define SET_NO_HLSEARCH(flag) no_hlsearch = (flag) +#endif + #endif /* VIM__H */