Patch 8.1.0402
Problem:    The DiffUpdate event isn't triggered for :diffput.
Solution:   Also trigger DiffUpdate for :diffget and :diffput.
Files:      src/diff.c


*** ../vim-8.1.0401/src/diff.c  2018-09-16 18:10:45.246181729 +0200
--- src/diff.c  2018-09-18 20:54:19.844268349 +0200
***************
*** 295,301 ****
  
      if (diff_internal())
      {
!       // Will udpate diffs before redrawing.  Set _invalid to update the
        // diffs themselves, set _update to also update folds properly just
        // before redrawing.
        tp->tp_diff_invalid = TRUE;
--- 295,301 ----
  
      if (diff_internal())
      {
!       // Will update diffs before redrawing.  Set _invalid to update the
        // diffs themselves, set _update to also update folds properly just
        // before redrawing.
        tp->tp_diff_invalid = TRUE;
***************
*** 908,913 ****
--- 908,914 ----
      int               idx_orig;
      int               idx_new;
      diffio_T  diffio;
+     int               had_diffs = curtab->tp_first_diff != NULL;
  
      if (diff_busy)
      {
***************
*** 924,937 ****
        if (curtab->tp_diffbuf[idx_orig] != NULL)
            break;
      if (idx_orig == DB_COUNT)
!       return;
  
      // Only need to do something when there is another buffer.
      for (idx_new = idx_orig + 1; idx_new < DB_COUNT; ++idx_new)
        if (curtab->tp_diffbuf[idx_new] != NULL)
            break;
      if (idx_new == DB_COUNT)
!       return;
  
      // Only use the internal method if it did not fail for one of the buffers.
      vim_memset(&diffio, 0, sizeof(diffio));
--- 925,938 ----
        if (curtab->tp_diffbuf[idx_orig] != NULL)
            break;
      if (idx_orig == DB_COUNT)
!       goto theend;
  
      // Only need to do something when there is another buffer.
      for (idx_new = idx_orig + 1; idx_new < DB_COUNT; ++idx_new)
        if (curtab->tp_diffbuf[idx_new] != NULL)
            break;
      if (idx_new == DB_COUNT)
!       goto theend;
  
      // Only use the internal method if it did not fail for one of the buffers.
      vim_memset(&diffio, 0, sizeof(diffio));
***************
*** 948,956 ****
      // force updating cursor position on screen
      curwin->w_valid_cursor.lnum = 0;
  
!     diff_redraw(TRUE);
! 
!     apply_autocmds(EVENT_DIFFUPDATED, NULL, NULL, FALSE, curbuf);
  }
  
  /*
--- 949,962 ----
      // force updating cursor position on screen
      curwin->w_valid_cursor.lnum = 0;
  
! theend:
!     // A redraw is needed if there were diffs and they were cleared, or there
!     // are diffs now, which means they got updated.
!     if (had_diffs || curtab->tp_first_diff != NULL)
!     {
!       diff_redraw(TRUE);
!       apply_autocmds(EVENT_DIFFUPDATED, NULL, NULL, FALSE, curbuf);
!     }
  }
  
  /*
***************
*** 2272,2278 ****
      if ((diff_flags_new & DIFF_HORIZONTAL) && (diff_flags_new & 
DIFF_VERTICAL))
        return FAIL;
  
!     /* If "icase" or "iwhite" was added or removed, need to update the diff. 
*/
      if (diff_flags != diff_flags_new || diff_algorithm != diff_algorithm_new)
        FOR_ALL_TABPAGES(tp)
            tp->tp_diff_invalid = TRUE;
--- 2278,2285 ----
      if ((diff_flags_new & DIFF_HORIZONTAL) && (diff_flags_new & 
DIFF_VERTICAL))
        return FAIL;
  
!     // If flags were added or removed, or the algorithm was changed, need to
!     // update the diff.
      if (diff_flags != diff_flags_new || diff_algorithm != diff_algorithm_new)
        FOR_ALL_TABPAGES(tp)
            tp->tp_diff_invalid = TRUE;
***************
*** 2845,2858 ****
        diff_need_update = FALSE;
        ex_diffupdate(NULL);
      }
! 
!     /* Check that the cursor is on a valid character and update it's position.
!      * When there were filler lines the topline has become invalid. */
!     check_cursor();
!     changed_line_abv_curs();
! 
!     /* Also need to redraw the other buffers. */
!     diff_redraw(FALSE);
  }
  
  #ifdef FEAT_FOLDING
--- 2852,2869 ----
        diff_need_update = FALSE;
        ex_diffupdate(NULL);
      }
!     else
!     {
!       // Check that the cursor is on a valid character and update it's
!       // position.  When there were filler lines the topline has become
!       // invalid.
!       check_cursor();
!       changed_line_abv_curs();
! 
!       // Also need to redraw the other buffers.
!       diff_redraw(FALSE);
!       apply_autocmds(EVENT_DIFFUPDATED, NULL, NULL, FALSE, curbuf);
!     }
  }
  
  #ifdef FEAT_FOLDING
*** ../vim-8.1.0401/src/version.c       2018-09-16 18:46:36.189127529 +0200
--- src/version.c       2018-09-18 20:55:27.799635739 +0200
***************
*** 796,797 ****
--- 796,799 ----
  {   /* Add new patch number below this line */
+ /**/
+     402,
  /**/

-- 
If your nose runs, and your feet smell, you might be upside down.

 /// 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].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui