diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2017-11-21 01:53:12 +0100 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2017-11-21 01:53:12 +0100 |
commit | 9b6bf8fa3728aaa39d0e8694a720da783d141ff7 (patch) | |
tree | 42a8d6407a60facf02b00128c3f929eddc75cc1c | |
parent | 84d9245c70c2c65668e0b56beee7f4dcd8ea3644 (diff) | |
parent | ff819d8ad72b6a7404d28707f1f9ef460c35c472 (diff) | |
download | rneovim-9b6bf8fa3728aaa39d0e8694a720da783d141ff7.tar.gz rneovim-9b6bf8fa3728aaa39d0e8694a720da783d141ff7.tar.bz2 rneovim-9b6bf8fa3728aaa39d0e8694a720da783d141ff7.zip |
Merge #7345 'location-list update on buffer-modified'
-rw-r--r-- | src/nvim/mark.c | 14 | ||||
-rw-r--r-- | src/nvim/quickfix.c | 14 | ||||
-rw-r--r-- | test/functional/ex_cmds/quickfix_commands_spec.lua | 28 |
3 files changed, 45 insertions, 11 deletions
diff --git a/src/nvim/mark.c b/src/nvim/mark.c index 7889fabd45..1ba400972c 100644 --- a/src/nvim/mark.c +++ b/src/nvim/mark.c @@ -951,11 +951,17 @@ static void mark_adjust_internal(linenr_T line1, linenr_T line2, 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); diff --git a/src/nvim/quickfix.c b/src/nvim/quickfix.c index e6b1e7b95a..b9228e15b9 100644 --- a/src/nvim/quickfix.c +++ b/src/nvim/quickfix.c @@ -2379,7 +2379,8 @@ static void qf_free(qf_info_T *qi, int idx) /* * qf_mark_adjust: adjust marks */ -void qf_mark_adjust(win_T *wp, linenr_T line1, linenr_T line2, long amount, long amount_after) +bool qf_mark_adjust(win_T *wp, linenr_T line1, linenr_T line2, long amount, + long amount_after) { int i; qfline_T *qfp; @@ -2389,11 +2390,12 @@ void qf_mark_adjust(win_T *wp, linenr_T line1, linenr_T line2, long amount, long int buf_has_flag = wp == NULL ? BUF_HAS_QF_ENTRY : BUF_HAS_LL_ENTRY; if (!(curbuf->b_has_qf_entry & buf_has_flag)) { - return; + return false; } if (wp != NULL) { - if (wp->w_llist == NULL) - return; + if (wp->w_llist == NULL) { + return false; + } qi = wp->w_llist; } @@ -2414,9 +2416,7 @@ void qf_mark_adjust(win_T *wp, linenr_T line1, linenr_T line2, long amount, long } } - if (!found_one) { - curbuf->b_has_qf_entry &= ~buf_has_flag; - } + return found_one; } /* diff --git a/test/functional/ex_cmds/quickfix_commands_spec.lua b/test/functional/ex_cmds/quickfix_commands_spec.lua index 5ab34db3fb..bf10f80401 100644 --- a/test/functional/ex_cmds/quickfix_commands_spec.lua +++ b/test/functional/ex_cmds/quickfix_commands_spec.lua @@ -7,6 +7,7 @@ local command = helpers.command local exc_exec = helpers.exc_exec local write_file = helpers.write_file local curbufmeths = helpers.curbufmeths +local source = helpers.source local file_base = 'Xtest-functional-ex_cmds-quickfix_commands' @@ -81,3 +82,30 @@ for _, c in ipairs({'l', 'c'}) do end) end) end + +describe('quickfix', function() + it('location-list update on buffer modification', function() + source([[ + new + setl bt=nofile + let lines = ['Line 1', 'Line 2', 'Line 3', 'Line 4', 'Line 5'] + call append(0, lines) + new + setl bt=nofile + call append(0, lines) + let qf_item = { + \ 'lnum': 4, + \ 'text': "This is the error line.", + \ } + let qf_item['bufnr'] = bufnr('%') + call setloclist(0, [qf_item]) + wincmd p + let qf_item['bufnr'] = bufnr('%') + call setloclist(0, [qf_item]) + 1del _ + call append(0, ['New line 1', 'New line 2', 'New line 3']) + silent ll + ]]) + eq({0, 6, 1, 0, 1}, funcs.getcurpos()) + end) +end) |