From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16179 invoked by alias); 17 Aug 2002 10:03:27 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 16165 invoked from network); 17 Aug 2002 10:03:24 -0000 Received: from unknown (HELO walton.kettenis.dyndns.org) (62.163.169.250) by sources.redhat.com with SMTP; 17 Aug 2002 10:03:24 -0000 Received: from elgar.kettenis.dyndns.org (elgar.kettenis.dyndns.org [192.168.0.2]) by walton.kettenis.dyndns.org (8.12.5/8.12.5) with ESMTP id g7HA3G1x004642; Sat, 17 Aug 2002 12:03:16 +0200 (CEST) (envelope-from kettenis@elgar.kettenis.dyndns.org) Received: from elgar.kettenis.dyndns.org (localhost [127.0.0.1]) by elgar.kettenis.dyndns.org (8.12.5/8.12.5) with ESMTP id g7HA3FWM042407; Sat, 17 Aug 2002 12:03:15 +0200 (CEST) (envelope-from kettenis@elgar.kettenis.dyndns.org) Received: (from kettenis@localhost) by elgar.kettenis.dyndns.org (8.12.5/8.12.5/Submit) id g7HA3E40042404; Sat, 17 Aug 2002 12:03:14 +0200 (CEST) Date: Sat, 17 Aug 2002 03:03:00 -0000 Message-Id: <200208171003.g7HA3E40042404@elgar.kettenis.dyndns.org> From: Mark Kettenis To: ezannoni@redhat.com CC: gdb-patches@sources.redhat.com Subject: [PATCH/RFA] Fix operate-and-get-next when history list is full X-SW-Source: 2002-08/txt/msg00486.txt.bz2 Hi Elena, The attached patch fixes a problem with operate-and-get-next when the history list is full. In that case, when executing a command, the oldest entry is removed from the history, all other entries are moved "up", and a new entry is put at the end of the list. In that case we shouldn't increase the current line by one the find the next line. bash contains similar code as my patch adds. OK to apply? Mark Index: ChangeLog from Mark Kettenis * top.c (gdb_rl_operate_and_get_next): Make sure operate-and-get-next functions correctly even when the history list is completely filled. Index: top.c =================================================================== RCS file: /cvs/src/src/gdb/top.c,v retrieving revision 1.65 diff -u -p -r1.65 top.c --- top.c 24 Jul 2002 17:58:46 -0000 1.65 +++ top.c 17 Aug 2002 09:58:17 -0000 @@ -1082,6 +1082,8 @@ gdb_rl_operate_and_get_next_completion ( static int gdb_rl_operate_and_get_next (int count, int key) { + int where; + if (event_loop_p) { /* Use the async hook. */ @@ -1094,8 +1096,20 @@ gdb_rl_operate_and_get_next (int count, rl_pre_input_hook = (Function *) gdb_rl_operate_and_get_next_completion; } - /* Add 1 because we eventually want the next line. */ - operate_saved_history = where_history () + 1; + /* Find the current line, and find the next line to use. */ + where = where_history(); + + /* FIXME: kettenis/20020817: max_input_history is renamed into + history_max_entries in readline-4.2. When we do a new readline + import, we should probably change it here too, even though + readline maintains backwards compatibility for now by still + defining max_input_history. */ + if ((history_is_stifled () && (history_length >= max_input_history)) || + (where >= history_length - 1)) + operate_saved_history = where; + else + operate_saved_history = where + 1; + return rl_newline (1, key); }