]> granicus.if.org Git - vim/commitdiff
Fixed: after ":ownsyntax perl" and ":e" syntax was cleared in other window.
authorBram Moolenaar <Bram@vim.org>
Sun, 6 Jun 2010 14:11:09 +0000 (16:11 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 6 Jun 2010 14:11:09 +0000 (16:11 +0200)
runtime/doc/todo.txt
src/buffer.c
src/ex_cmds.c
src/proto/syntax.pro
src/syntax.c
src/window.c

index 549dcff483f472c954c216e58606ab5a44bbd540..c1999cb987b26d6de9a2a832d23ead45bdc21bb3 100644 (file)
@@ -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
index cf7ecbbe9517f7995af956af4f43681a882c44d9..a6878e6cdc7a26fc1d64a70e1d634c85392032da 100644 (file)
@@ -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. */
index f05a0656d47bfca54edec794305c1d44e6701a90..2ffaa3e217480533b69154c7619e498804fe287b 100644 (file)
@@ -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. */
index 0e484cbc6e665b5d1f3cfd7008c4b5ad88f74d93..b2d63fdd79a55120bc80dd4cecdc5ec3b7ff5b36 100644 (file)
@@ -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));
index 2b70c6d4513041aaa25fc66fb1c415262e41ae32..038820923a79558214aca3d77a958d009282a715 100644 (file)
@@ -3420,6 +3420,21 @@ syntax_clear(block)
     invalidate_current_state();
 }
 
+/*
+ * 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.
  */
@@ -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
index e878d9fab69f7fee3ed5b36cb1d74d1ec7ad7f58..239a8094eeed42135f7bcc802beec2856c86d7f0 100644 (file)
@@ -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