summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--Doc/Zsh/zle.yo5
-rw-r--r--Src/Zle/zle_hist.c10
-rw-r--r--Src/Zle/zle_params.c12
4 files changed, 31 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index aebf5b2c4..63bf0263b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2002-12-06  Felix Rosencrantz <f_rosencrantz@yahoo.com>
+
+	* 17983: Src/Zle/zle_hist.c, Src/Zle/zle_params.c, Doc/Zsh/zle.yo:
+	Added zle LASTSEARCH parameter, giving read access to last incremental
+	search.
+
 2002-12-06  Bart Schaefer  <schaefer@zsh.org>
 
 	* 17985: Test/B02typeset.ztst: adjust hiding/tagging test so it no
diff --git a/Doc/Zsh/zle.yo b/Doc/Zsh/zle.yo
index 715c3e00e..771ff4d18 100644
--- a/Doc/Zsh/zle.yo
+++ b/Doc/Zsh/zle.yo
@@ -627,6 +627,11 @@ Unlike a normal array, only a maximum of eight elements may be written;
 any extra are ignored.  If fewer than eight elements are given, the
 remaining elements of the kill ring will be treated as undefined.
 )
+
+vindex(LASTSEARCH)
+item(tt(LASTSEARCH) (scalar))(
+The last search string used by an interactive search ; read-only.
+)
 vindex(LASTWIDGET)
 item(tt(LASTWIDGET) (scalar))(
 The name of the last widget that was executed; read-only.
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 "";
+}