diff options
Diffstat (limited to 'src/nvim/change.c')
| -rw-r--r-- | src/nvim/change.c | 71 | 
1 files changed, 32 insertions, 39 deletions
| diff --git a/src/nvim/change.c b/src/nvim/change.c index e148df4d44..73488006a6 100644 --- a/src/nvim/change.c +++ b/src/nvim/change.c @@ -282,25 +282,21 @@ static void changed_common(linenr_T lnum, colnr_T col, linenr_T lnume, long xtra      curwin->w_last_cursormoved.lnum = 0;  } -    static void -changedOneline(buf_T *buf, linenr_T lnum) +static void changedOneline(buf_T *buf, linenr_T lnum)  { -    if (buf->b_mod_set) -    { -	// find the maximum area that must be redisplayed -	if (lnum < buf->b_mod_top) -	    buf->b_mod_top = lnum; -	else if (lnum >= buf->b_mod_bot) -	    buf->b_mod_bot = lnum + 1; -    } -    else -    { -	// set the area that must be redisplayed to one line -	buf->b_mod_set = TRUE; -	buf->b_mod_top = lnum; -	buf->b_mod_bot = lnum + 1; -	buf->b_mod_xlines = 0; -    } +  if (buf->b_mod_set) { +    // find the maximum area that must be redisplayed +    if (lnum < buf->b_mod_top) +      buf->b_mod_top = lnum; +    else if (lnum >= buf->b_mod_bot) +      buf->b_mod_bot = lnum + 1; +  } else { +    // set the area that must be redisplayed to one line +    buf->b_mod_set = true; +    buf->b_mod_top = lnum; +    buf->b_mod_bot = lnum + 1; +    buf->b_mod_xlines = 0; +  }  }  /* @@ -310,29 +306,26 @@ changedOneline(buf_T *buf, linenr_T lnum)   * - invalidates cached values   * Careful: may trigger autocommands that reload the buffer.   */ -    void -changed_bytes(linenr_T lnum, colnr_T col) +void changed_bytes(linenr_T lnum, colnr_T col)  { -    changedOneline(curbuf, lnum); -    changed_common(lnum, col, lnum + 1, 0L); - -#ifdef FEAT_DIFF -    // Diff highlighting in other diff windows may need to be updated too. -    if (curwin->w_p_diff) -    { -	win_T	    *wp; -	linenr_T    wlnum; - -	FOR_ALL_WINDOWS(wp) -	    if (wp->w_p_diff && wp != curwin) -	    { -		redraw_win_later(wp, VALID); -		wlnum = diff_lnum_win(lnum, wp); -		if (wlnum > 0) -		    changedOneline(wp->w_buffer, wlnum); -	    } +  changedOneline(curbuf, lnum); +  changed_common(lnum, col, lnum + 1, 0L); +  // notify any channels that are watching +  buf_updates_send_changes(curbuf, lnum, 1, 1, true); + +  // Diff highlighting in other diff windows may need to be updated too. +  if (curwin->w_p_diff) { +    linenr_T wlnum; + +    FOR_ALL_WINDOWS_IN_TAB(wp, curtab) { +      if (wp->w_p_diff && wp != curwin) { +        redraw_win_later(wp, VALID); +        wlnum = diff_lnum_win(lnum, wp); +        if (wlnum > 0) +          changedOneline(wp->w_buffer, wlnum); +      }      } -#endif +  }  }  /* | 
