From 0e581b35243537d1dee94ba6f9a509cc6bd4cd5a Mon Sep 17 00:00:00 2001 From: David Lawrence Ramsey Date: Mon, 18 Jul 2005 07:48:50 +0000 Subject: [PATCH] make sure that the current position in the history list is properly set to the bottom if we cancel out of the prompt git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2890 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- ChangeLog | 3 +++ src/proto.h | 1 + src/search.c | 9 +++++++++ src/winio.c | 11 ++++++++--- 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 35f07f73..3af2dd5d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -75,6 +75,9 @@ CVS code - contains invalid multibyte characters interpreted as normal characters. Changes to mbstrncasecmp(), mbstrcasestr(), mbrevstrcasestr(), findnextstr(), and do_replace_loop(). (DLR) + - Make sure that the current position in the history list is + properly set to the bottom if we cancel out of the prompt. + New function history_reset(); changes to nanogetstr(). (DLR) - files.c: open_file() - Assert that filename isn't NULL, and don't do anything special diff --git a/src/proto.h b/src/proto.h index e8a5c609..a2d7e516 100644 --- a/src/proto.h +++ b/src/proto.h @@ -517,6 +517,7 @@ void do_find_bracket(void); bool history_has_changed(void); #endif void history_init(void); +void history_reset(const filestruct *h); filestruct *find_history(filestruct *h_start, filestruct *h_end, const char *s, size_t len); void update_history(filestruct **h, const char *s); diff --git a/src/search.c b/src/search.c index 034d3de2..0a527a1b 100644 --- a/src/search.c +++ b/src/search.c @@ -1185,6 +1185,15 @@ void history_init(void) replacebot = replace_history; } +/* Set the current position in the history list h to the bottom. */ +void history_reset(const filestruct *h) +{ + if (h == search_history) + search_history = searchbot; + else if (h == replace_history) + replace_history = replacebot; +} + /* Return the first node containing the first len characters of the * string s in the history list, starting at h_start and ending at * h_end, or NULL if there isn't one. */ diff --git a/src/winio.c b/src/winio.c index da0d89d3..d9f9c574 100644 --- a/src/winio.c +++ b/src/winio.c @@ -2642,9 +2642,14 @@ int nanogetstr(bool allow_tabs, const char *buf, const char *curranswer, } #ifndef NANO_SMALL - /* Free magichistory if we need to. */ - if (magichistory != NULL) - free(magichistory); + /* Set the current position in the history list to the bottom and + * free magichistory, if we need to. */ + if (history_list != NULL) { + history_reset(*history_list); + + if (magichistory != NULL) + free(magichistory); + } #endif /* We finished putting in an answer or ran a normal shortcut's -- 2.39.5