aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/quickfix.c
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2022-08-22 12:02:45 +0800
committerGitHub <noreply@github.com>2022-08-22 12:02:45 +0800
commit4f6d0d6da971ee837864bf96aa28cc24c2d58b5a (patch)
treea835274cccbea2e69a7458a630770129d790b5e1 /src/nvim/quickfix.c
parentd5cc161deac2371a39821c94fd2de4f1c41b6eb9 (diff)
downloadrneovim-4f6d0d6da971ee837864bf96aa28cc24c2d58b5a.tar.gz
rneovim-4f6d0d6da971ee837864bf96aa28cc24c2d58b5a.tar.bz2
rneovim-4f6d0d6da971ee837864bf96aa28cc24c2d58b5a.zip
vim-patch:8.2.2289: Vim9: 'cpo' can become empty (#19887)
Problem: Vim9: 'cpo' can become empty. Solution: Use empty_option instead of an empty string. Update quickfix buffer after restoring 'cpo'. (closes vim/vim#7608) https://github.com/vim/vim/commit/e5a2dc87fd9d63dfd0d9c379e363ee8b8c05b14c Omit test as it is Vim9 script.
Diffstat (limited to 'src/nvim/quickfix.c')
-rw-r--r--src/nvim/quickfix.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/nvim/quickfix.c b/src/nvim/quickfix.c
index 17fbbe17b8..86054b50c6 100644
--- a/src/nvim/quickfix.c
+++ b/src/nvim/quickfix.c
@@ -7062,6 +7062,7 @@ void ex_helpgrep(exarg_T *eap)
}
}
+ bool updated = false;
// Make 'cpoptions' empty, the 'l' flag should not be used here.
char *const save_cpo = p_cpo;
p_cpo = (char *)empty_option;
@@ -7092,16 +7093,26 @@ void ex_helpgrep(exarg_T *eap)
qfl->qf_ptr = qfl->qf_start;
qfl->qf_index = 1;
qf_list_changed(qfl);
- qf_update_buffer(qi, NULL);
+ updated = true;
}
if ((char_u *)p_cpo == empty_option) {
p_cpo = save_cpo;
} else {
- // Darn, some plugin changed the value.
+ // Darn, some plugin changed the value. If it's still empty it was
+ // changed and restored, need to restore in the complicated way.
+ if (*p_cpo == NUL) {
+ set_option_value("cpo", 0L, save_cpo, 0);
+ }
free_string_option((char_u *)save_cpo);
}
+ if (updated) {
+ // This may open a window and source scripts, do this after 'cpo' was
+ // restored.
+ qf_update_buffer(qi, NULL);
+ }
+
if (au_name != NULL) {
apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, curbuf->b_fname, true, curbuf);
// When adding a location list to an existing location list stack,