document new readline variables "active-region-start-color" and "active-region-end-color"

This commit is contained in:
Chet Ramey
2022-02-11 09:12:39 -05:00
parent d70b53393e
commit bf09dfc08d
22 changed files with 283 additions and 70 deletions
+31 -1
View File
@@ -3124,7 +3124,7 @@ lib/readline/display.c
- putc_face: if setting standout mode, check for both the start color
and end color variables and output the start color string. If turning
off standout mode (normal face), output the end color string. Both
varibables must be set
variables must be set
lib/readline/{readline.c,rlprivate.h}
- declarations for _rl_active_region_start_color and
@@ -3139,3 +3139,33 @@ shell.c
- subshell_exit: make sure to set last_command_exit_value before
calling the exit trap. Fixes bug reported by Greg Edwards
<gedwards@ddn.com>
2/9
---
lib/readline/{terminal.c,rlprivate.h}
- _rl_region_color_on,_rl_region_color_off: functions to output the
_rl_active_region_start_color and _rl_active_region_end_color
- _rl_reset_region_color: function to encapsulate setting the region
color to an arbitrary string, including doing memory management
lib/readline/display.c
- putc_face: call _rl_region_color_on and _rl_region_color_off instead
of _rl_standout_on and _rl_standout_off
lib/readline/terminal.c
- _rl_init_terminal_io: initialize _rl_active_region_start_color and
_rl_active_region_end_color from _rl_term_so and _rl_term_se,
respectively; reset every time the terminal is changed
- _rl_init_terminal_io: turn off the active region for a dumb terminal
lib/readline/bind.c
- sv_region_{start,end}_color: call _rl_reset_region_color with the
appropriate value for WHICH
2/10
----
lib/readline/doc/{rluser.texi,readline.3},doc/bash.1
- active-region-start-color,active-region-end-color: documented new
bindable readline variables
- enable-active-region: document using active-region-start-color to
highlight the text in the region
+1
View File
@@ -1274,6 +1274,7 @@ tests/nquote1.sub f
tests/nquote2.sub f
tests/nquote3.sub f
tests/nquote4.sub f
tests/nquote5.sub f
tests/nquote1.tests f
tests/nquote1.right f
tests/nquote2.tests f
+28 -2
View File
@@ -5,12 +5,12 @@
.\" Case Western Reserve University
.\" chet.ramey@case.edu
.\"
.\" Last Change: Sat Feb 5 18:20:32 EST 2022
.\" Last Change: Thu Feb 10 11:04:52 EST 2022
.\"
.\" bash_builtins, strip all but Built-Ins section
.if \n(zZ=1 .ig zZ
.if \n(zY=1 .ig zY
.TH BASH 1 "2022 February 5" "GNU Bash 5.2"
.TH BASH 1 "2022 February 10" "GNU Bash 5.2"
.\"
.\" There's some problem with having a `@'
.\" in a tagged paragraph with the BSD man macros.
@@ -5918,6 +5918,30 @@ The variables and their default values are:
.PP
.PD 0
.TP
.B active-region-start-color
A string variable that controls the text color and background when displaying
the text in the active region (see the description of
\fBenable\-active\-region\fP below).
This string must not take up any physical character positions on the display,
so it should consist only of terminal escape sequences.
It is output to the terminal before displaying the text in the active region.
This variable is reset to the default value whenever the terminal type changes.
The default value is the string that puts the terminal in standout mode,
as obtained from the terminal's terminfo description.
A sample value might be \f(CW\ee[01;33m\fP.
.TP
.B active-region-end-color
A string variable that "undoes" the effects of \fBactive-region-start-color\fP
and restores "normal" terminal display appearance after displaying text
in the active region.
This string must not take up any physical character positions on the display,
so it should consist only of terminal escape sequences.
It is output to the terminal after displaying the text in the active region.
This variable is reset to the default value whenever the terminal type changes.
The default value is the string that restores the terminal from standout mode,
as obtained from the terminal's terminfo description.
A sample value might be \f(CW\ee[0m\fP.
.TP
.B bell\-style (audible)
Controls what happens when readline wants to ring the terminal bell.
If set to \fBnone\fP, readline never rings the bell. If set to
@@ -6037,6 +6061,8 @@ The text between the point and mark is referred to as the \fIregion\fP.
When this variable is set to \fIOn\fP, readline allows certain commands
to designate the region as \fIactive\fP.
When the region is active, readline highlights the text in the region using
the value of the \fBactive\-region\-start\-color\fP, which defaults to the
string that enables
the terminal's standout mode.
The active region shows the text inserted by bracketed-paste and any
matching text found by incremental and non-incremental history searches.
+12 -5
View File
@@ -3,23 +3,24 @@
*/
#include <config.h>
#include <fcntl.h>
#include <errno.h>
#include "builtins.h"
#include "shell.h"
#include "common.h"
#ifndef errno
extern int errno;
#endif
extern char **make_builtin_argv ();
extern char **make_builtin_argv (WORD_LIST *, int *);
extern char **export_env;
extern int perl_main();
extern void perl_close(void);
extern int perl_main(int, char **, char **);
bperl_builtin(list)
WORD_LIST *list;
int
bperl_builtin(WORD_LIST *list)
{
char **v;
int c, r;
@@ -31,6 +32,12 @@ WORD_LIST *list;
return r;
}
void
bperl_builtin_unload (char *s)
{
perl_close();
}
char *bperl_doc[] = {
"An interface to a perl5 interpreter.",
(char *)0
+15 -1
View File
@@ -1,15 +1,29 @@
#include <EXTERN.h> /* from the Perl distribution */
#include <perl.h> /* from the Perl distribution */
extern void xs_init _((void));
#define iperl my_perl /* I guess the name `my_perl' is required */
extern void xs_init (pTHX);
static PerlInterpreter *iperl; /*** The Perl interpreter ***/
static int first = 1;
void
perl_close (void)
{
PERL_SYS_TERM();
}
int
perl_main(int argc, char **argv, char **env)
{
int r;
if (first) {
first = 0;
PERL_SYS_INIT3(&argc, &argv, &env);
}
iperl = perl_alloc();
perl_construct(iperl);
perl_parse(iperl, xs_init, argc, argv, (char **)NULL);
+3 -25
View File
@@ -1,6 +1,6 @@
/* bind.c -- key binding and startup file support for the readline library. */
/* Copyright (C) 1987-2021 Free Software Foundation, Inc.
/* Copyright (C) 1987-2022 Free Software Foundation, Inc.
This file is part of the GNU Readline Library (Readline), a library
for reading lines of text with interactive input and history editing.
@@ -2227,35 +2227,13 @@ sv_seqtimeout (const char *value)
static int
sv_region_start_color (const char *value)
{
int len;
free (_rl_active_region_start_color);
if (value && *value)
{
_rl_active_region_start_color = (char *)xmalloc (2 * strlen (value) + 1);
rl_translate_keyseq (value, _rl_active_region_start_color, &len);
_rl_active_region_start_color[len] = '\0';
}
else
_rl_active_region_start_color = NULL;
return 0;
return (_rl_reset_region_color (0, value));
}
static int
sv_region_end_color (const char *value)
{
int len;
free (_rl_active_region_end_color);
if (value && *value)
{
_rl_active_region_end_color = (char *)xmalloc (2 * strlen (value) + 1);
rl_translate_keyseq (value, _rl_active_region_end_color, &len);
_rl_active_region_end_color[len] = '\0';
}
else
_rl_active_region_end_color = NULL;
return 0;
return (_rl_reset_region_color (1, value));
}
static int
+3 -13
View File
@@ -1,6 +1,6 @@
/* display.c -- readline redisplay facility. */
/* Copyright (C) 1987-2021 Free Software Foundation, Inc.
/* Copyright (C) 1987-2022 Free Software Foundation, Inc.
This file is part of the GNU Readline Library (Readline), a library
for reading lines of text with interactive input and history editing.
@@ -1595,19 +1595,9 @@ putc_face (int c, int face, char *cur_face)
if (face != FACE_NORMAL && face != FACE_STANDOUT)
return;
if (face == FACE_STANDOUT && cf == FACE_NORMAL)
{
if (_rl_active_region_start_color && _rl_active_region_end_color)
tputs (_rl_active_region_start_color, 1, _rl_output_character_function);
else
_rl_standout_on ();
}
_rl_region_color_on ();
if (face == FACE_NORMAL && cf == FACE_STANDOUT)
{
if (_rl_active_region_start_color && _rl_active_region_end_color)
tputs (_rl_active_region_end_color, 1, _rl_output_character_function);
else
_rl_standout_off ();
}
_rl_region_color_off ();
*cur_face = face;
}
if (c != EOF)
+1 -1
View File
@@ -12,7 +12,7 @@ This document describes the GNU History library
a programming tool that provides a consistent user interface for
recalling lines of previously typed input.
Copyright @copyright{} 1988--2020 Free Software Foundation, Inc.
Copyright @copyright{} 1988--2022 Free Software Foundation, Inc.
@quotation
Permission is granted to copy, distribute and/or modify this document
+1 -1
View File
@@ -1,7 +1,7 @@
@ignore
This file documents the user interface to the GNU History library.
Copyright (C) 1988-2020 Free Software Foundation, Inc.
Copyright (C) 1988-2022 Free Software Foundation, Inc.
Authored by Brian Fox and Chet Ramey.
Permission is granted to make and distribute verbatim copies of this manual
+1 -1
View File
@@ -1,7 +1,7 @@
@ignore
This file documents the user interface to the GNU History library.
Copyright (C) 1988--2020 Free Software Foundation, Inc.
Copyright (C) 1988--2022 Free Software Foundation, Inc.
Authored by Brian Fox and Chet Ramey.
Permission is granted to make and distribute verbatim copies of this manual
+28 -2
View File
@@ -6,9 +6,9 @@
.\" Case Western Reserve University
.\" chet.ramey@case.edu
.\"
.\" Last Change: Mon Nov 15 17:06:54 EST 2021
.\" Last Change: Thu Feb 10 10:58:32 EST 2022
.\"
.TH READLINE 3 "2021 November 15" "GNU Readline 8.1"
.TH READLINE 3 "2022 February 10" "GNU Readline 8.2"
.\"
.\" File Name macro. This used to be `.PN', for Path Name,
.\" but Sun doesn't seem to like that very much.
@@ -339,6 +339,30 @@ The variables and their default values are:
.PP
.PD 0
.TP
.B active-region-start-color
A string variable that controls the text color and background when displaying
the text in the active region (see the description of
\fBenable\-active\-region\fP below).
This string must not take up any physical character positions on the display,
so it should consist only of terminal escape sequences.
It is output to the terminal before displaying the text in the active region.
This variable is reset to the default value whenever the terminal type changes.
The default value is the string that puts the terminal in standout mode,
as obtained from the terminal's terminfo description.
A sample value might be \f(CW\ee[01;33m\fP.
.TP
.B active-region-end-color
A string variable that "undoes" the effects of \fBactive-region-start-color\fP
and restores "normal" terminal display appearance after displaying text
in the active region.
This string must not take up any physical character positions on the display,
so it should consist only of terminal escape sequences.
It is output to the terminal after displaying the text in the active region.
This variable is reset to the default value whenever the terminal type changes.
The default value is the string that restores the terminal from standout mode,
as obtained from the terminal's terminfo description.
A sample value might be \f(CW\ee[0m\fP.
.TP
.B bell\-style (audible)
Controls what happens when readline wants to ring the terminal bell.
If set to \fBnone\fP, readline never rings the bell. If set to
@@ -458,6 +482,8 @@ The text between the point and mark is referred to as the \fIregion\fP.
When this variable is set to \fIOn\fP, readline allows certain commands
to designate the region as \fIactive\fP.
When the region is active, readline highlights the text in the region using
the value of the \fBactive\-region\-start\-color\fP, which defaults to the
string that enables
the terminal's standout mode.
The active region shows the text inserted by bracketed-paste and any
matching text found by incremental and non-incremental history searches.
+1 -1
View File
@@ -13,7 +13,7 @@ This manual describes the GNU Readline Library
consistency of user interface across discrete programs which provide
a command line interface.
Copyright @copyright{} 1988--2020 Free Software Foundation, Inc.
Copyright @copyright{} 1988--2022 Free Software Foundation, Inc.
@quotation
Permission is granted to copy, distribute and/or modify this document
+1 -1
View File
@@ -7,7 +7,7 @@ This document describes the GNU Readline Library, a utility for aiding
in the consistency of user interface across discrete programs that need
to provide a command line interface.
Copyright (C) 1988--2020 Free Software Foundation, Inc.
Copyright (C) 1988--2022 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
+29 -1
View File
@@ -9,7 +9,7 @@ use these features. There is a document entitled "readline.texinfo"
which contains both end-user and programmer documentation for the
GNU Readline Library.
Copyright (C) 1988--2020 Free Software Foundation, Inc.
Copyright (C) 1988--2022 Free Software Foundation, Inc.
Authored by Brian Fox and Chet Ramey.
@@ -419,6 +419,32 @@ variables.
@cindex variables, readline
@table @code
@item active-region-start-color
@vindex active-region-start-color
A string variable that controls the text color and background when displaying
the text in the active region (see the description of
@code{enable-active-region} below).
This string must not take up any physical character positions on the display,
so it should consist only of terminal escape sequences.
It is output to the terminal before displaying the text in the active region.
This variable is reset to the default value whenever the terminal type changes.
The default value is the string that puts the terminal in standout mode,
as obtained from the terminal's terminfo description.
A sample value might be @samp{\e[01;33m}.
@item active-region-end-color
@vindex active-region-end-color
A string variable that "undoes" the effects of @code{active-region-start-color}
and restores "normal" terminal display appearance after displaying text
in the active region.
This string must not take up any physical character positions on the display,
so it should consist only of terminal escape sequences.
It is output to the terminal after displaying the text in the active region.
This variable is reset to the default value whenever the terminal type changes.
The default value is the string that restores the terminal from standout mode,
as obtained from the terminal's terminfo description.
A sample value might be @samp{\e[0m}.
@item bell-style
@vindex bell-style
Controls what happens when Readline wants to ring the terminal bell.
@@ -553,6 +579,8 @@ The text between the point and mark is referred to as the @dfn{region}.
When this variable is set to @samp{On}, Readline allows certain commands
to designate the region as @dfn{active}.
When the region is active, Readline highlights the text in the region using
the value of the @code{active-region-start-color}, which defaults to the
string that enables
the terminal's standout mode.
The active region shows the text inserted by bracketed-paste and any
matching text found by incremental and non-incremental history searches.
+1 -1
View File
@@ -12,7 +12,7 @@ This manual describes the end user interface of the GNU Readline Library
consistency of user interface across discrete programs which provide
a command line interface.
Copyright @copyright{} 1988--2020 Free Software Foundation, Inc.
Copyright @copyright{} 1988--2022 Free Software Foundation, Inc.
@quotation
Permission is granted to copy, distribute and/or modify this document
+7 -6
View File
@@ -1,10 +1,11 @@
@ignore
Copyright (C) 1988-2021 Free Software Foundation, Inc.
Copyright (C) 1988-2022 Free Software Foundation, Inc.
@end ignore
@set EDITION 8.1
@set VERSION 8.1
@set UPDATED 15 November 2021
@set UPDATED-MONTH November 2021
@set EDITION 8.2
@set VERSION 8.2
@set LASTCHANGE Mon Nov 15 17:05:28 EST 2021
@set UPDATED Thu Feb 10 10:56:04 EST 2022
@set UPDATED-MONTH February 2022
@set LASTCHANGE Thu Feb 10 10:56:20 EST 2022
-3
View File
@@ -323,9 +323,6 @@ int _rl_show_mode_in_prompt = 0;
int _rl_enable_bracketed_paste = BRACKETED_PASTE_DEFAULT;
int _rl_enable_active_region = BRACKETED_PASTE_DEFAULT;
char *_rl_active_region_start_color = NULL;
char *_rl_active_region_end_color = NULL;
/* **************************************************************** */
/* */
/* Top Level Functions */
+4 -1
View File
@@ -1,7 +1,7 @@
/* rlprivate.h -- functions and variables global to the readline library,
but not intended for use by applications. */
/* Copyright (C) 1999-2021 Free Software Foundation, Inc.
/* Copyright (C) 1999-2022 Free Software Foundation, Inc.
This file is part of the GNU Readline Library (Readline), a library
for reading lines of text with interactive input and history editing.
@@ -415,6 +415,9 @@ extern void _rl_control_keypad (int);
extern void _rl_set_cursor (int, int);
extern void _rl_standout_on (void);
extern void _rl_standout_off (void);
extern int _rl_reset_region_color (int, const char *);
extern void _rl_region_color_on (void);
extern void _rl_region_color_off (void);
/* text.c */
extern void _rl_fix_point (int);
+83 -4
View File
@@ -1,6 +1,6 @@
/* terminal.c -- controlling the terminal with termcap. */
/* Copyright (C) 1996-2021 Free Software Foundation, Inc.
/* Copyright (C) 1996-2022 Free Software Foundation, Inc.
This file is part of the GNU Readline Library (Readline), a library
for reading lines of text with interactive input and history editing.
@@ -185,6 +185,11 @@ static char *_rl_term_kN;
static char *_rl_term_vs; /* very visible */
static char *_rl_term_ve; /* normal */
/* User-settable color sequences to begin and end the active region. Defaults
are rl_term_so and rl_term_se on non-dumb terminals. */
char *_rl_active_region_start_color = NULL;
char *_rl_active_region_end_color = NULL;
/* It's not clear how HPUX is so broken here. */
#ifdef TGETENT_BROKEN
# define TGETENT_SUCCESS 0
@@ -466,7 +471,7 @@ _rl_init_terminal_io (const char *terminal_name)
{
const char *term;
char *buffer;
int tty, tgetent_ret, dumbterm;
int tty, tgetent_ret, dumbterm, reset_region_colors;
term = terminal_name ? terminal_name : sh_get_env_value ("TERM");
_rl_term_clrpag = _rl_term_cr = _rl_term_clreol = _rl_term_clrscroll = (char *)NULL;
@@ -477,6 +482,8 @@ _rl_init_terminal_io (const char *terminal_name)
dumbterm = STREQ (term, "dumb");
reset_region_colors = 1;
#ifdef __MSDOS__
_rl_term_im = _rl_term_ei = _rl_term_ic = _rl_term_IC = (char *)NULL;
_rl_term_up = _rl_term_dc = _rl_term_DC = _rl_visible_bell = (char *)NULL;
@@ -562,6 +569,11 @@ _rl_init_terminal_io (const char *terminal_name)
escape sequences */
_rl_enable_bracketed_paste = 0;
/* No terminal so/se capabilities. */
_rl_enable_active_region = 0;
_rl_reset_region_color (0, NULL);
_rl_reset_region_color (1, NULL);
/* Reasonable defaults for tgoto(). Readline currently only uses
tgoto if _rl_term_IC or _rl_term_DC is defined, but just in case we
change that later... */
@@ -616,8 +628,14 @@ _rl_init_terminal_io (const char *terminal_name)
/* There's no way to determine whether or not a given terminal supports
bracketed paste mode, so we assume a terminal named "dumb" does not. */
if (dumbterm)
_rl_enable_bracketed_paste = 0;
_rl_enable_bracketed_paste = _rl_enable_active_region = 0;
if (reset_region_colors)
{
_rl_reset_region_color (0, _rl_term_so);
_rl_reset_region_color (1, _rl_term_se);
}
return 0;
}
@@ -789,6 +807,67 @@ _rl_standout_off (void)
#endif
}
/* **************************************************************** */
/* */
/* Controlling color for a portion of the line */
/* */
/* **************************************************************** */
/* Reset the region color variables to VALUE depending on WHICH (0 == start,
1 == end). This is where all the memory allocation for the color variable
strings is performed. We might want to pass a flag saying whether or not
to translate VALUE like a key sequence, but it doesn't really matter. */
int
_rl_reset_region_color (int which, const char *value)
{
int len;
if (which == 0)
{
free (_rl_active_region_start_color);
if (value && *value)
{
_rl_active_region_start_color = (char *)xmalloc (2 * strlen (value) + 1);
rl_translate_keyseq (value, _rl_active_region_start_color, &len);
_rl_active_region_start_color[len] = '\0';
}
else
_rl_active_region_start_color = NULL;
}
else
{
free (_rl_active_region_end_color);
if (value && *value)
{
_rl_active_region_end_color = (char *)xmalloc (2 * strlen (value) + 1);
rl_translate_keyseq (value, _rl_active_region_end_color, &len);
_rl_active_region_end_color[len] = '\0';
}
else
_rl_active_region_end_color = NULL;
}
return 0;
}
void
_rl_region_color_on (void)
{
#ifndef __MSDOS__
if (_rl_active_region_start_color && _rl_active_region_end_color)
tputs (_rl_active_region_start_color, 1, _rl_output_character_function);
#endif
}
void
_rl_region_color_off (void)
{
#ifndef __MSDOS__
if (_rl_active_region_start_color && _rl_active_region_end_color)
tputs (_rl_active_region_end_color, 1, _rl_output_character_function);
#endif
}
/* **************************************************************** */
/* */
/* Controlling the Meta Key and Keypad */
+10
View File
@@ -68,3 +68,13 @@ argv[1] = <^?>
\q
foo
./nquote4.sub: line 6: quux: command not found
argv[1] = <a^A)b>
argv[1] = <a^Ab>
argv[1] = <^A>
argv[1] = <\^A>
0000000 a $ ' \ 0 1 ' b \n a 001 b \n
0000015
0000000 a $ ' \ 0 1 ' b \n a 001 b \n
0000015
0000000 A \n A \n
0000004
+1
View File
@@ -139,3 +139,4 @@ ${THIS_SH} ./nquote1.sub
${THIS_SH} ./nquote2.sub
${THIS_SH} ./nquote3.sub
${THIS_SH} ./nquote4.sub
${THIS_SH} ./nquote5.sub
+22
View File
@@ -0,0 +1,22 @@
recho $( echo a$'\01)'b )
recho $( echo ab )
recho $( echo \ )
recho $( echo \\ )
LC_CTYPE=C
od -c <<EOF
a$'\01'b
ab
EOF
od -c <<EOF
${none-a$'\01'b}
${none-ab}
EOF
V=Aa$'\01'b
od -c <<EOF
${V%a$'\01'b}
${V%ab}
EOF