]> git.ipfire.org Git - thirdparty/bash.git/commitdiff
document new readline variables "active-region-start-color" and "active-region-end...
authorChet Ramey <chet.ramey@case.edu>
Fri, 11 Feb 2022 14:12:39 +0000 (09:12 -0500)
committerChet Ramey <chet.ramey@case.edu>
Fri, 11 Feb 2022 14:12:39 +0000 (09:12 -0500)
22 files changed:
CWRU/CWRU.chlog
MANIFEST
doc/bash.1
examples/loadables/perl/bperl.c
examples/loadables/perl/iperl.c
lib/readline/bind.c
lib/readline/display.c
lib/readline/doc/history.texi
lib/readline/doc/hstech.texi
lib/readline/doc/hsuser.texi
lib/readline/doc/readline.3
lib/readline/doc/rlman.texi
lib/readline/doc/rltech.texi
lib/readline/doc/rluser.texi
lib/readline/doc/rluserman.texi
lib/readline/doc/version.texi
lib/readline/readline.c
lib/readline/rlprivate.h
lib/readline/terminal.c
tests/nquote.right
tests/nquote.tests
tests/nquote5.sub [new file with mode: 0644]

index 859135ee23b9944bb4d6554f3a847daa30327d11..ff9f2a5c5af585b5160150046388f0e6b0c69a99 100644 (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
index a4cd9ead6541b751ac65ee01d196377eb82647df..eba2c2670e6f03f39257712f8da88a26478c1b69 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -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
index 7056ec296b0e248e8969ec5b3990783507659ef1..cab7003648ce14da21c7bd1406df0c47b5bee723 100644 (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.
index 77e3f7c1b1013efba884035a37d6c92f8d924034..5b15258b21e467af69f9deb538747c4020a0f720 100644 (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
index 92a60387d8d928e894af987c12ab380b7e9e120a..89438af1698195c69f51f26727720400d225eb34 100644 (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);
index aa69dce3a79dfde1ec3ecd4ccbe2071d4b814701..971116a90c58ef1ad5d27b4718f6db89fc7b6026 100644 (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
index e68673adcea0acd93ffda15a62ddc11fd9af358a..fe1e4cc9c96516695c6931e8d070eea379d89b35 100644 (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)
index 7a3a4767e7a591ded5f14e0b4879cd4a28358e37..721118bce1e8bfb9a9bbf75da627c22fb5ef458e 100644 (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
index 7ac11953df304255a3f64424ab073656ab731e84..da6417b48fda487e24853fab3d7176912ba89e10 100644 (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
index 0a81c46e932f1821187948487064a8fe343d742a..99351e32b67fd02f1f95ce3e340feeb6b5c115ee 100644 (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
index 92ee63d132148ccd8d587791ef6497f409cad507..e3f6e85074f29ed4cf1eaf61ea98290f4130903a 100644 (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.
index ec7487b7a78812f10d236078f88fd1b431aa03c5..d046b87d1fbdfa5bcfe15cd8f64979104b56cadb 100644 (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
index a1eac5ebc71cf223b161107ae8e41aa959cf6d2c..01343edc88aaa1491ae40a917e8838bc9032a91e 100644 (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
index 505225b9807631d065896eba222e77599943c99d..63e2c75dd619aa8bf23e79d24fba085eea365b67 100644 (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.
index 6e8e848b6e5ae993259eb3a964e8573fe3a73fc5..ae9ec6eb4f8f267d80202adccfe193aa622b7fd1 100644 (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
index 0d5883fb6530f63d76b16ce919891abd0c3f21cc..46c88bdb0a48e607b6907fbc481bf9182004d6b8 100644 (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
index c597edb7387940406f935ace2941b7c9b8f9fedd..371e1fbc66caf8b64bc919fc06b0509955827b6f 100644 (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                         */
index 3b4cba440751cf23db992766dc60f3aea2597f1d..db20b92c9b6f48f0326839ab37fad195b96e33fe 100644 (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);
index 5b4ef1bd505c660d70b5a957f6e8210231b9c38e..bddf1ed42078e38e8a1ad7200ac423305dc8c296 100644 (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                 */
index 5c9a51662f59427e11d141e869fb203f18a1e4e5..918aa429506a9d4f797d1611651494d2b0f8ed77 100644 (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
index 068df365b0e268c02eede0dcddda4b1235613766..e4d1a56f2598cd4f05c6ba4b67958abfac4ec392 100644 (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
diff --git a/tests/nquote5.sub b/tests/nquote5.sub
new file mode 100644 (file)
index 0000000..8a2870e
--- /dev/null
@@ -0,0 +1,22 @@
+recho $( echo a$'\01)'b )
+recho $( echo a\ 1b )
+recho $( echo \\ 1 )
+recho $( echo \\\ 1 )
+
+LC_CTYPE=C
+od -c <<EOF
+a$'\01'b
+a\ 1b
+EOF
+
+od -c <<EOF
+${none-a$'\01'b}
+${none-a\ 1b}
+EOF
+
+V=Aa$'\01'b
+od -c <<EOF
+${V%a$'\01'b}
+${V%a\ 1b}
+EOF
+