diff options
author | Andrey A. Chernov <ache@FreeBSD.org> | 2006-03-27 22:47:12 +0000 |
---|---|---|
committer | Andrey A. Chernov <ache@FreeBSD.org> | 2006-03-27 22:47:12 +0000 |
commit | 7a7865ca930d05a56cd5ea0f9e563d82f2ef6b97 (patch) | |
tree | 5e38d670d1899750fd24e8f171fd03d714ab0681 /contrib/libreadline/rltty.c | |
parent | 1708dd06c1bb19f7578bd44156daf8f90c296a62 (diff) | |
download | src-7a7865ca930d05a56cd5ea0f9e563d82f2ef6b97.tar.gz src-7a7865ca930d05a56cd5ea0f9e563d82f2ef6b97.zip |
Virgin import of GNU Readline 5.1
Notes
Notes:
svn path=/vendor/libreadline/dist/; revision=157184
Diffstat (limited to 'contrib/libreadline/rltty.c')
-rw-r--r-- | contrib/libreadline/rltty.c | 79 |
1 files changed, 72 insertions, 7 deletions
diff --git a/contrib/libreadline/rltty.c b/contrib/libreadline/rltty.c index 1a31f35952ea..9a0326ed2095 100644 --- a/contrib/libreadline/rltty.c +++ b/contrib/libreadline/rltty.c @@ -1,7 +1,7 @@ /* rltty.c -- functions to prepare and restore the terminal for readline's use. */ -/* Copyright (C) 1992 Free Software Foundation, Inc. +/* Copyright (C) 1992-2005 Free Software Foundation, Inc. This file is part of the GNU Readline Library, a library for reading lines of text with interactive input and history editing. @@ -152,7 +152,9 @@ set_winsize (tty) #endif /* TIOCGWINSZ */ } -#if defined (NEW_TTY_DRIVER) +#if defined (NO_TTY_DRIVER) +/* Nothing */ +#elif defined (NEW_TTY_DRIVER) /* Values for the `flags' field of a struct bsdtty. This tells which elements of the struct bsdtty have been fetched from the system and @@ -233,6 +235,7 @@ get_tty_settings (tty, tiop) tiop->flags = tiop->lflag = 0; + errno = 0; if (ioctl (tty, TIOCGETP, &(tiop->sgttyb)) < 0) return -1; tiop->flags |= SGTTY_SET; @@ -518,6 +521,7 @@ get_tty_settings (tty, tiop) { set_winsize (tty); + errno = 0; if (_get_tty_settings (tty, tiop) < 0) return -1; @@ -631,9 +635,23 @@ prepare_terminal_settings (meta_flag, oldtio, tiop) #endif /* TERMIOS_TTY_DRIVER && _POSIX_VDISABLE */ } -#endif /* NEW_TTY_DRIVER */ +#endif /* !NEW_TTY_DRIVER */ /* Put the terminal in CBREAK mode so that we can detect key presses. */ +#if defined (NO_TTY_DRIVER) +void +rl_prep_terminal (meta_flag) + int meta_flag; +{ + readline_echoing_p = 1; +} + +void +rl_deprep_terminal () +{ +} + +#else /* ! NO_TTY_DRIVER */ void rl_prep_terminal (meta_flag) int meta_flag; @@ -651,16 +669,43 @@ rl_prep_terminal (meta_flag) if (get_tty_settings (tty, &tio) < 0) { +#if defined (ENOTSUP) + /* MacOS X, at least, lies about the value of errno if tcgetattr fails. */ + if (errno == ENOTTY || errno == ENOTSUP) +#else + if (errno == ENOTTY) +#endif + readline_echoing_p = 1; /* XXX */ release_sigint (); return; } otio = tio; - rl_tty_unset_default_bindings (_rl_keymap); + if (_rl_bind_stty_chars) + { +#if defined (VI_MODE) + /* If editing in vi mode, make sure we restore the bindings in the + insertion keymap no matter what keymap we ended up in. */ + if (rl_editing_mode == vi_mode) + rl_tty_unset_default_bindings (vi_insertion_keymap); + else +#endif + rl_tty_unset_default_bindings (_rl_keymap); + } save_tty_chars (&otio); RL_SETSTATE(RL_STATE_TTYCSAVED); - _rl_bind_tty_special_chars (_rl_keymap, tio); + if (_rl_bind_stty_chars) + { +#if defined (VI_MODE) + /* If editing in vi mode, make sure we set the bindings in the + insertion keymap no matter what keymap we ended up in. */ + if (rl_editing_mode == vi_mode) + _rl_bind_tty_special_chars (vi_insertion_keymap, tio); + else +#endif + _rl_bind_tty_special_chars (_rl_keymap, tio); + } prepare_terminal_settings (meta_flag, otio, &tio); @@ -710,6 +755,7 @@ rl_deprep_terminal () release_sigint (); } +#endif /* !NO_TTY_DRIVER */ /* **************************************************************** */ /* */ @@ -721,6 +767,10 @@ int rl_restart_output (count, key) int count, key; { +#if defined (__MINGW32__) + return 0; +#else /* !__MING32__ */ + int fildes = fileno (rl_outstream); #if defined (TIOCSTART) #if defined (apollo) @@ -748,12 +798,17 @@ rl_restart_output (count, key) #endif /* !TIOCSTART */ return 0; +#endif /* !__MINGW32__ */ } int rl_stop_output (count, key) int count, key; { +#if defined (__MINGW32__) + return 0; +#else + int fildes = fileno (rl_instream); #if defined (TIOCSTOP) @@ -776,6 +831,7 @@ rl_stop_output (count, key) #endif /* !TIOCSTOP */ return 0; +#endif /* !__MINGW32__ */ } /* **************************************************************** */ @@ -784,9 +840,16 @@ rl_stop_output (count, key) /* */ /* **************************************************************** */ +#if !defined (NO_TTY_DRIVER) #define SET_SPECIAL(sc, func) set_special_char(kmap, &ttybuff, sc, func) +#endif -#if defined (NEW_TTY_DRIVER) +#if defined (NO_TTY_DRIVER) + +#define SET_SPECIAL(sc, func) +#define RESET_SPECIAL(c) + +#elif defined (NEW_TTY_DRIVER) static void set_special_char (kmap, tiop, sc, func) Keymap kmap; @@ -867,6 +930,7 @@ void rltty_set_default_bindings (kmap) Keymap kmap; { +#if !defined (NO_TTY_DRIVER) TIOTYPE ttybuff; int tty; static int called = 0; @@ -875,6 +939,7 @@ rltty_set_default_bindings (kmap) if (get_tty_settings (tty, &ttybuff) == 0) _rl_bind_tty_special_chars (kmap, ttybuff); +#endif } /* New public way to set the system default editing chars to their readline @@ -912,7 +977,7 @@ rl_tty_unset_default_bindings (kmap) #if defined (HANDLE_SIGNALS) -#if defined (NEW_TTY_DRIVER) +#if defined (NEW_TTY_DRIVER) || defined (NO_TTY_DRIVER) int _rl_disable_tty_signals () { |