aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2017-11-21 01:53:12 +0100
committerJustin M. Keyes <justinkz@gmail.com>2017-11-21 01:53:12 +0100
commit9b6bf8fa3728aaa39d0e8694a720da783d141ff7 (patch)
tree42a8d6407a60facf02b00128c3f929eddc75cc1c
parent84d9245c70c2c65668e0b56beee7f4dcd8ea3644 (diff)
parentff819d8ad72b6a7404d28707f1f9ef460c35c472 (diff)
downloadrneovim-9b6bf8fa3728aaa39d0e8694a720da783d141ff7.tar.gz
rneovim-9b6bf8fa3728aaa39d0e8694a720da783d141ff7.tar.bz2
rneovim-9b6bf8fa3728aaa39d0e8694a720da783d141ff7.zip
Merge #7345 'location-list update on buffer-modified'
-rw-r--r--src/nvim/mark.c14
-rw-r--r--src/nvim/quickfix.c14
-rw-r--r--test/functional/ex_cmds/quickfix_commands_spec.lua28
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)