This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH/RFA] Fix operate-and-get-next when history list is full


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  <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.

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);
 }
 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]