patch 9.1.0810: cannot easily adjust the |:find| command
Problem: cannot easily adjust the |:find| command
Solution: Add support for the 'findexpr' option (Yegappan Lakshmanan)
closes: #15901
closes: #15905
Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/option.c b/src/option.c
index 84c469e..e82a79b 100644
--- a/src/option.c
+++ b/src/option.c
@@ -6313,6 +6313,11 @@
case PV_FP:
clear_string_option(&buf->b_p_fp);
break;
+# ifdef FEAT_EVAL
+ case PV_FEXPR:
+ clear_string_option(&buf->b_p_fexpr);
+ break;
+# endif
# ifdef FEAT_QUICKFIX
case PV_EFM:
clear_string_option(&buf->b_p_efm);
@@ -6391,6 +6396,9 @@
switch ((int)p->indir)
{
case PV_FP: return (char_u *)&(curbuf->b_p_fp);
+#ifdef FEAT_EVAL
+ case PV_FEXPR: return (char_u *)&(curbuf->b_p_fexpr);
+#endif
#ifdef FEAT_QUICKFIX
case PV_EFM: return (char_u *)&(curbuf->b_p_efm);
case PV_GP: return (char_u *)&(curbuf->b_p_gp);
@@ -6501,6 +6509,10 @@
#endif
case PV_FP: return *curbuf->b_p_fp != NUL
? (char_u *)&(curbuf->b_p_fp) : p->var;
+#ifdef FEAT_EVAL
+ case PV_FEXPR: return *curbuf->b_p_fexpr != NUL
+ ? (char_u *)&curbuf->b_p_fexpr : p->var;
+#endif
#ifdef FEAT_QUICKFIX
case PV_EFM: return *curbuf->b_p_efm != NUL
? (char_u *)&(curbuf->b_p_efm) : p->var;
@@ -6748,6 +6760,21 @@
}
/*
+ * Get the value of 'findexpr', either the buffer-local one or the global one.
+ */
+ char_u *
+get_findexpr(void)
+{
+#ifdef FEAT_EVAL
+ if (*curbuf->b_p_fexpr == NUL)
+ return p_fexpr;
+ return curbuf->b_p_fexpr;
+#else
+ return (char_u *)"";
+#endif
+}
+
+/*
* Copy options from one window to another.
* Used when splitting a window.
*/
@@ -7275,6 +7302,10 @@
buf->b_p_efm = empty_option;
#endif
buf->b_p_ep = empty_option;
+#if defined(FEAT_EVAL)
+ buf->b_p_fexpr = vim_strsave(p_fexpr);
+ COPY_OPT_SCTX(buf, BV_FEXPR);
+#endif
buf->b_p_kp = empty_option;
buf->b_p_path = empty_option;
buf->b_p_tags = empty_option;