diff options
Diffstat (limited to 'src/nvim/mark.c')
| -rw-r--r-- | src/nvim/mark.c | 40 | 
1 files changed, 29 insertions, 11 deletions
| diff --git a/src/nvim/mark.c b/src/nvim/mark.c index ae94ec7ecd..3cd26a5bf7 100644 --- a/src/nvim/mark.c +++ b/src/nvim/mark.c @@ -1,3 +1,6 @@ +// This is an open source non-commercial project. Dear PVS-Studio, please check +// it. PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com +  /*   * mark.c: functions for setting marks and jumping to them   */ @@ -168,6 +171,10 @@ void setpcmark(void)    curwin->w_prev_pcmark = curwin->w_pcmark;    curwin->w_pcmark = curwin->w_cursor; +  if (curwin->w_pcmark.lnum == 0) { +    curwin->w_pcmark.lnum = 1; +  } +    /* If jumplist is full: remove oldest entry */    if (++curwin->w_jumplistlen > JUMPLISTSIZE) {      curwin->w_jumplistlen = JUMPLISTSIZE; @@ -885,9 +892,13 @@ void ex_changes(exarg_T *eap)   * Example: Insert two lines below 55: mark_adjust(56, MAXLNUM, 2, 0);   *				   or: mark_adjust(56, 55, MAXLNUM, 2);   */ -void mark_adjust(linenr_T line1, linenr_T line2, long amount, long amount_after) +void mark_adjust(linenr_T line1, +                 linenr_T line2, +                 long amount, +                 long amount_after, +                 bool end_temp)  { -  mark_adjust_internal(line1, line2, amount, amount_after, true); +  mark_adjust_internal(line1, line2, amount, amount_after, true, end_temp);  }  // mark_adjust_nofold() does the same as mark_adjust() but without adjusting @@ -896,13 +907,14 @@ void mark_adjust(linenr_T line1, linenr_T line2, long amount, long amount_after)  // calling foldMarkAdjust() with arguments line1, line2, amount, amount_after,  // for an example of why this may be necessary, see do_move().  void mark_adjust_nofold(linenr_T line1, linenr_T line2, long amount, -                        long amount_after) +                        long amount_after, bool end_temp)  { -  mark_adjust_internal(line1, line2, amount, amount_after, false); +  mark_adjust_internal(line1, line2, amount, amount_after, false, end_temp);  } -static void mark_adjust_internal(linenr_T line1, linenr_T line2, long amount, -                                 long amount_after, bool adjust_folds) +static void mark_adjust_internal(linenr_T line1, linenr_T line2, +                                 long amount, long amount_after, +                                 bool adjust_folds, bool end_temp)  {    int i;    int fnum = curbuf->b_fnum; @@ -943,15 +955,21 @@ static void mark_adjust_internal(linenr_T line1, linenr_T line2, long amount,      one_adjust_nodel(&(curbuf->b_visual.vi_start.lnum));      one_adjust_nodel(&(curbuf->b_visual.vi_end.lnum)); -    /* quickfix marks */ -    qf_mark_adjust(NULL, line1, line2, amount, amount_after); -    /* location lists */ +    // quickfix marks +    if (!qf_mark_adjust(NULL, line1, line2, amount, amount_after)) { +      curbuf->b_has_qf_entry &= ~BUF_HAS_QF_ENTRY; +    } +    // location lists +    bool found_one = false;      FOR_ALL_TAB_WINDOWS(tab, win) { -      qf_mark_adjust(win, line1, line2, amount, amount_after); +      found_one |= qf_mark_adjust(win, line1, line2, amount, amount_after); +    } +    if (!found_one) { +      curbuf->b_has_qf_entry &= ~BUF_HAS_LL_ENTRY;      }      sign_mark_adjust(line1, line2, amount, amount_after); -    bufhl_mark_adjust(curbuf, line1, line2, amount, amount_after); +    bufhl_mark_adjust(curbuf, line1, line2, amount, amount_after, end_temp);    }    /* previous context mark */ | 
