commit bash-20200410 snapshot

This commit is contained in:
Chet Ramey
2020-04-13 10:31:06 -04:00
parent b3968b54c1
commit 0db5ff0129
5 changed files with 59 additions and 4 deletions
+28
View File
@@ -7948,3 +7948,31 @@ builtins/wait.def
the JWAIT_WAITING flag, and clean up by calling unset_waitlist().
From a suggestion from Robert Elz <kre@munnari.oz.au> back in 3/2019
(originally in 10/2017)
4/11
----
lib/readline/display.c
- update_line: in step 5b of the line wrapping prompt code, make sure
OFDF and NFDF are set before performing a dumb update
4/12
----
sig.c
- termsig_handler: make sure to restore TOP_LEVEL_SIGMASK before
resending a terminating signal to ourselves, in the event that this
is called in a signal handler context with the terminating signal
blocked. Inspired by a report from <gentoo_eshoes@tutanota.com>
4/13
----
lib/readline/text.c
- rl_newline: if the region is active, call rl_redisplay to clear
standout mode before returning
lib/readline/display.c
- norm_face: new function to mark a portion of the invisible face
buffer as normal text (no standout)
- rl_redisplay: if the line consumes more than a screen's worth of
lines, mark the lines that are off the top of the display as having
a `normal' face
+25
View File
@@ -65,6 +65,7 @@ extern char *strchr (), *strrchr ();
static void putc_face PARAMS((int, int, char *));
static void puts_face PARAMS((const char *, const char *, int));
static void norm_face PARAMS((char *, int));
static void update_line PARAMS((char *, char *, char *, char *, int, int, int, int));
static void space_to_eol PARAMS((int));
@@ -1246,6 +1247,21 @@ rl_redisplay (void)
_rl_last_c_pos > wrap_offset && \
o_cpos < prompt_last_invisible)
/* We don't want to highlight anything that's going to be off the top
of the display; if the current line takes up more than an entire
screen, just mark the lines that won't be displayed as having a
`normal' face.
It's imperfect, but better than display corruption. */
if (rl_mark_active_p () && inv_botlin > _rl_screenheight)
{
int extra;
extra = inv_botlin - _rl_screenheight;
for (linenum = 0; linenum <= extra; linenum++)
norm_face (INV_LINE_FACE(linenum), INV_LLEN (linenum));
}
/* For each line in the buffer, do the updating display. */
for (linenum = 0; linenum <= inv_botlin; linenum++)
{
@@ -1586,6 +1602,12 @@ puts_face (const char *str, const char *face, int n)
putc_face (EOF, FACE_NORMAL, &cur_face);
}
static void
norm_face (char *face, int n)
{
memset (face, FACE_NORMAL, n);
}
#define ADJUST_CPOS(x) do { _rl_last_c_pos -= (x) ; cpos_adjusted = 1; } while (0)
/* PWP: update_line() is based on finding the middle difference of each
@@ -1758,6 +1780,9 @@ update_line (char *old, char *old_face, char *new, char *new_face, int current_l
ne = new + nmax;
nd = newbytes;
nfd = new + nd;
ofdf = old_face + oldbytes;
nfdf = new_face + newbytes;
goto dumb_update;
}
if (oldbytes != 0 && newbytes != 0)
-2
View File
@@ -1095,10 +1095,8 @@ rl_newline (int count, int key)
if (rl_mark_active_p ())
{
rl_deactivate_mark ();
#if 0 /* Not yet */
(*rl_redisplay_function) ();
_rl_want_redisplay = 0;
#endif
}
rl_done = 1;
+5 -1
View File
@@ -608,7 +608,11 @@ termsig_handler (sig)
/* We don't change the set of blocked signals. If a user starts the shell
with a terminating signal blocked, we won't get here (and if by some
magic chance we do, we'll exit below). */
magic chance we do, we'll exit below). What we do is to restore the
top-level signal mask, in case this is called from a terminating signal
handler context, in which case the signal is blocked. */
restore_sigmask ();
set_signal_handler (sig, SIG_DFL);
kill (getpid (), sig);
+1 -1
View File
@@ -1,4 +1,4 @@
BUILD_DIR=/usr/local/build/bash/bash-current
BUILD_DIR=/usr/local/build/chet/bash/bash-current
THIS_SH=$BUILD_DIR/bash
PATH=$PATH:$BUILD_DIR