diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-08-22 12:02:45 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-22 12:02:45 +0800 |
commit | 4f6d0d6da971ee837864bf96aa28cc24c2d58b5a (patch) | |
tree | a835274cccbea2e69a7458a630770129d790b5e1 /src/nvim/quickfix.c | |
parent | d5cc161deac2371a39821c94fd2de4f1c41b6eb9 (diff) | |
download | rneovim-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.c | 15 |
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, |