diff options
author | Bram Moolenaar <Bram@vim.org> | 2010-06-06 16:11:09 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2010-06-06 16:11:09 +0200 |
commit | fd29f4628ed53eef3d96a09ad2d0fa504edfcdfc (patch) | |
tree | 1a25451b5be6300da150cc4dca280bffe9d523ba | |
parent | 1950c3529b16acd21ee5770b422d633f24d192a3 (diff) | |
download | vim-git-fd29f4628ed53eef3d96a09ad2d0fa504edfcdfc.tar.gz |
Fixed: after ":ownsyntax perl" and ":e" syntax was cleared in other window.
-rw-r--r-- | runtime/doc/todo.txt | 11 | ||||
-rw-r--r-- | src/buffer.c | 7 | ||||
-rw-r--r-- | src/ex_cmds.c | 3 | ||||
-rw-r--r-- | src/proto/syntax.pro | 1 | ||||
-rw-r--r-- | src/syntax.c | 16 | ||||
-rw-r--r-- | src/window.c | 12 |
6 files changed, 32 insertions, 18 deletions
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt index 549dcff48..c1999cb98 100644 --- a/runtime/doc/todo.txt +++ b/runtime/doc/todo.txt @@ -1085,9 +1085,14 @@ restored. (Luc St-Louis) Vim 7.3: - Included conceal patch. - remove w:ownsyntax, automatically set w:current_syntax to the value of - b:current_syntax after loading a syntax file. - :ownsyntax only sets w:current_syntax. + HL disappears in other window: + :sp + :ownsyntax perl + :e + Documentation update: + remove w:ownsyntax, automatically set w:current_syntax to the value of + b:current_syntax after loading a syntax file. :ownsyntax only sets + w:current_syntax. - using NSIS 2.46: install on Windows 7 works, but no "Edit with Vim" menu. Use register_shell_extension()? (George Reilly, 2010 May 26) Ron's version: http://dev.ronware.org/p/vim/finfo?name=gvim.nsi diff --git a/src/buffer.c b/src/buffer.c index cf7ecbbe9..a6878e6cd 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -1379,12 +1379,7 @@ enter_buffer(buf) #endif #ifdef FEAT_SYN_HL - if (curwin->w_s != &curwin->w_buffer->b_s) - { - /* Get rid of independant syntax */ - syntax_clear(curwin->w_s); - vim_free(curwin->w_s); - } + reset_synblock(curwin); curwin->w_s = &(buf->b_s); #endif /* Get the buffer in the current window. */ diff --git a/src/ex_cmds.c b/src/ex_cmds.c index f05a0656d..2ffaa3e21 100644 --- a/src/ex_cmds.c +++ b/src/ex_cmds.c @@ -3571,6 +3571,9 @@ do_ecmd(fnum, ffname, sfname, eap, newlnum, flags, oldwin) new_name = NULL; #endif buf_freeall(curbuf, FALSE, FALSE); /* free all things for buffer */ +#ifdef FEAT_SYN_HL + reset_synblock(curwin); /* remove any ownsyntax */ +#endif #ifdef FEAT_AUTOCMD /* If autocommands deleted the buffer we were going to re-edit, give * up and jump to the end. */ diff --git a/src/proto/syntax.pro b/src/proto/syntax.pro index 0e484cbc6..b2d63fdd7 100644 --- a/src/proto/syntax.pro +++ b/src/proto/syntax.pro @@ -6,6 +6,7 @@ void syntax_end_parsing __ARGS((linenr_T lnum)); int syntax_check_changed __ARGS((linenr_T lnum)); int get_syntax_attr __ARGS((colnr_T col, int *p_flags, int *can_spell, int keep_state)); void syntax_clear __ARGS((synblock_T *block)); +void reset_synblock __ARGS((win_T *wp)); void ex_syntax __ARGS((exarg_T *eap)); void ex_ownsyntax __ARGS((exarg_T *eap)); int syntax_present __ARGS((win_T *win)); diff --git a/src/syntax.c b/src/syntax.c index 2b70c6d45..038820923 100644 --- a/src/syntax.c +++ b/src/syntax.c @@ -3421,6 +3421,21 @@ syntax_clear(block) } /* + * Get rid of ownsyntax for window "wp". + */ + void +reset_synblock(wp) + win_T *wp; +{ + if (wp->w_s != &wp->w_buffer->b_s) + { + syntax_clear(wp->w_s); + vim_free(wp->w_s); + wp->w_s = &wp->w_buffer->b_s; + } +} + +/* * Clear syncing info for one buffer. */ static void @@ -3538,7 +3553,6 @@ syn_cmd_clear(eap, syncing) if (curwin->w_s == &curwin->w_buffer->b_s) do_unlet((char_u *)"b:current_syntax", TRUE); do_unlet((char_u *)"w:current_syntax", TRUE); - } } else diff --git a/src/window.c b/src/window.c index e878d9fab..239a8094e 100644 --- a/src/window.c +++ b/src/window.c @@ -1176,7 +1176,8 @@ win_init(newp, oldp, flags) newp->w_buffer = oldp->w_buffer; #ifdef FEAT_SYN_HL - newp->w_s = oldp->w_s; + /* TODO: use reference count? */ + newp->w_s = &(oldp->w_buffer->b_s); #endif oldp->w_buffer->b_nwindows++; newp->w_cursor = oldp->w_cursor; @@ -4408,18 +4409,13 @@ win_free(wp, tp) #endif /* FEAT_GUI */ #ifdef FEAT_SYN_HL - /* free independent synblock */ - if (wp->w_s != &wp->w_buffer->b_s) - { - syntax_clear(wp->w_s); - vim_free(wp->w_s); - } + reset_synblock(wp); /* free independent synblock */ #endif #ifdef FEAT_AUTOCMD if (wp != aucmd_win) #endif - win_remove(wp, tp); + win_remove(wp, tp); vim_free(wp); #ifdef FEAT_AUTOCMD |