* top.c (gdb_rl_operate_and_get_next): Make sure
authorMark Kettenis <kettenis@gnu.org>
Sun, 18 Aug 2002 12:39:03 +0000 (12:39 +0000)
committerMark Kettenis <kettenis@gnu.org>
Sun, 18 Aug 2002 12:39:03 +0000 (12:39 +0000)
operate-and-get-next functions correctly even when the history
list is completely filled.

gdb/ChangeLog
gdb/top.c

index 74334119539a17ee4c0b7018cbdbf69cfb531e66..2307b20067fe06945433ae8f7221accfe596771c 100644 (file)
@@ -1,3 +1,9 @@
+2002-08-17  Mark Kettenis  <kettenis@gnu.org>
+
+       * top.c (gdb_rl_operate_and_get_next): Make sure
+       operate-and-get-next functions correctly even when the history
+       list is completely filled.
+
 2002-08-18  Andrew Cagney  <ac131313@redhat.com>
 
        * MAINTAINERS (Target Instruction Set Architectures): Rename
index ee3daf067844ac8fcda8dfcc8a1bc31c4260b9ed..a2cee530c20be5e84f2318d6159d33b738f5ef83 100644 (file)
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -1082,6 +1082,8 @@ gdb_rl_operate_and_get_next_completion (void)
 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, int key)
       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);
 }
 \f