commit 8031f8342231cd9d09806091168da8495bed0174
parent 6cd143db7aaa5a6bc375b96955e3ba959a8170d5
Author: Chris Allegretta <chrisa@asty.org>
Date: Thu, 9 Jan 2003 05:29:58 +0000
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
Diffstat:
1 file changed, 17 insertions(+), 1 deletion(-)
diff --git 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;