prompt reprinting fixes for readline when screenwidth is less than prompt length; redirection fixes

This commit is contained in:
Chet Ramey
2021-09-27 10:29:22 -04:00
parent 72206eb271
commit fa1e33671d
5 changed files with 28 additions and 23 deletions
+19
View File
@@ -2086,3 +2086,22 @@ array.h
----
lib/readline/terminal.c
- rl_term_kP: fix typo. Fix from Koichi Murase <myoga.murase@gmail.com>
9/25
----
lib/readline/display.c
- rl_clear_visible_line: call _rl_clear_to_eol with _rl_screenwidth as
the argument so we clear out the entire line even if the terminal
doesn't have a clear-to-eol sequence; make sure to add a call to
rl_cr after that so we know we're always in column 0
- _rl_redisplay_after_sigwinch: just call rl_clear_visible_line instead
of erasing the last line of the display
- _rl_redisplay_after_sigwinch: if the prompt is longer than the screen
width, make sure to call _rl_reset_prompt to recalculate the
local_prompt_newlines array. Should fix issue from
https://savannah.gnu.org/support/index.php?110543
redir.c
- do_redirection_internal: if given [N]<&WORD- or [N]>&WORD- and WORD
expands to null, make it identical to <&- or >&- and close file
descriptor N (default 0). From a discussion back in 5/2021
+1 -1
View File
@@ -114,7 +114,7 @@
/* Define if you want the case-toggling operators (~[~]) and the
`capcase' variable attribute (declare -c). */
/* TAG: bash-5.2 disable */
/* TAG: bash-5.2 disable? */
#define CASEMOD_TOGGLECASE
#define CASEMOD_CAPCASE
+1 -1
View File
@@ -367,7 +367,7 @@ executing_line_number ()
return currently_executing_command->value.ArithFor->line;
#endif
return line_number;
return line_number;
}
else
return line_number;
+6 -16
View File
@@ -2588,7 +2588,8 @@ rl_clear_visible_line (void)
for (curr_line = _rl_last_v_pos; curr_line >= 0; curr_line--)
{
_rl_move_vert (curr_line);
_rl_clear_to_eol (0);
_rl_clear_to_eol (_rl_screenwidth);
_rl_cr (); /* in case we use space_to_eol() */
}
return 0;
@@ -3372,27 +3373,16 @@ _rl_redisplay_after_sigwinch (void)
screen line. */
if (_rl_term_cr)
{
_rl_move_vert (_rl_vis_botlin);
_rl_cr ();
_rl_last_c_pos = 0;
#if !defined (__MSDOS__)
if (_rl_term_clreol)
tputs (_rl_term_clreol, 1, _rl_output_character_function);
else
#endif
{
space_to_eol (_rl_screenwidth);
_rl_cr ();
}
rl_clear_visible_line ();
if (_rl_last_v_pos > 0)
_rl_move_vert (0);
}
else
rl_crlf ();
if (_rl_screenwidth < prompt_visible_length)
_rl_reset_prompt (); /* update local_prompt_newlines array */
/* Redraw only the last line of a multi-line prompt. */
t = strrchr (rl_display_prompt, '\n');
if (t)
+1 -5
View File
@@ -808,8 +808,6 @@ do_redirection_internal (redirect, flags, fnp)
continue. */
redirectee_word = redirection_expand (redirectee);
#if 0
/* TAG:bash-5.2 */
/* XXX - what to do with [N]<&$w- where w is unset or null? ksh93
turns it into [N]<&- or [N]>&- and closes N. */
if ((ri == r_move_input_word || ri == r_move_output_word) && redirectee_word == 0)
@@ -818,9 +816,7 @@ do_redirection_internal (redirect, flags, fnp)
rd.dest = 0;
new_redirect = make_redirection (sd, r_close_this, rd, 0);
}
else
#endif
if (redirectee_word == 0)
else if (redirectee_word == 0)
return (AMBIGUOUS_REDIRECT);
else if (redirectee_word[0] == '-' && redirectee_word[1] == '\0')
{