0
0
mirror of https://github.com/vim/vim.git synced 2025-09-25 03:54:15 -04:00

patch 8.2.3619: cannot use a lambda for 'operatorfunc'

Problem:    Cannot use a lambda for 'operatorfunc'.
Solution:   Support using a lambda or partial. (Yegappan Lakshmanan,
            closes #8775)
This commit is contained in:
Yegappan Lakshmanan
2021-11-18 22:08:57 +00:00
committed by Bram Moolenaar
parent 851c7a699a
commit 777175b0df
10 changed files with 185 additions and 41 deletions

View File

@@ -4437,45 +4437,12 @@ qf_find_buf(qf_info_T *qi)
/*
* Process the 'quickfixtextfunc' option value.
* Returns OK or FAIL.
*/
int
qf_process_qftf_option(void)
{
typval_T *tv;
callback_T cb;
if (p_qftf == NULL || *p_qftf == NUL)
{
free_callback(&qftf_cb);
return TRUE;
}
if (*p_qftf == '{')
{
// Lambda expression
tv = eval_expr(p_qftf, NULL);
if (tv == NULL)
return FALSE;
}
else
{
// treat everything else as a function name string
tv = alloc_string_tv(vim_strsave(p_qftf));
if (tv == NULL)
return FALSE;
}
cb = get_callback(tv);
if (cb.cb_name == NULL)
{
free_tv(tv);
return FALSE;
}
free_callback(&qftf_cb);
set_callback(&qftf_cb, &cb);
free_tv(tv);
return TRUE;
return option_set_callback_func(p_qftf, &qftf_cb);
}
/*