Patch 8.1.1795
Problem:    No syntax HL after splitting windows with :bufdo. (Yasuhiro
            Matsumoto)
Solution:   Trigger Syntax autocommands in buffers that are active.
            (closes #4761)
Files:      src/vim.h, src/option.c, src/ex_cmds2.c,
            src/testdir/test_syntax.vim


*** ../vim-8.1.1794/src/vim.h   2019-08-02 19:52:12.021753684 +0200
--- src/vim.h   2019-08-02 23:02:38.032216656 +0200
***************
*** 698,717 ****
  #define NOTDONE                       2   /* not OK or FAIL but skipped */
  
  /* flags for b_flags */
! #define BF_RECOVERED  0x01    /* buffer has been recovered */
! #define BF_CHECK_RO   0x02    /* need to check readonly when loading file
!                                  into buffer (set by ":e", may be reset by
!                                  ":buf" */
! #define BF_NEVERLOADED        0x04    /* file has never been loaded into 
buffer,
!                                  many variables still need to be set */
! #define BF_NOTEDITED  0x08    /* Set when file name is changed after
!                                  starting to edit, reset when file is
!                                  written out. */
! #define BF_NEW                0x10    /* file didn't exist when editing 
started */
! #define BF_NEW_W      0x20    /* Warned for BF_NEW and file created */
! #define BF_READERR    0x40    /* got errors while reading the file */
! #define BF_DUMMY      0x80    /* dummy buffer, only used internally */
! #define BF_PRESERVED  0x100   /* ":preserve" was used */
  
  /* Mask to check for flags that prevent normal writing */
  #define BF_WRITE_MASK (BF_NOTEDITED + BF_NEW + BF_READERR)
--- 698,718 ----
  #define NOTDONE                       2   /* not OK or FAIL but skipped */
  
  /* flags for b_flags */
! #define BF_RECOVERED  0x01    // buffer has been recovered
! #define BF_CHECK_RO   0x02    // need to check readonly when loading file
!                               // into buffer (set by ":e", may be reset by
!                               // ":buf"
! #define BF_NEVERLOADED        0x04    // file has never been loaded into 
buffer,
!                               // many variables still need to be set
! #define BF_NOTEDITED  0x08    // Set when file name is changed after
!                               // starting to edit, reset when file is
!                               // written out.
! #define BF_NEW                0x10    // file didn't exist when editing 
started
! #define BF_NEW_W      0x20    // Warned for BF_NEW and file created
! #define BF_READERR    0x40    // got errors while reading the file
! #define BF_DUMMY      0x80    // dummy buffer, only used internally
! #define BF_PRESERVED  0x100   // ":preserve" was used
! #define BF_SYN_SET    0x200   // 'syntax' option was set
  
  /* Mask to check for flags that prevent normal writing */
  #define BF_WRITE_MASK (BF_NOTEDITED + BF_NEW + BF_READERR)
*** ../vim-8.1.1794/src/option.c        2019-07-28 19:24:09.063573879 +0200
--- src/option.c        2019-08-02 23:02:54.932126360 +0200
***************
*** 7931,7936 ****
--- 7931,7937 ----
            // recursively, to avoid endless recurrence.
            apply_autocmds(EVENT_SYNTAX, curbuf->b_p_syn, curbuf->b_fname,
                    value_changed || syn_recursive == 1, curbuf);
+           curbuf->b_flags |= BF_SYN_SET;
            --syn_recursive;
        }
  #endif
*** ../vim-8.1.1794/src/ex_cmds2.c      2019-07-14 15:48:35.241984533 +0200
--- src/ex_cmds2.c      2019-08-03 13:27:23.055990447 +0200
***************
*** 1447,1455 ****
--- 1447,1461 ----
  
  #if defined(FEAT_SYN_HL)
      if (eap->cmdidx != CMD_windo && eap->cmdidx != CMD_tabdo)
+     {
        /* Don't do syntax HL autocommands.  Skipping the syntax file is a
         * great speed improvement. */
        save_ei = au_event_disable(",Syntax");
+ 
+       for (buf = firstbuf; buf != NULL; buf = buf->b_next)
+           buf->b_flags &= ~BF_SYN_SET;
+       buf = curbuf;
+     }
  #endif
  #ifdef FEAT_CLIPBOARD
      start_global_changes();
***************
*** 1641,1649 ****
  #if defined(FEAT_SYN_HL)
      if (save_ei != NULL)
      {
        au_event_restore(save_ei);
!       apply_autocmds(EVENT_SYNTAX, curbuf->b_p_syn,
                                               curbuf->b_fname, TRUE, curbuf);
      }
  #endif
  #ifdef FEAT_CLIPBOARD
--- 1647,1681 ----
  #if defined(FEAT_SYN_HL)
      if (save_ei != NULL)
      {
+       buf_T           *bnext;
+       aco_save_T      aco;
+ 
        au_event_restore(save_ei);
! 
!       for (buf = firstbuf; buf != NULL; buf = bnext)
!       {
!           bnext = buf->b_next;
!           if (buf->b_nwindows > 0 && (buf->b_flags & BF_SYN_SET))
!           {
!               buf->b_flags &= ~BF_SYN_SET;
! 
!               // buffer was opened while Syntax autocommands were disabled,
!               // need to trigger them now.
!               if (buf == curbuf)
!                   apply_autocmds(EVENT_SYNTAX, curbuf->b_p_syn,
                                               curbuf->b_fname, TRUE, curbuf);
+               else
+               {
+                   aucmd_prepbuf(&aco, buf);
+                   apply_autocmds(EVENT_SYNTAX, buf->b_p_syn,
+                                                     buf->b_fname, TRUE, buf);
+                   aucmd_restbuf(&aco);
+               }
+ 
+               // start over, in case autocommands messed things up.
+               bnext = firstbuf;
+           }
+       }
      }
  #endif
  #ifdef FEAT_CLIPBOARD
*** ../vim-8.1.1794/src/testdir/test_syntax.vim 2019-06-15 17:57:43.976724009 
+0200
--- src/testdir/test_syntax.vim 2019-08-03 13:27:09.816050655 +0200
***************
*** 582,584 ****
--- 582,622 ----
    call test_override("ALL", 0)
    bwipe!
  endfunc
+ 
+ func Test_syntax_after_bufdo()
+   call writefile(['/* aaa comment */'], 'Xaaa.c')
+   call writefile(['/* bbb comment */'], 'Xbbb.c')
+   call writefile(['/* ccc comment */'], 'Xccc.c')
+   call writefile(['/* ddd comment */'], 'Xddd.c')
+ 
+   let bnr = bufnr('%')
+   new Xaaa.c
+   badd Xbbb.c
+   badd Xccc.c
+   badd Xddd.c
+   exe "bwipe " . bnr
+   let l = []
+   bufdo call add(l, bufnr('%'))
+   call assert_equal(4, len(l))
+ 
+   syntax on
+ 
+   " This used to only enable syntax HL in the last buffer.
+   bufdo tab split
+   tabrewind
+   for tab in range(1, 4)
+     norm fm
+     call assert_equal(['cComment'], map(synstack(line("."), col(".")), 
'synIDattr(v:val, "name")'))
+     tabnext
+   endfor
+ 
+   bwipe! Xaaa.c
+   bwipe! Xbbb.c
+   bwipe! Xccc.c
+   bwipe! Xddd.c
+   syntax off
+   call delete('Xaaa.c')
+   call delete('Xbbb.c')
+   call delete('Xccc.c')
+   call delete('Xddd.c')
+ endfunc
*** ../vim-8.1.1794/src/version.c       2019-08-02 22:46:08.317622692 +0200
--- src/version.c       2019-08-02 23:12:04.713194761 +0200
***************
*** 775,776 ****
--- 775,778 ----
  {   /* Add new patch number below this line */
+ /**/
+     1795,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
11. You find yourself typing "com" after every period when using a word
    processor.com

 /// Bram Moolenaar -- [email protected] -- 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    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/201908031130.x73BU94V012475%40masaka.moolenaar.net.

Raspunde prin e-mail lui