mirror of
https://https.git.savannah.gnu.org/git/bash.git
synced 2026-08-10 20:20:38 +02:00
commit bash-20160715 snapshot
This commit is contained in:
+17
-2
@@ -50,6 +50,14 @@
|
||||
_rl_callback_func_t *_rl_callback_func = 0;
|
||||
_rl_callback_generic_arg *_rl_callback_data = 0;
|
||||
|
||||
/* Applications can set this to non-zero to have readline's signal handlers
|
||||
installed during the entire duration of reading a complete line, as in
|
||||
readline-6.2. This should be used with care, because it can result in
|
||||
readline receiving signals and not handling them until it's called again
|
||||
via rl_callback_read_char, thereby stealing them from the application.
|
||||
By default, signal handlers are only active while readline is active. */
|
||||
int rl_persistent_signal_handlers = 0;
|
||||
|
||||
/* **************************************************************** */
|
||||
/* */
|
||||
/* Callback Readline Functions */
|
||||
@@ -82,6 +90,11 @@ _rl_callback_newline ()
|
||||
|
||||
if (rl_prep_term_function)
|
||||
(*rl_prep_term_function) (_rl_meta_flag);
|
||||
|
||||
#if defined (HANDLE_SIGNALS)
|
||||
if (rl_persistent_signal_handlers)
|
||||
rl_set_signals ();
|
||||
#endif
|
||||
}
|
||||
|
||||
readline_internal_setup ();
|
||||
@@ -103,7 +116,8 @@ rl_callback_handler_install (prompt, linefunc)
|
||||
#if defined (HANDLE_SIGNALS)
|
||||
#define CALLBACK_READ_RETURN() \
|
||||
do { \
|
||||
rl_clear_signals (); \
|
||||
if (rl_persistent_signal_handlers == 0) \
|
||||
rl_clear_signals (); \
|
||||
return; \
|
||||
} while (0)
|
||||
#else
|
||||
@@ -140,7 +154,8 @@ rl_callback_read_char ()
|
||||
|
||||
#if defined (HANDLE_SIGNALS)
|
||||
/* Install signal handlers only when readline has control. */
|
||||
rl_set_signals ();
|
||||
if (rl_persistent_signal_handlers == 0)
|
||||
rl_set_signals ();
|
||||
#endif
|
||||
|
||||
do
|
||||
|
||||
@@ -1591,6 +1591,22 @@ using the callback interface should be prepared to clean up Readline's
|
||||
state if they wish to handle the signal before the line handler completes
|
||||
and restores the terminal state.
|
||||
|
||||
If an application using the callback interface wishes to have Readline
|
||||
install its signal handlers at the time the application calls
|
||||
@code{rl_callback_handler_install} and remove them only when a complete
|
||||
line of input has been read, it should set the
|
||||
@code{rl_persistent_signal_handlers} variable to a non-zero value.
|
||||
This allows an application to defer all of the handling of the signals
|
||||
Readline catches to Readline.
|
||||
Applications should use this variable with care; it can result in Readline
|
||||
catching signals and not acting on them (or allowing the application to react
|
||||
to them) until the application calls @code{rl_callback_read_char}. This
|
||||
can result in an application becoming less responsive to keyboard signals
|
||||
like SIGINT.
|
||||
If an application does not want or need to perform any signal handling, or
|
||||
does not need to do any processing between calls to @code{rl_callback_read_char},
|
||||
setting this variable may be desirable.
|
||||
|
||||
Readline provides two variables that allow application writers to
|
||||
control whether or not it will catch certain signals and act on them
|
||||
when they are received. It is important that applications change the
|
||||
@@ -1612,6 +1628,15 @@ Readline will install a signal handler for @code{SIGWINCH}.
|
||||
The default value of @code{rl_catch_sigwinch} is 1.
|
||||
@end deftypevar
|
||||
|
||||
@deftypevar int rl_persistent_signal_handlers
|
||||
If an application using the callback interface wishes Readline's signal
|
||||
handlers to be installed and active during the set of calls to
|
||||
@code{rl_callback_read_char} that constitutes an entire single line,
|
||||
it should set this variable to a non-zero value.
|
||||
|
||||
The default value of @code{rl_persistent_signal_handlers} is 0.
|
||||
@end deftypevar
|
||||
|
||||
@deftypevar int rl_change_environment
|
||||
If this variable is set to a non-zero value,
|
||||
and Readline is handling @code{SIGWINCH}, Readline will modify the
|
||||
@@ -1627,6 +1652,11 @@ for example),
|
||||
Readline provides convenience functions to do the necessary terminal
|
||||
and internal state cleanup upon receipt of a signal.
|
||||
|
||||
@deftypefun int rl_pending_signal (void)
|
||||
Return the signal number of the most recent signal Readline received but
|
||||
has not yet handled, or 0 if there is no pending signal.
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void rl_cleanup_after_signal (void)
|
||||
This function will reset the state of the terminal to what it was before
|
||||
@code{readline()} was called, and remove the Readline signal handlers for
|
||||
|
||||
@@ -4,7 +4,7 @@ Copyright (C) 1988-2016 Free Software Foundation, Inc.
|
||||
|
||||
@set EDITION 7.0
|
||||
@set VERSION 7.0
|
||||
@set UPDATED 20 April 2016
|
||||
@set UPDATED-MONTH April 2016
|
||||
@set UPDATED 16 July 2016
|
||||
@set UPDATED-MONTH July 2016
|
||||
|
||||
@set LASTCHANGE Wed Apr 20 13:32:48 PDT 2016
|
||||
@set LASTCHANGE Sat Jul 16 13:43:15 EDT 2016
|
||||
|
||||
+11
-1
@@ -442,6 +442,8 @@ extern void rl_cleanup_after_signal PARAMS((void));
|
||||
extern void rl_reset_after_signal PARAMS((void));
|
||||
extern void rl_free_line_state PARAMS((void));
|
||||
|
||||
extern int rl_pending_signal PARAMS((void));
|
||||
|
||||
extern void rl_echo_signal_char PARAMS((int));
|
||||
|
||||
extern int rl_set_paren_blink_timeout PARAMS((int));
|
||||
@@ -640,7 +642,7 @@ extern rl_compentry_func_t *rl_completion_entry_function;
|
||||
|
||||
/* Optional generator for menu completion. Default is
|
||||
rl_completion_entry_function (rl_filename_completion_function). */
|
||||
extern rl_compentry_func_t *rl_menu_completion_entry_function;
|
||||
extern rl_compentry_func_t *rl_menu_completion_entry_function;
|
||||
|
||||
/* If rl_ignore_some_completions_function is non-NULL it is the address
|
||||
of a function to call after all of the possible matches have been
|
||||
@@ -832,6 +834,14 @@ extern int rl_ignore_completion_duplicates;
|
||||
completion character will be inserted as any other. */
|
||||
extern int rl_inhibit_completion;
|
||||
|
||||
/* Applications can set this to non-zero to have readline's signal handlers
|
||||
installed during the entire duration of reading a complete line, as in
|
||||
readline-6.2. This should be used with care, because it can result in
|
||||
readline receiving signals and not handling them until it's called again
|
||||
via rl_callback_read_char, thereby stealing them from the application.
|
||||
By default, signal handlers are only active while readline is active. */
|
||||
extern int rl_persistent_signal_handlers;
|
||||
|
||||
/* Input error; can be returned by (*rl_getc_function) if readline is reading
|
||||
a top-level command (RL_ISSTATE (RL_STATE_READCMD)). */
|
||||
#define READERR (-2)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* signals.c -- signal handling support for readline. */
|
||||
|
||||
/* Copyright (C) 1987-2015 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1987-2016 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.
|
||||
@@ -585,6 +585,11 @@ rl_free_line_state ()
|
||||
_rl_reset_argument ();
|
||||
}
|
||||
|
||||
int
|
||||
rl_pending_signal ()
|
||||
{
|
||||
return (_rl_caught_signal);
|
||||
}
|
||||
#endif /* HANDLE_SIGNALS */
|
||||
|
||||
/* **************************************************************** */
|
||||
|
||||
Reference in New Issue
Block a user