]> git.wh0rd.org Git - nano.git/commitdiff
Add a buffer holder for current search/replace data, so we don't lose it when going...
authorChris Allegretta <chrisa@asty.org>
Thu, 9 Jan 2003 05:29:58 +0000 (05:29 +0000)
committerChris Allegretta <chrisa@asty.org>
Thu, 9 Jan 2003 05:29:58 +0000 (05:29 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1341 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

winio.c

diff --git a/winio.c b/winio.c
index 234d4fb58330a60ab86896b0b7fc4ceec499c34d..c94a62c0d16fc299fdf9f3bca29f041ec4ad2e41 100644 (file)
--- 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;