AC_MSG_CHECKING([how to link with libreadline])
AC_MSG_RESULT([$LIBREADLINE])
AC_SEARCH_LIBS([rl_outstream], [readline],
- AC_DEFINE(HAVE_RL_OUTSTREAM, 1, [Define if the readline library provides rl_outstream.])
- )
+ AC_DEFINE(HAVE_RL_OUTSTREAM, 1, [Define if the readline library provides rl_outstream.]))
+ AC_SEARCH_LIBS([rl_echo_signal_char], [readline],
+ AC_DEFINE(HAVE_RL_ECHO_SIGNAL_CHAR, 1, [Define if the readline library provides rl_echo_signal_char.]))
else
dnl If $LIBREADLINE didn't lead to a usable library, we don't
dnl need $INCREADLINE either.
#if HAVE_READLINE
#include <readline/readline.h>
#include <readline/history.h>
+#include <termios.h>
static char *history_file;
return UP_CAST (r, struct terminal_reader, reader);
}
-/*
- Older libreadline versions do not provide rl_outstream.
- However, it is almost always going to be the same as stdout.
- */
-#if HAVE_RL_OUTSTREAM
+/* Older libreadline versions do not provide rl_outstream.
+ However, it is almost always going to be the same as stdout. */
+#if ! HAVE_RL_OUTSTREAM
# define rl_outstream stdout
#endif
+/* Similarly, rl_echo_signal_char is fairly recent.
+ We provide our own crude version if it is not present. */
+#if ! HAVE_RL_ECHO_SIGNAL_CHAR
+static void
+rl_echo_signal_char (int sig)
+{
+ struct termios t;
+ if (0 == tcgetattr (0, &t))
+ {
+ cc_t c = t.c_cc[VINTR];
+
+ if (c >= 0 && c <= 'Z' - 'A')
+ fprintf (rl_outstream, "^%c", 'A' + c - 1);
+ else
+ fprintf (rl_outstream, "%c", c);
+ }
+ else
+ fprintf (rl_outstream, "^C");
+
+ fflush (rl_outstream);
+}
+#endif
+
+
static size_t
terminal_reader_read (struct lex_reader *r_, char *buf, size_t n,
enum prompt_style prompt_style)