diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | Doc/Zsh/zle.yo | 5 | ||||
-rw-r--r-- | Src/Zle/zle_hist.c | 10 | ||||
-rw-r--r-- | Src/Zle/zle_params.c | 12 |
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 ""; +} |