aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'readline/callback.c')
-rw-r--r--readline/callback.c70
1 files changed, 13 insertions, 57 deletions
diff --git a/readline/callback.c b/readline/callback.c
index 0fc3f90bcd5..7682cd07b0e 100644
--- a/readline/callback.c
+++ b/readline/callback.c
@@ -62,10 +62,8 @@ _rl_callback_generic_arg *_rl_callback_data = 0;
whenever a complete line of input is ready. The user must then
call rl_callback_read_char() every time some input is available, and
rl_callback_read_char() will call the user's function with the complete
- text read in at each end of line. The terminal is kept prepped
- all the time, except during calls to the user's function. Signal
- handlers are only installed when the application calls back into
- readline, so readline doesn't `steal' signals from the application. */
+ text read in at each end of line. The terminal is kept prepped and
+ signals handled all the time, except during calls to the user's function. */
rl_vcpfunc_t *rl_linefunc; /* user callback function */
static int in_handler; /* terminal_prepped and signals set? */
@@ -82,6 +80,10 @@ _rl_callback_newline ()
if (rl_prep_term_function)
(*rl_prep_term_function) (_rl_meta_flag);
+
+#if defined (HANDLE_SIGNALS)
+ rl_set_signals ();
+#endif
}
readline_internal_setup ();
@@ -100,16 +102,6 @@ rl_callback_handler_install (prompt, linefunc)
_rl_callback_newline ();
}
-#if defined (HANDLE_SIGNALS)
-#define CALLBACK_READ_RETURN() \
- do { \
- rl_clear_signals (); \
- return; \
- } while (0)
-#else
-#define CALLBACK_READ_RETURN() return
-#endif
-
/* Read one character, and dispatch to the handler if it ends the line. */
void
rl_callback_read_char ()
@@ -125,24 +117,15 @@ rl_callback_read_char ()
}
memcpy ((void *)olevel, (void *)_rl_top_level, sizeof (procenv_t));
-#if defined (HAVE_POSIX_SIGSETJMP)
- jcode = sigsetjmp (_rl_top_level, 0);
-#else
jcode = setjmp (_rl_top_level);
-#endif
if (jcode)
{
(*rl_redisplay_function) ();
_rl_want_redisplay = 0;
memcpy ((void *)_rl_top_level, (void *)olevel, sizeof (procenv_t));
- CALLBACK_READ_RETURN ();
+ return;
}
-#if defined (HANDLE_SIGNALS)
- /* Install signal handlers only when readline has control. */
- rl_set_signals ();
-#endif
-
do
{
RL_CHECK_SIGNALS ();
@@ -152,13 +135,12 @@ rl_callback_read_char ()
if (eof == 0 && (RL_ISSTATE (RL_STATE_ISEARCH) == 0) && RL_ISSTATE (RL_STATE_INPUTPENDING))
rl_callback_read_char ();
- CALLBACK_READ_RETURN ();
+ return;
}
else if (RL_ISSTATE (RL_STATE_NSEARCH))
{
eof = _rl_nsearch_callback (_rl_nscxt);
-
- CALLBACK_READ_RETURN ();
+ return;
}
#if defined (VI_MODE)
else if (RL_ISSTATE (RL_STATE_VIMOTION))
@@ -169,7 +151,7 @@ rl_callback_read_char ()
if (RL_ISSTATE (RL_STATE_NUMERICARG) == 0)
_rl_internal_char_cleanup ();
- CALLBACK_READ_RETURN ();
+ return;
}
#endif
else if (RL_ISSTATE (RL_STATE_NUMERICARG))
@@ -181,7 +163,7 @@ rl_callback_read_char ()
else if (RL_ISSTATE (RL_STATE_NUMERICARG) == 0)
_rl_internal_char_cleanup ();
- CALLBACK_READ_RETURN ();
+ return;
}
else if (RL_ISSTATE (RL_STATE_MULTIKEY))
{
@@ -198,7 +180,7 @@ rl_callback_read_char ()
{
/* This allows functions that simply need to read an additional
character (like quoted-insert) to register a function to be
- called when input is available. _rl_callback_data is a
+ called when input is available. _rl_callback_data is simply a
pointer to a struct that has the argument count originally
passed to the registering function and space for any additional
parameters. */
@@ -248,8 +230,6 @@ rl_callback_read_char ()
}
}
while (rl_pending_input || _rl_pushed_input_available () || RL_ISSTATE (RL_STATE_MACROINPUT));
-
- CALLBACK_READ_RETURN ();
}
/* Remove the handler, and make sure the terminal is in its normal state. */
@@ -284,34 +264,10 @@ _rl_callback_data_alloc (count)
return arg;
}
-void
-_rl_callback_data_dispose (arg)
+void _rl_callback_data_dispose (arg)
_rl_callback_generic_arg *arg;
{
xfree (arg);
}
-/* Make sure that this agrees with cases in rl_callback_read_char */
-void
-rl_callback_sigcleanup ()
-{
- if (RL_ISSTATE (RL_STATE_CALLBACK) == 0)
- return;
-
- if (RL_ISSTATE (RL_STATE_ISEARCH))
- _rl_isearch_cleanup (_rl_iscxt, 0);
- else if (RL_ISSTATE (RL_STATE_NSEARCH))
- _rl_nsearch_cleanup (_rl_nscxt, 0);
- else if (RL_ISSTATE (RL_STATE_VIMOTION))
- RL_UNSETSTATE (RL_STATE_VIMOTION);
- else if (RL_ISSTATE (RL_STATE_NUMERICARG))
- {
- _rl_argcxt = 0;
- RL_UNSETSTATE (RL_STATE_NUMERICARG);
- }
- else if (RL_ISSTATE (RL_STATE_MULTIKEY))
- RL_UNSETSTATE (RL_STATE_MULTIKEY);
-
- _rl_callback_func = 0;
-}
#endif