summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2010-06-06 16:11:09 +0200
committerBram Moolenaar <Bram@vim.org>2010-06-06 16:11:09 +0200
commitfd29f4628ed53eef3d96a09ad2d0fa504edfcdfc (patch)
tree1a25451b5be6300da150cc4dca280bffe9d523ba
parent1950c3529b16acd21ee5770b422d633f24d192a3 (diff)
downloadvim-git-fd29f4628ed53eef3d96a09ad2d0fa504edfcdfc.tar.gz
Fixed: after ":ownsyntax perl" and ":e" syntax was cleared in other window.
-rw-r--r--runtime/doc/todo.txt11
-rw-r--r--src/buffer.c7
-rw-r--r--src/ex_cmds.c3
-rw-r--r--src/proto/syntax.pro1
-rw-r--r--src/syntax.c16
-rw-r--r--src/window.c12
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