about summary refs log tree commit diff
path: root/Src/Zle
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Zle')
-rw-r--r--Src/Zle/zle_hist.c10
-rw-r--r--Src/Zle/zle_params.c12
2 files changed, 20 insertions, 2 deletions
diff --git a/Src/Zle/zle_hist.c b/Src/Zle/zle_hist.c
index 54da51710..1c17defc7 100644
--- a/Src/Zle/zle_hist.c
+++ b/Src/Zle/zle_hist.c
@@ -41,6 +41,14 @@ int lastcol;
 /**/
 int histline;
 
+/* Previous search string use in an incremental search */
+
+/**/
+char *previous_search = NULL;
+
+/**/
+int previous_search_len = 0;
+
 #define ZLETEXT(X) ((X)->zle_text ? (X)->zle_text : (X)->text)
 
 /**/
@@ -757,8 +765,6 @@ doisearch(char **args, int dir)
     int hl = histline, savekeys = -1, feep = 0;
     Thingy cmd;
     char *okeymap;
-    static char *previous_search = NULL;
-    static int previous_search_len = 0;
     Histent he;
 
     if (!(he = quietgethist(hl)))
diff --git a/Src/Zle/zle_params.c b/Src/Zle/zle_params.c
index 1987974d2..c8b518cbf 100644
--- a/Src/Zle/zle_params.c
+++ b/Src/Zle/zle_params.c
@@ -89,6 +89,8 @@ static struct zleparam {
 	zleunsetfn, NULL },
     { "POSTDISPLAY", PM_SCALAR, FN(set_postdisplay), FN(get_postdisplay),
 	zleunsetfn, NULL },
+    { "LASTSEARCH", PM_SCALAR | PM_READONLY, NULL, FN(get_lsearch),
+        zleunsetfn, NULL },
     { NULL, 0, NULL, NULL, NULL, NULL }
 };
 
@@ -526,3 +528,13 @@ free_prepostdisplay(void)
     if (postdisplaylen)
 	set_prepost(&postdisplay, &postdisplaylen, NULL);
 }
+
+/**/
+static char *
+get_lsearch(Param pm)
+{
+    if (previous_search_len)
+	return metafy(previous_search, previous_search_len, META_HEAPDUP);
+    else
+	return "";
+}