gdb patch to suppress empty lines
Per Bothner
bothner@cygnus.com
Thu May 13 13:40:00 GMT 1999
Here is a simple patch which improves the command line interface of gdb.
If you repeat a command, by submitting an empty line, then normally
will show a lot of useless lines containing only the command prompt.
After an x/i followed by two empty lines, we get:
(gdb) x/i $pc
0xe1038 <main+8>: call 0x138818 <get_run_time>
(gdb)
0xe103c <main+12>: st %i1, [ %fp + 0x48 ]
(gdb)
0xe1040 <main+16>: st %o0, [ %fp + -464 ]
(gdb)
This wastes a lot of screen real estate, and is harder to read.
*With* my patches, we instead get:
(gdb) x/i $pc
0xe1038 <main+8>: call 0x138818 <get_run_time>
0xe103c <main+12>: st %i1, [ %fp + 0x48 ]
0xe1040 <main+16>: st %o0, [ %fp + -464 ]
(gdb)
If you type another empty line (<Enter> only), then the "(gdb) " prompt
is erased, and replaced by the dis-assembled following line.
Index: top.c
===================================================================
RCS file: /cvs/cvsfiles/devo/gdb/top.c,v
retrieving revision 2.109
diff -u -p -r2.109 top.c
--- top.c 1999/05/06 16:42:34 2.109
+++ top.c 1999/05/13 20:30:59
@@ -2122,7 +2122,12 @@ command_line_input (prrompt, repeat, ann
}
else if (command_editing_p && instream == stdin && ISATTY (instream))
{
+ int can_repeat = *line != 0;
+ if (can_repeat)
+ rl_erase_empty_line++;
rl = readline (local_prompt);
+ if (can_repeat)
+ rl_erase_empty_line--;
}
else
{
The patches does require that reeadline be updated. Either update
to the current version, or apply the following patch.
Index: display.c
===================================================================
RCS file: /cvs/cvsfiles/devo/readline/display.c,v
retrieving revision 1.15
diff -u -p -r1.15 display.c
--- display.c 1999/03/23 15:57:41 1.15
+++ display.c 1999/05/13 20:30:08
@@ -1564,3 +1564,12 @@ _rl_clean_up_for_exit ()
rl_restart_output ();
}
}
+
+void
+_rl_erase_entire_line ()
+{
+ cr ();
+ _rl_clear_to_eol (0);
+ cr ();
+ fflush (rl_outstream);
+}
Index: readline.c
===================================================================
RCS file: /cvs/cvsfiles/devo/readline/readline.c,v
retrieving revision 1.47
diff -u -p -r1.47 readline.c
--- readline.c 1998/12/22 21:53:32 1.47
+++ readline.c 1999/05/13 20:30:09
@@ -286,6 +286,9 @@ char *_rl_comment_begin;
/* Keymap holding the function currently being executed. */
Keymap rl_executing_keymap;
+/* Non-zero means to erase entire line, including prompt, on empty input lines. */
+int rl_erase_empty_line = 0;
+
/* Line buffer and maintenence. */
char *rl_line_buffer = (char *)NULL;
int rl_line_buffer_len = 0;
@@ -488,6 +491,12 @@ readline_internal_charloop ()
if (rl_done == 0)
(*rl_redisplay_function) ();
+ /* If the application writer has told us to erase the entire line if
+ the only character typed was something bound to rl_newline, do so. */
+ if (rl_erase_empty_line && rl_done && rl_last_func == rl_newline &&
+ rl_point == 0 && rl_end == 0)
+ _rl_erase_entire_line ();
+
#if defined (READLINE_CALLBACKS)
return 0;
#else
@@ -1427,6 +1436,11 @@ rl_newline (count, key)
_rl_vi_reset_last ();
}
#endif /* VI_MODE */
+
+ /* If we've been asked to erase empty lines, suppress the final update,
+ since _rl_update_final calls crlf(). */
+ if (rl_erase_empty_line && rl_point == 0 && rl_end == 0)
+ return 0;
if (readline_echoing_p)
_rl_update_final ();
Index: readline.h
===================================================================
RCS file: /cvs/cvsfiles/devo/readline/readline.h,v
retrieving revision 1.12
diff -u -p -r1.12 readline.h
--- readline.h 1998/12/22 21:53:33 1.12
+++ readline.h 1999/05/13 20:30:09
@@ -288,6 +288,12 @@ extern VFunction *rl_deprep_term_functio
extern Keymap rl_executing_keymap;
extern Keymap rl_binding_keymap;
+/* Display variables. */
+/* If non-zero, readline will erase the entire line, including any prompt,
+ if the only thing typed on an otherwise-blank line is something bound to
+ rl_newline. */
+extern int rl_erase_empty_line;
+
/* Completion variables. */
/* Pointer to the generator function for completion_matches ().
NULL means to use filename_entry_function (), the default filename
I can install these, if there are no objections.
--Per Bothner
bothner@cygnus.com http://www.cygnus.com/~bothner
More information about the Gdb-patches
mailing list