From 8031f8342231cd9d09806091168da8495bed0174 Mon Sep 17 00:00:00 2001 From: Chris Allegretta Date: Thu, 9 Jan 2003 05:29:58 +0000 Subject: [PATCH] Add a buffer holder for current search/replace data, so we don't lose it when going back through history git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1341 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- winio.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/winio.c b/winio.c index 234d4fb5..c94a62c0 100644 --- a/winio.c +++ b/winio.c @@ -208,8 +208,9 @@ int nanogetstr(int allowtabs, const char *buf, const char *def, #ifndef NANO_SMALL /* for history */ char *history = NULL; + char *currentbuf = NULL; char *complete = NULL; - int last_kbinput = 0; + int last_kbinput = 0, ret2cb = 0; #endif xend = strlen(def); x = xend; @@ -350,6 +351,14 @@ int nanogetstr(int allowtabs, const char *buf, const char *def, case KEY_UP: #ifndef NANO_SMALL if (history_list) { + + /* If there's no previous temp holder, or if we already arrowed + back down to it and (possibly edited ir), update the holder */ + if (currentbuf == NULL || (ret2cb == 1 && strcmp(currentbuf, answer))) { + currentbuf = mallocstrcpy(currentbuf, answer); + ret2cb = 0; + } + /* get older search from the history list */ if ((history = get_history_older(history_list))) { answer = mallocstrcpy(answer, history); @@ -369,6 +378,13 @@ int nanogetstr(int allowtabs, const char *buf, const char *def, if ((history = get_history_newer(history_list))) { answer = mallocstrcpy(answer, history); xend = strlen(history); + + /* Else if we ran out of history, regurgitate the temporary + buffer */ + } else if (currentbuf != NULL) { + answer = mallocstrcpy(answer, currentbuf); + xend = strlen(currentbuf); + ret2cb = 1; } else { answer = mallocstrcpy(answer, ""); xend = 0;