From: Skip Montanaro Date: Tue, 11 Jun 2002 14:32:46 +0000 (+0000) Subject: patch #562492 - prevent duplicate lines in history X-Git-Tag: v2.3c1~5377 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a039274cccd24631f2b2de39d31ae4ffe7399bf8;p=python patch #562492 - prevent duplicate lines in history also call using_history() to properly initialize history variables --- diff --git a/Modules/readline.c b/Modules/readline.c index 6850b016bd..1ca8ec3c09 100644 --- a/Modules/readline.c +++ b/Modules/readline.c @@ -552,6 +552,8 @@ flex_complete(char *text, int start, int end) static void setup_readline(void) { + using_history(); + rl_readline_name = "python"; #if defined(PYOS_OS2) && defined(PYCC_GCC) /* Allow $if term= in .inputrc to work */ @@ -628,8 +630,23 @@ call_readline(char *prompt) return p; } n = strlen(p); - if (n > 0) - add_history(p); + if (n > 0) { + char *line; + HISTORY_STATE *state = history_get_history_state(); + if (state->length > 0) + line = history_get(state->length)->line; + else + line = ""; + if (strcmp(p, line)) + add_history(p); + /* the history docs don't say so, but the address of state + changes each time history_get_history_state is called + which makes me think it's freshly malloc'd memory... + on the other hand, the address of the last line stays the + same as long as history isn't extended, so it appears to + be malloc'd but managed by the history package... */ + free(state); + } /* Copy the malloc'ed buffer into a PyMem_Malloc'ed one and release the original. */ q = p;