From f1b255b12b2a78d915f4038f6ad19c5a86c7071c Mon Sep 17 00:00:00 2001 From: Chet Ramey Date: Wed, 30 Mar 2016 10:54:52 -0400 Subject: [PATCH] commit bash-20160311 snapshot --- CWRU/CWRU.chlog | 13 +++++++++++++ bashline.c | 4 ++++ lib/readline/display.c | 28 ++++++++++++++++++++++++++++ lib/readline/doc/rltech.texi | 4 ++++ lib/readline/doc/version.texi | 6 +++--- lib/readline/readline.h | 1 + 6 files changed, 53 insertions(+), 3 deletions(-) diff --git a/CWRU/CWRU.chlog b/CWRU/CWRU.chlog index a92a5542..aa84e848 100644 --- a/CWRU/CWRU.chlog +++ b/CWRU/CWRU.chlog @@ -10552,3 +10552,16 @@ examples/loadables/Makefile.in install-supported target to create it first. Bug with parallel install (`make -j 4 install') reported by Chris Staub + + 3/12 + ---- +lib/readline/display.c: + - rl_clear_visible_line: clear all screen lines occupied by the current + visible readline line. Inspired by report from Lauri Ranta + + +lib/readline/readline.h + - rl_clear_visible_line: extern declaration + +lib/readline/doc/rltech.texi + - rl_clear_visible_line: add documentation diff --git a/bashline.c b/bashline.c index 2ecd2f28..2040aa9e 100644 --- a/bashline.c +++ b/bashline.c @@ -4080,8 +4080,12 @@ bash_execute_unix_command (count, key) ce = rl_get_termcap ("ce"); if (ce) /* clear current line */ { +#if 0 fprintf (rl_outstream, "\r"); tputs (ce, 1, putx); +#else + rl_clear_visible_line (); +#endif fflush (rl_outstream); } else diff --git a/lib/readline/display.c b/lib/readline/display.c index f261933d..369fc145 100644 --- a/lib/readline/display.c +++ b/lib/readline/display.c @@ -2027,6 +2027,34 @@ rl_on_new_line () return 0; } +/* Clear all screen lines occupied by the current readline line buffer + (visible line) */ +int +rl_clear_visible_line () +{ + int curr_line; + + /* Make sure we move to column 0 so we clear the entire line */ +#if defined (__MSDOS__) + putc ('\r', rl_outstream); +#else + tputs (_rl_term_cr, 1, _rl_output_character_function); +#endif + _rl_last_c_pos = 0; + + /* Move to the last screen line of the current visible line */ + _rl_move_vert (_rl_vis_botlin); + + /* And erase screen lines going up to line 0 (first visible line) */ + for (curr_line = _rl_last_v_pos; curr_line >= 0; curr_line--) + { + _rl_move_vert (curr_line); + _rl_clear_to_eol (0); + } + + return 0; +} + /* Tell the update routines that we have moved onto a new line with the prompt already displayed. Code originally from the version of readline distributed with CLISP. rl_expand_prompt must have already been called diff --git a/lib/readline/doc/rltech.texi b/lib/readline/doc/rltech.texi index cc985d53..dbfe711f 100644 --- a/lib/readline/doc/rltech.texi +++ b/lib/readline/doc/rltech.texi @@ -963,6 +963,10 @@ redisplay. It should be used after setting @var{rl_already_prompted}. @end deftypefun +@deftypefun int rl_clear_visible_line (void) +Clear the screen lines corresponding to the current line's contents. +@end deftypefun + @deftypefun int rl_reset_line_state (void) Reset the display state to a clean state and redisplay the current line starting on a new line. diff --git a/lib/readline/doc/version.texi b/lib/readline/doc/version.texi index 131adc49..abeee593 100644 --- a/lib/readline/doc/version.texi +++ b/lib/readline/doc/version.texi @@ -4,7 +4,7 @@ Copyright (C) 1988-2016 Free Software Foundation, Inc. @set EDITION 7.0 @set VERSION 7.0 -@set UPDATED 28 February 2016 -@set UPDATED-MONTH February 2016 +@set UPDATED 12 March 2016 +@set UPDATED-MONTH March 2016 -@set LASTCHANGE Sun Feb 28 15:31:16 EST 2016 +@set LASTCHANGE Sat Mar 12 15:45:03 EST 2016 diff --git a/lib/readline/readline.h b/lib/readline/readline.h index 3fe689a6..0bd2e044 100644 --- a/lib/readline/readline.h +++ b/lib/readline/readline.h @@ -379,6 +379,7 @@ extern void rl_redisplay PARAMS((void)); extern int rl_on_new_line PARAMS((void)); extern int rl_on_new_line_with_prompt PARAMS((void)); extern int rl_forced_update_display PARAMS((void)); +extern int rl_clear_visible_line PARAMS((void)); extern int rl_clear_message PARAMS((void)); extern int rl_reset_line_state PARAMS((void)); extern int rl_crlf PARAMS((void));