diff options
author | Chet Ramey <chet.ramey@case.edu> | 2016-08-22 16:05:57 -0400 |
---|---|---|
committer | Chet Ramey <chet.ramey@case.edu> | 2016-08-22 16:05:57 -0400 |
commit | 2efb4eb0455521aac781005bc3a681d4dec17259 (patch) | |
tree | cd0429a3a571ac927d8b842ee4e5f229ddec5d3a | |
parent | 4e554b68943268418bd66828ed663731ba6154d7 (diff) | |
download | readline-7.0-testing.tar.gz |
readline-7.0 rc2 distributionreadline-7.0-rc2readline-7.0-testing
-rw-r--r-- | CHANGES | 10 | ||||
-rw-r--r-- | CHANGES-7.0 | 11 | ||||
-rw-r--r-- | bind.c | 4 | ||||
-rw-r--r-- | callback.c | 19 | ||||
-rw-r--r-- | display.c | 10 | ||||
-rw-r--r-- | doc/rltech.texi | 32 | ||||
-rw-r--r-- | doc/version.texi | 6 | ||||
-rw-r--r-- | readline.h | 12 | ||||
-rw-r--r-- | signals.c | 7 |
9 files changed, 97 insertions, 14 deletions
@@ -106,6 +106,9 @@ hh. Fixed an issue that caused completion of git commands to display ii. Fixed several redisplay bugs having to do with multibyte characters and invisible characters in prompt strings. +jj. Fixed a bug that caused mode strings to be displayed incorrectly if the prompt was + shorter than the mode string. + 2. New Features in Readline a. The history truncation code now uses the same error recovery mechansim as @@ -170,6 +173,13 @@ q. Fixed a bug with displaying completions when the prefix display length r. The :p history modifier now applies to the entire line, so any expansion specifying :p causes the line to be printed instead of expanded. +s. New application-callable function: rl_pending_signal(): returns the signal + number of any signal readline has caught but not yet handled. + +t. New application-settable variable: rl_persistent_signal_handlers: if set to a + non-zero value, readline will enable the readline-6.2 signal handler behavior + in callback mode: handlers are installed when rl_callback_handler_install is + called and removed removed when a complete line has been read. ------------------------------------------------------------------------------- This document details the changes between this version, readline-6.3, and the diff --git a/CHANGES-7.0 b/CHANGES-7.0 index 561b079..36694cb 100644 --- a/CHANGES-7.0 +++ b/CHANGES-7.0 @@ -106,6 +106,9 @@ hh. Fixed an issue that caused completion of git commands to display ii. Fixed several redisplay bugs having to do with multibyte characters and invisible characters in prompt strings. +jj. Fixed a bug that caused mode strings to be displayed incorrectly if the prompt was + shorter than the mode string. + 2. New Features in Readline a. The history truncation code now uses the same error recovery mechansim as @@ -169,3 +172,11 @@ q. Fixed a bug with displaying completions when the prefix display length r. The :p history modifier now applies to the entire line, so any expansion specifying :p causes the line to be printed instead of expanded. + +s. New application-callable function: rl_pending_signal(): returns the signal + number of any signal readline has caught but not yet handled. + +t. New application-settable variable: rl_persistent_signal_handlers: if set to a + non-zero value, readline will enable the readline-6.2 signal handler behavior + in callback mode: handlers are installed when rl_callback_handler_install is + called and removed removed when a complete line has been read. @@ -2591,9 +2591,9 @@ _rl_get_string_variable_value (name) else if (_rl_stricmp (name, "emacs-mode-string") == 0) return (_rl_emacs_mode_str ? _rl_emacs_mode_str : RL_EMACS_MODESTR_DEFAULT); else if (_rl_stricmp (name, "vi-cmd-mode-string") == 0) - return (_rl_emacs_mode_str ? _rl_emacs_mode_str : RL_VI_CMD_MODESTR_DEFAULT); + return (_rl_vi_cmd_mode_str ? _rl_vi_cmd_mode_str : RL_VI_CMD_MODESTR_DEFAULT); else if (_rl_stricmp (name, "vi-ins-mode-string") == 0) - return (_rl_emacs_mode_str ? _rl_emacs_mode_str : RL_VI_INS_MODESTR_DEFAULT); + return (_rl_vi_ins_mode_str ? _rl_vi_ins_mode_str : RL_VI_INS_MODESTR_DEFAULT); else return (0); } @@ -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 @@ -119,6 +119,8 @@ static int _rl_col_width PARAMS((const char *, int, int, int)); buffer index in others. This macro is used when deciding whether the current cursor position is in the middle of a prompt string containing invisible characters. XXX - might need to take `modmark' into account. */ +/* XXX - only valid when tested against _rl_last_c_pos; buffer indices need + to use prompt_last_invisible directly. */ #define PROMPT_ENDING_INDEX \ ((MB_CUR_MAX > 1 && rl_byte_oriented == 0) ? prompt_physical_chars : prompt_last_invisible+1) @@ -1674,10 +1676,10 @@ update_line (old, new, current_line, omax, nmax, inv_botlin) if (lendiff > nmax) lendiff = nmax; od = ofd - old; /* index of first difference in visible line */ - nd = nfd - new; + nd = nfd - new; /* nd, od are buffer indexes */ if (current_line == 0 && !_rl_horizontal_scroll_mode && _rl_term_cr && lendiff > prompt_visible_length && _rl_last_c_pos > 0 && - (((od > 0 || nd > 0) && (od < PROMPT_ENDING_INDEX || nd < PROMPT_ENDING_INDEX)) || + (((od > 0 || nd > 0) && (od <= prompt_last_invisible || nd <= prompt_last_invisible)) || ((od >= lendiff) && _rl_last_c_pos < PROMPT_ENDING_INDEX))) { #if defined (__MSDOS__) @@ -1702,7 +1704,7 @@ update_line (old, new, current_line, omax, nmax, inv_botlin) was within the prompt, see if we need to recompute where the lines differ. Check whether where we are now is past the last place where the old and new lines are the same and short-circuit now if we are. */ - if ((od < PROMPT_ENDING_INDEX || nd < PROMPT_ENDING_INDEX) && + if ((od <= prompt_last_invisible || nd <= prompt_last_invisible) && omax == nmax && lendiff > (ols-old) && lendiff > (nls-new)) return; @@ -1714,7 +1716,7 @@ update_line (old, new, current_line, omax, nmax, inv_botlin) first difference, but you don't know the number of invisible characters in that case. This needs a lot of work to be efficient. */ - if ((od < PROMPT_ENDING_INDEX || nd < PROMPT_ENDING_INDEX)) + if ((od <= prompt_last_invisible || nd <= prompt_last_invisible)) { nfd = new + lendiff; /* number of characters we output above */ nd = lendiff; diff --git a/doc/rltech.texi b/doc/rltech.texi index 0902852..b8ce90f 100644 --- a/doc/rltech.texi +++ b/doc/rltech.texi @@ -1531,7 +1531,7 @@ main (int c, char **v) @{ rl_resize_terminal (); sigwinch_received = 0; - }@ + @} if (r < 0) continue; @@ -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 diff --git a/doc/version.texi b/doc/version.texi index 766864a..9dc2998 100644 --- a/doc/version.texi +++ b/doc/version.texi @@ -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 @@ -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 */ /* **************************************************************** */ |